diff --git a/pkg/kudoctl/cmd/output/output.go b/pkg/kudoctl/cmd/output/output.go index 130d0d701..567b6e65d 100644 --- a/pkg/kudoctl/cmd/output/output.go +++ b/pkg/kudoctl/cmd/output/output.go @@ -30,6 +30,10 @@ func (t *Type) AsStringPtr() *string { return (*string)(t) } +func (t Type) IsFormattedOutput() bool { + return t != "" +} + func (t Type) Validate() error { if t == "" { return nil diff --git a/pkg/kudoctl/cmd/root.go b/pkg/kudoctl/cmd/root.go index e30d47c7c..42a6dd980 100644 --- a/pkg/kudoctl/cmd/root.go +++ b/pkg/kudoctl/cmd/root.go @@ -67,7 +67,7 @@ and serves as an API aggregation layer. cmd.AddCommand(newRepoCmd(fs, cmd.OutOrStdout())) cmd.AddCommand(newSearchCmd(fs, cmd.OutOrStdout())) cmd.AddCommand(newTestCmd()) - cmd.AddCommand(newVersionCmd()) + cmd.AddCommand(newVersionCmd(cmd.OutOrStdout())) cmd.AddCommand(newDiagnosticsCmd(fs)) initGlobalFlags(cmd, cmd.OutOrStdout()) diff --git a/pkg/kudoctl/cmd/version.go b/pkg/kudoctl/cmd/version.go index f9582e618..9d840dd9d 100644 --- a/pkg/kudoctl/cmd/version.go +++ b/pkg/kudoctl/cmd/version.go @@ -2,9 +2,11 @@ package cmd import ( "fmt" + "io" "github.com/spf13/cobra" + "github.com/kudobuilder/kudo/pkg/kudoctl/cmd/output" "github.com/kudobuilder/kudo/pkg/version" ) @@ -13,22 +15,47 @@ var ( kubectl kudo version` ) +type VersionForOutput struct { + Client version.Info `json:"clientVersion"` +} + +type versionCmdOpts struct { + out io.Writer + output output.Type +} + // newVersionCmd returns a new initialized instance of the version sub command -func newVersionCmd() *cobra.Command { +func newVersionCmd(out io.Writer) *cobra.Command { + versionCmdOpts := &versionCmdOpts{out: out} + versionCmd := &cobra.Command{ Use: "version", Short: "Print the current KUDO package version.", Long: `Print the current installed KUDO package version.`, Example: versionExample, - RunE: VersionCmd, + RunE: func(cmd *cobra.Command, args []string) error { + return runVersionCmd(versionCmdOpts) + }, } + versionCmd.Flags().StringVarP((*string)(&versionCmdOpts.output), "output", "o", "", "Output format for command results.") + return versionCmd } -// VersionCmd performs the version sub command -func VersionCmd(cmd *cobra.Command, args []string) error { - kudoVersion := version.Get() - fmt.Printf("KUDO Version: %s\n", fmt.Sprintf("%#v", kudoVersion)) - return nil +// runVersionCmd performs the version sub command +func runVersionCmd(opts *versionCmdOpts) error { + if err := opts.output.Validate(); err != nil { + return err + } + v := VersionForOutput{ + Client: version.Get(), + } + + if opts.output.IsFormattedOutput() { + return output.WriteObject(v, opts.output, opts.out) + } + + _, err := fmt.Fprintf(opts.out, "KUDO Version: %s\n", fmt.Sprintf("%#v", v.Client)) + return err }