kuberang icon indicating copy to clipboard operation
kuberang copied to clipboard

Add JSON output format

Open alexbrand opened this issue 7 years ago • 1 comments

This PR adds support for printing JSON to the console, instead of the table format. (Fixes #5 )

The main change is the introduction of a report, which can be populated with successes, errors, and ignored errors. The report itself is considered successful if there are no errors.

There are two implementations of report:

  • simpleReport: the simple report just stores results in memory, and is serialized to JSON at the end of the workflow.
  • echoReport: the echo report is similar to the simpleReport, but it also prints messages to the screen as items are added.

The following is a sample of a happy path report:

./kuberang -o json
{
    "CheckResults": [
        {
            "Name": "Configured kubectl exists",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Nginx service does not already exist",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "BusyBox service does not already exist",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Nginx service does not already exist",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Issued BusyBox start request",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Issued Nginx start request",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Both deployments completed successfully within timeout",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Issued expose Nginx service request",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Grab nginx pod ip addresses",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Grab nginx service ip address",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Grab BusyBox pod name",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Accessed Nginx service at 172.17.119.10 from BusyBox",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Accessed Nginx service via DNS kuberang-nginx-1481031653201225236 from BusyBox",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Accessed Nginx pod at 172.16.0.7 from BusyBox",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Accessed Nginx pod at 172.16.114.7 from BusyBox",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Accessed Google.com from BusyBox",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Accessed Nginx service via DNS kuberang-nginx-1481031653201225236 from this node",
            "Success": false,
            "Ignored": true
        },
        {
            "Name": "Accessed Nginx pod at 172.16.0.7 from this node",
            "Success": false,
            "Ignored": true
        },
        {
            "Name": "Accessed Nginx pod at 172.16.114.7 from this node",
            "Success": false,
            "Ignored": true
        },
        {
            "Name": "Accessed Google.com from this node",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Powered down Nginx service",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Powered down Busybox deployment",
            "Success": true,
            "Ignored": false
        },
        {
            "Name": "Powered down Nginx deployment",
            "Success": true,
            "Ignored": false
        }
    ]
}

alexbrand avatar Dec 06 '16 13:12 alexbrand

Looks good. I've added a couple of related questions in the Issue itself.

marcinc avatar Dec 06 '16 17:12 marcinc