Unverified Commit 6707fe04 authored by Matthew Fisher's avatar Matthew Fisher Committed by GitHub

Merge pull request #3190 from mattfarina/feat/status-json

feat(status): Optional output as JSON and YAML
parents 1042f611 9d4b9ca2
...@@ -17,11 +17,13 @@ limitations under the License. ...@@ -17,11 +17,13 @@ limitations under the License.
package main package main
import ( import (
"encoding/json"
"fmt" "fmt"
"io" "io"
"regexp" "regexp"
"text/tabwriter" "text/tabwriter"
"github.com/ghodss/yaml"
"github.com/gosuri/uitable" "github.com/gosuri/uitable"
"github.com/gosuri/uitable/util/strutil" "github.com/gosuri/uitable/util/strutil"
"github.com/spf13/cobra" "github.com/spf13/cobra"
...@@ -48,6 +50,7 @@ type statusCmd struct { ...@@ -48,6 +50,7 @@ type statusCmd struct {
out io.Writer out io.Writer
client helm.Interface client helm.Interface
version int32 version int32
outfmt string
} }
func newStatusCmd(client helm.Interface, out io.Writer) *cobra.Command { func newStatusCmd(client helm.Interface, out io.Writer) *cobra.Command {
...@@ -74,6 +77,7 @@ func newStatusCmd(client helm.Interface, out io.Writer) *cobra.Command { ...@@ -74,6 +77,7 @@ func newStatusCmd(client helm.Interface, out io.Writer) *cobra.Command {
} }
cmd.PersistentFlags().Int32Var(&status.version, "revision", 0, "if set, display the status of the named release with revision") cmd.PersistentFlags().Int32Var(&status.version, "revision", 0, "if set, display the status of the named release with revision")
cmd.PersistentFlags().StringVarP(&status.outfmt, "output", "o", "", "output the status in the specified format (json or yaml)")
return cmd return cmd
} }
...@@ -84,8 +88,27 @@ func (s *statusCmd) run() error { ...@@ -84,8 +88,27 @@ func (s *statusCmd) run() error {
return prettyError(err) return prettyError(err)
} }
PrintStatus(s.out, res) switch s.outfmt {
return nil case "":
PrintStatus(s.out, res)
return nil
case "json":
data, err := json.Marshal(res)
if err != nil {
return fmt.Errorf("Failed to Marshal JSON output: %s", err)
}
s.out.Write(data)
return nil
case "yaml":
data, err := yaml.Marshal(res)
if err != nil {
return fmt.Errorf("Failed to Marshal YAML output: %s", err)
}
s.out.Write(data)
return nil
}
return fmt.Errorf("Unknown output format %q", s.outfmt)
} }
// PrintStatus prints out the status of a release. Shared because also used by // PrintStatus prints out the status of a release. Shared because also used by
......
...@@ -65,6 +65,16 @@ func TestStatusCmd(t *testing.T) { ...@@ -65,6 +65,16 @@ func TestStatusCmd(t *testing.T) {
Notes: "release notes", Notes: "release notes",
}), }),
}, },
{
name: "get status of a deployed release with notes in json",
args: []string{"flummoxed-chickadee"},
flags: []string{"-o", "json"},
expected: `{"name":"flummoxed-chickadee","info":{"status":{"code":1,"notes":"release notes"},"first_deployed":{"seconds":242085845},"last_deployed":{"seconds":242085845}}}`,
rel: releaseMockWithStatus(&release.Status{
Code: release.Status_DEPLOYED,
Notes: "release notes",
}),
},
{ {
name: "get status of a deployed release with resources", name: "get status of a deployed release with resources",
args: []string{"flummoxed-chickadee"}, args: []string{"flummoxed-chickadee"},
...@@ -74,6 +84,16 @@ func TestStatusCmd(t *testing.T) { ...@@ -74,6 +84,16 @@ func TestStatusCmd(t *testing.T) {
Resources: "resource A\nresource B\n", Resources: "resource A\nresource B\n",
}), }),
}, },
{
name: "get status of a deployed release with resources in YAML",
args: []string{"flummoxed-chickadee"},
flags: []string{"-o", "yaml"},
expected: "info:\nfirst_deployed:\nseconds:242085845\nlast_deployed:\nseconds:242085845\nstatus:\ncode:1\nresources:|\nresourceA\nresourceB\nname:flummoxed-chickadee\n",
rel: releaseMockWithStatus(&release.Status{
Code: release.Status_DEPLOYED,
Resources: "resource A\nresource B\n",
}),
},
{ {
name: "get status of a deployed release with test suite", name: "get status of a deployed release with test suite",
args: []string{"flummoxed-chickadee"}, args: []string{"flummoxed-chickadee"},
......
...@@ -23,6 +23,7 @@ helm status [flags] RELEASE_NAME ...@@ -23,6 +23,7 @@ helm status [flags] RELEASE_NAME
### Options ### Options
``` ```
-o, --output string output the status in the specified format (json or yaml)
--revision int32 if set, display the status of the named release with revision --revision int32 if set, display the status of the named release with revision
--tls enable TLS for request --tls enable TLS for request
--tls-ca-cert string path to TLS CA certificate file (default "$HELM_HOME/ca.pem") --tls-ca-cert string path to TLS CA certificate file (default "$HELM_HOME/ca.pem")
...@@ -45,4 +46,4 @@ helm status [flags] RELEASE_NAME ...@@ -45,4 +46,4 @@ helm status [flags] RELEASE_NAME
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 7-Nov-2017 ###### Auto generated by spf13/cobra on 12-Dec-2017
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment