diff --git a/cmd/mongocli/mongocli.go b/cmd/mongocli/mongocli.go index 707860b973..55518fefaf 100644 --- a/cmd/mongocli/mongocli.go +++ b/cmd/mongocli/mongocli.go @@ -81,7 +81,6 @@ func Execute() { var ( profile string - output string ) func init() { //nolint:gochecknoinits // This is the cobra way @@ -101,7 +100,7 @@ func init() { //nolint:gochecknoinits // This is the cobra way cobra.EnableCommandSorting = false rootCmd.PersistentFlags().StringVarP(&profile, flag.Profile, flag.ProfileShort, "", usage.Profile) - rootCmd.PersistentFlags().StringVarP(&output, flag.Output, flag.OutputShort, "", usage.FormatOut) + cobra.OnInitialize(initConfig) } @@ -117,7 +116,6 @@ func initConfig() { } else if len(availableProfiles) == 1 { config.SetName(availableProfiles[0]) } - config.SetOutput(output) } func main() { diff --git a/e2e/atlas/clusters_test.go b/e2e/atlas/clusters_test.go index e5775d3855..176fc39ede 100644 --- a/e2e/atlas/clusters_test.go +++ b/e2e/atlas/clusters_test.go @@ -70,7 +70,7 @@ func TestClustersFlags(t *testing.T) { clustersEntity, "watch", clusterName, - "-o=json") + ) cmd.Env = os.Environ() resp, err := cmd.CombinedOutput() diff --git a/e2e/cloud_manager/dbusers_test.go b/e2e/cloud_manager/dbusers_test.go index 8aceaf91bf..ada02f3025 100644 --- a/e2e/cloud_manager/dbusers_test.go +++ b/e2e/cloud_manager/dbusers_test.go @@ -26,7 +26,7 @@ import ( "testing" "github.com/mongodb/mongocli/e2e" - "go.mongodb.org/atlas/mongodbatlas" + "go.mongodb.org/ops-manager/opsmngr" ) func TestDBUsers(t *testing.T) { @@ -77,8 +77,9 @@ func TestDBUsers(t *testing.T) { t.Fatalf("unexpected error: %v, resp: %v", err, string(resp)) } - var users []mongodbatlas.DatabaseUser + var users []opsmngr.MongoDBUser if err := json.Unmarshal(resp, &users); err != nil { + t.Log(string(resp)) t.Fatalf("unexpected error: %v", err) } diff --git a/e2e/cloud_manager/deploy_replica_set_test.go b/e2e/cloud_manager/deploy_replica_set_test.go index 69c368f9f2..a97107a6cd 100644 --- a/e2e/cloud_manager/deploy_replica_set_test.go +++ b/e2e/cloud_manager/deploy_replica_set_test.go @@ -96,6 +96,7 @@ func TestDeployReplicaSet(t *testing.T) { } var clusters []*convert.ClusterConfig if err := json.Unmarshal(resp, &clusters); err != nil { + t.Log(string(resp)) t.Fatalf("unexpected error: %v", err) } diff --git a/e2e/config/config_test.go b/e2e/config/config_test.go index 6079cfdff4..6d22484d93 100644 --- a/e2e/config/config_test.go +++ b/e2e/config/config_test.go @@ -54,7 +54,6 @@ func TestConfig(t *testing.T) { t.Fatalf("unexpected error: %v, resp: %v", err, string(resp)) } const expected = `org_id = 5e429e7706822c6eac4d5971 -output = public_api_key = redacted service = cloud ` diff --git a/go.mod b/go.mod index 197d8e83e7..17fd563f50 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/go-test/deep v1.0.7 github.com/golang/mock v1.4.4 + github.com/mattn/go-isatty v0.0.8 github.com/mitchellh/go-homedir v1.1.0 github.com/mitchellh/mapstructure v1.3.1 // indirect github.com/mongodb-forks/digest v1.0.1 diff --git a/go.sum b/go.sum index 89fc24a310..7d36472944 100644 --- a/go.sum +++ b/go.sum @@ -48,6 +48,7 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= diff --git a/internal/cli/alerts/acknowledge.go b/internal/cli/alerts/acknowledge.go index b5168bc7b6..0ad8a64021 100644 --- a/internal/cli/alerts/acknowledge.go +++ b/internal/cli/alerts/acknowledge.go @@ -21,7 +21,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -30,6 +29,7 @@ import ( type AcknowledgeOpts struct { cli.GlobalOpts + cli.OutputOpts alertID string until string comment string @@ -52,7 +52,7 @@ func (opts *AcknowledgeOpts) Run() error { return err } - return output.Print(config.Default(), ackTemplate, r) + return opts.Print(r) } func (opts *AcknowledgeOpts) newAcknowledgeRequest() *atlas.AcknowledgeRequest { @@ -71,6 +71,7 @@ func (opts *AcknowledgeOpts) newAcknowledgeRequest() *atlas.AcknowledgeRequest { // mongocli atlas alerts acknowledge --projectId projectId --forever --comment comment --until until func AcknowledgeBuilder() *cobra.Command { opts := new(AcknowledgeOpts) + opts.Template = ackTemplate cmd := &cobra.Command{ Use: "acknowledge ", Short: acknowledgeAlerts, @@ -80,19 +81,23 @@ func AcknowledgeBuilder() *cobra.Command { if opts.forever && opts.until != "" { return fmt.Errorf("--%s and --%s are exclusive", flag.Forever, flag.Until) } - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), ackTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.alertID = args[0] return opts.Run() }, } - + cmd.OutOrStdout() cmd.Flags().BoolVarP(&opts.forever, flag.Forever, flag.ForeverShort, false, usage.Forever) cmd.Flags().StringVar(&opts.until, flag.Until, "", usage.Until) cmd.Flags().StringVar(&opts.comment, flag.Comment, "", usage.Comment) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/alerts/describe.go b/internal/cli/alerts/describe.go index daf2972404..7634458eb9 100644 --- a/internal/cli/alerts/describe.go +++ b/internal/cli/alerts/describe.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type DescribeOpts struct { cli.GlobalOpts + cli.OutputOpts alertID string store store.AlertDescriber } @@ -47,7 +47,7 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } // mongocli atlas alerts describe --projectId projectId @@ -58,7 +58,10 @@ func DescribeBuilder() *cobra.Command { Short: describeAlert, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), describeTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.alertID = args[0] @@ -67,6 +70,7 @@ func DescribeBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/alerts/global_list.go b/internal/cli/alerts/global_list.go index 625476241c..3a34bb7186 100644 --- a/internal/cli/alerts/global_list.go +++ b/internal/cli/alerts/global_list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +26,7 @@ import ( type GlobalListOpts struct { cli.ListOpts + cli.OutputOpts status string store store.GlobalAlertLister } @@ -44,7 +44,7 @@ func (opts *GlobalListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } func (opts *GlobalListOpts) newAlertsListOptions() *atlas.AlertsListOptions { @@ -57,12 +57,14 @@ func (opts *GlobalListOpts) newAlertsListOptions() *atlas.AlertsListOptions { // mongocli om|cm alert(s) global list [--status status] func GlobalListBuilder() *cobra.Command { opts := &GlobalListOpts{} + opts.Template = listTemplate cmd := &cobra.Command{ Use: "list", Short: listGlobalAlerts, Aliases: []string{"ls"}, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { + opts.OutWriter = cmd.OutOrStdout() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -74,5 +76,7 @@ func GlobalListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.status, flag.Status, "", usage.Status) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + return cmd } diff --git a/internal/cli/alerts/list.go b/internal/cli/alerts/list.go index 5e53848890..cb137178b8 100644 --- a/internal/cli/alerts/list.go +++ b/internal/cli/alerts/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +26,7 @@ import ( type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts status string store store.AlertLister @@ -50,7 +50,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } func (opts *ListOpts) newAlertsListOptions() *atlas.AlertsListOptions { @@ -71,7 +71,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -83,6 +86,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.status, flag.Status, "", usage.Status) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/alerts/settings/create.go b/internal/cli/alerts/settings/create.go index 0ff129e5d6..a5197bcf47 100644 --- a/internal/cli/alerts/settings/create.go +++ b/internal/cli/alerts/settings/create.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts ConfigOpts store store.AlertConfigurationCreator } @@ -45,7 +45,7 @@ func (opts *CreateOpts) Run() error { return err } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } // mongocli atlas alerts config(s) create [--event event] [--enabled enabled][--matcherField fieldName --matcherOperator operator --matcherValue value] @@ -54,12 +54,16 @@ func (opts *CreateOpts) Run() error { // [--projectId projectId] func CreateBuilder() *cobra.Command { opts := new(CreateOpts) + opts.Template = createTemplate cmd := &cobra.Command{ Use: "create", Short: createAlertsConfig, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -95,6 +99,7 @@ func CreateBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.notificationVictorOpsRoutingKey, flag.NotificationVictorOpsRoutingKey, "", usage.NotificationVictorOpsRoutingKey) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/alerts/settings/fields_type.go b/internal/cli/alerts/settings/fields_type.go index eec2caba24..d428b5c013 100644 --- a/internal/cli/alerts/settings/fields_type.go +++ b/internal/cli/alerts/settings/fields_type.go @@ -15,13 +15,16 @@ package settings import ( + "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" - "github.com/mongodb/mongocli/internal/output" + "github.com/mongodb/mongocli/internal/flag" "github.com/mongodb/mongocli/internal/store" + "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" ) type FieldsTypeOpts struct { + cli.OutputOpts store store.MatcherFieldsLister } @@ -39,18 +42,20 @@ func (opts *FieldsTypeOpts) Run() error { return err } - return output.Print(config.Default(), matcherFieldsTemplate, r) + return opts.Print(r) } // mongocli atlas alerts config(s) fields type func FieldsTypeBuilder() *cobra.Command { opts := &FieldsTypeOpts{} + opts.Template = matcherFieldsTemplate cmd := &cobra.Command{ Use: "type", Short: configFieldsType, Aliases: []string{"types"}, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { + opts.OutWriter = cmd.OutOrStdout() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -58,5 +63,7 @@ func FieldsTypeBuilder() *cobra.Command { }, } + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + return cmd } diff --git a/internal/cli/alerts/settings/list.go b/internal/cli/alerts/settings/list.go index 7700986fc7..1d5747f53c 100644 --- a/internal/cli/alerts/settings/list.go +++ b/internal/cli/alerts/settings/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts store store.AlertConfigurationLister } @@ -47,7 +47,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), settingsListTemplate, r) + return opts.Print(r) } // mongocli atlas alerts config(s) list --projectId projectId [--page N] [--limit N] @@ -59,7 +59,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), settingsListTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -70,6 +73,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/alerts/settings/update.go b/internal/cli/alerts/settings/update.go index 8f0608a477..23fb37b3b5 100644 --- a/internal/cli/alerts/settings/update.go +++ b/internal/cli/alerts/settings/update.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type UpdateOpts struct { cli.GlobalOpts + cli.OutputOpts ConfigOpts store store.AlertConfigurationUpdater alertID string @@ -47,7 +47,7 @@ func (opts *UpdateOpts) Run() error { return err } - return output.Print(config.Default(), updateTemplate, r) + return opts.Print(r) } // mongocli atlas alerts config(s) update [--event event] [--enabled enabled][--matcherField fieldName --matcherOperator operator --matcherValue value] @@ -62,7 +62,10 @@ func UpdateBuilder() *cobra.Command { Aliases: []string{"updates"}, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), updateTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.alertID = args[0] @@ -99,6 +102,7 @@ func UpdateBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.notificationVictorOpsRoutingKey, flag.NotificationVictorOpsRoutingKey, "", usage.NotificationVictorOpsRoutingKey) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/alerts/unacknowledge.go b/internal/cli/alerts/unacknowledge.go index 08585cb51c..af4d374b3f 100644 --- a/internal/cli/alerts/unacknowledge.go +++ b/internal/cli/alerts/unacknowledge.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +26,7 @@ import ( type UnacknowledgeOpts struct { cli.GlobalOpts + cli.OutputOpts alertID string comment string store store.AlertAcknowledger @@ -47,7 +47,7 @@ func (opts *UnacknowledgeOpts) Run() error { return err } - return output.Print(config.Default(), unackTemplate, r) + return opts.Print(r) } func (opts *UnacknowledgeOpts) newAcknowledgeRequest() *atlas.AcknowledgeRequest { @@ -66,7 +66,10 @@ func UnacknowledgeBuilder() *cobra.Command { Aliases: []string{"unack"}, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), unackTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.alertID = args[0] @@ -77,6 +80,7 @@ func UnacknowledgeBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.comment, flag.Comment, "", usage.Comment) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/backup/restores_list.go b/internal/cli/atlas/backup/restores_list.go index 5aab127b4b..e6728698fd 100644 --- a/internal/cli/atlas/backup/restores_list.go +++ b/internal/cli/atlas/backup/restores_list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type RestoresListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts clusterName string store store.RestoreJobsLister @@ -48,7 +48,7 @@ func (opts *RestoresListOpts) Run() error { return err } - return output.Print(config.Default(), restoreListTemplate, r) + return opts.Print(r) } // mongocli atlas backup(s) restore(s) job(s) list [--page N] [--limit N] @@ -60,7 +60,10 @@ func RestoresListBuilder() *cobra.Command { Short: listRestores, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), restoreListTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.clusterName = args[0] @@ -73,6 +76,7 @@ func RestoresListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/backup/restores_start.go b/internal/cli/atlas/backup/restores_start.go index 91a2b48bab..50e3634988 100644 --- a/internal/cli/atlas/backup/restores_start.go +++ b/internal/cli/atlas/backup/restores_start.go @@ -21,7 +21,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -36,6 +35,7 @@ const ( type RestoresStartOpts struct { cli.GlobalOpts + cli.OutputOpts method string clusterName string targetProjectID string @@ -63,7 +63,7 @@ func (opts *RestoresStartOpts) Run() error { return err } - return output.Print(config.Default(), startTemplate, r) + return opts.Print(r) } func (opts *RestoresStartOpts) newCloudProviderSnapshotRestoreJob() *atlas.CloudProviderSnapshotRestoreJob { @@ -169,7 +169,10 @@ func RestoresStartBuilder() *cobra.Command { } } - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), startTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.method = args[0] @@ -194,6 +197,7 @@ func RestoresStartBuilder() *cobra.Command { cmd.Flags().Int64Var(&opts.pointInTimeUTCMillis, flag.PointInTimeUTCMillis, 0, usage.PointInTimeUTCMillis) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/backup/snapshots/create.go b/internal/cli/atlas/backup/snapshots/create.go index 351a13e1a4..c57871ad17 100644 --- a/internal/cli/atlas/backup/snapshots/create.go +++ b/internal/cli/atlas/backup/snapshots/create.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +26,7 @@ import ( type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts store store.SnapshotsCreator clusterName string desc string @@ -49,7 +49,7 @@ func (opts *CreateOpts) Run() error { return err } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } func (opts *CreateOpts) newCloudProviderSnapshot() *mongodbatlas.CloudProviderSnapshot { @@ -69,7 +69,10 @@ func CreateBuilder() *cobra.Command { Short: createSnapshot, Args: cobra.ExactValidArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.clusterName = args[0] @@ -80,6 +83,7 @@ func CreateBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.retentionInDays, flag.Retention, 1, usage.PrivateEndpointRegion) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.Description) diff --git a/internal/cli/atlas/backup/snapshots/describe.go b/internal/cli/atlas/backup/snapshots/describe.go index fc4f92d78c..638c05b86a 100644 --- a/internal/cli/atlas/backup/snapshots/describe.go +++ b/internal/cli/atlas/backup/snapshots/describe.go @@ -17,7 +17,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -29,6 +28,7 @@ const describeTemplate = `ID SNAPSHOT TYPE TYPE DESCRIPTION EXPIRES AT type DescribeOpts struct { cli.GlobalOpts + cli.OutputOpts store store.SnapshotsDescriber snapshot string clusterName string @@ -46,7 +46,7 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } // mongocli atlas backup snapshots describe snapshotID --clusterName clusterName --projectId projectId @@ -57,7 +57,10 @@ func DescribeBuilder() *cobra.Command { Short: describeSnapshot, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), describeTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.snapshot = args[0] @@ -68,6 +71,7 @@ func DescribeBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.clusterName, flag.ClusterName, "", usage.ClusterName) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.ClusterName) return cmd diff --git a/internal/cli/atlas/backup/snapshots/list.go b/internal/cli/atlas/backup/snapshots/list.go index ed382e9335..47534cad52 100644 --- a/internal/cli/atlas/backup/snapshots/list.go +++ b/internal/cli/atlas/backup/snapshots/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts clusterName string store store.SnapshotsLister @@ -48,7 +48,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli atlas backups snapshots list [--projectId projectId] [--page N] [--limit N] @@ -60,7 +60,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.clusterName = args[0] @@ -73,6 +76,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/clusters/create.go b/internal/cli/atlas/clusters/create.go index 487efba133..cbbbb5c6c6 100644 --- a/internal/cli/atlas/clusters/create.go +++ b/internal/cli/atlas/clusters/create.go @@ -21,7 +21,6 @@ import ( "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/file" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/afero" @@ -42,6 +41,7 @@ const ( type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts name string provider string region string @@ -75,7 +75,7 @@ func (opts *CreateOpts) Run() error { return err } - return output.Print(config.Default(), createTmpl, r) + return opts.Print(r) } func (opts *CreateOpts) newCluster() (*atlas.Cluster, error) { @@ -206,7 +206,10 @@ func CreateBuilder() *cobra.Command { if len(args) != 0 { opts.name = args[0] } - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTmpl), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -225,6 +228,7 @@ func CreateBuilder() *cobra.Command { cmd.Flags().Int64VarP(&opts.shards, flag.Shards, flag.ShardsShort, 1, usage.Shards) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagFilename(flag.File) diff --git a/internal/cli/atlas/clusters/describe.go b/internal/cli/atlas/clusters/describe.go index d2a1ba182a..43478b6afa 100644 --- a/internal/cli/atlas/clusters/describe.go +++ b/internal/cli/atlas/clusters/describe.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type DescribeOpts struct { cli.GlobalOpts + cli.OutputOpts name string store store.ClusterDescriber } @@ -46,7 +46,7 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } // mongocli atlas cluster(s) describe --projectId projectId @@ -57,7 +57,10 @@ func DescribeBuilder() *cobra.Command { Short: describeCluster, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), describeTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.name = args[0] @@ -66,6 +69,7 @@ func DescribeBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/clusters/list.go b/internal/cli/atlas/clusters/list.go index ee69399099..12dc8c3585 100644 --- a/internal/cli/atlas/clusters/list.go +++ b/internal/cli/atlas/clusters/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts store store.ClusterLister } @@ -47,7 +47,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli atlas cluster(s) list --projectId projectId [--page N] [--limit N] @@ -59,7 +59,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -70,6 +73,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/clusters/pause.go b/internal/cli/atlas/clusters/pause.go index 7211360855..fb6bcddf11 100644 --- a/internal/cli/atlas/clusters/pause.go +++ b/internal/cli/atlas/clusters/pause.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type PauseOpts struct { cli.GlobalOpts + cli.OutputOpts name string store store.ClusterPauser } @@ -44,7 +44,7 @@ func (opts *PauseOpts) Run() error { return err } - return output.Print(config.Default(), pauseTmpl, r) + return opts.Print(r) } // mongocli atlas cluster(s) pause [--projectId projectId] @@ -55,7 +55,10 @@ func PauseBuilder() *cobra.Command { Short: pauseCluster, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), pauseTmpl), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.name = args[0] @@ -64,6 +67,7 @@ func PauseBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/clusters/start.go b/internal/cli/atlas/clusters/start.go index 5f2024575b..e8c5167d18 100644 --- a/internal/cli/atlas/clusters/start.go +++ b/internal/cli/atlas/clusters/start.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type StartOpts struct { cli.GlobalOpts + cli.OutputOpts name string store store.ClusterStarter } @@ -44,7 +44,7 @@ func (opts *StartOpts) Run() error { return err } - return output.Print(config.Default(), startTmpl, r) + return opts.Print(r) } // mongocli atlas cluster(s) start [--projectId projectId] @@ -55,7 +55,10 @@ func StartBuilder() *cobra.Command { Short: startCluster, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), startTmpl), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.name = args[0] @@ -64,6 +67,7 @@ func StartBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/clusters/update.go b/internal/cli/atlas/clusters/update.go index 05098e12e7..a99001bc75 100644 --- a/internal/cli/atlas/clusters/update.go +++ b/internal/cli/atlas/clusters/update.go @@ -19,7 +19,6 @@ import ( "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/file" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/afero" @@ -29,6 +28,7 @@ import ( type UpdateOpts struct { cli.GlobalOpts + cli.OutputOpts name string tier string diskSizeGB float64 @@ -60,7 +60,7 @@ func (opts *UpdateOpts) Run() error { return err } - return output.Print(config.Default(), updateTmpl, r) + return opts.Print(r) } func (opts *UpdateOpts) cluster() (*atlas.Cluster, error) { @@ -130,7 +130,10 @@ func UpdateBuilder() *cobra.Command { if len(args) != 0 { opts.name = args[0] } - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), updateTmpl), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -143,6 +146,7 @@ func UpdateBuilder() *cobra.Command { cmd.Flags().StringVarP(&opts.filename, flag.File, flag.FileShort, "", usage.Filename) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagFilename(flag.File) diff --git a/internal/cli/atlas/datalake/create.go b/internal/cli/atlas/datalake/create.go index ae032b02ba..af37655a52 100644 --- a/internal/cli/atlas/datalake/create.go +++ b/internal/cli/atlas/datalake/create.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +26,7 @@ import ( type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts store store.DataLakeCreator name string } @@ -49,7 +49,7 @@ func (opts *CreateOpts) Run() error { return err } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } // mongocli atlas datalake(s) create name --projectId projectId @@ -61,7 +61,10 @@ func CreateBuilder() *cobra.Command { Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { opts.name = args[0] - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -69,6 +72,7 @@ func CreateBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/datalake/describe.go b/internal/cli/atlas/datalake/describe.go index 0f895aa265..e54073599f 100644 --- a/internal/cli/atlas/datalake/describe.go +++ b/internal/cli/atlas/datalake/describe.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type DescribeOpts struct { cli.GlobalOpts + cli.OutputOpts store store.DataLakeDescriber name string } @@ -46,7 +46,7 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } // mongocli atlas datalake(s) describe name --projectId projectId @@ -58,7 +58,10 @@ func DescribeBuilder() *cobra.Command { Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { opts.name = args[0] - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), describeTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -66,6 +69,7 @@ func DescribeBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/datalake/list.go b/internal/cli/atlas/datalake/list.go index f8bfb2963c..d84d2cc106 100644 --- a/internal/cli/atlas/datalake/list.go +++ b/internal/cli/atlas/datalake/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type ListOpts struct { cli.GlobalOpts + cli.OutputOpts store store.DataLakeLister } @@ -46,7 +46,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli atlas datalake(s) list --projectId projectId @@ -58,7 +58,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -66,6 +69,7 @@ func ListBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/datalake/update.go b/internal/cli/atlas/datalake/update.go index fccc3871f7..2ce16f5ce1 100644 --- a/internal/cli/atlas/datalake/update.go +++ b/internal/cli/atlas/datalake/update.go @@ -20,7 +20,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -31,6 +30,7 @@ const aws = "AWS" type UpdateOpts struct { cli.GlobalOpts + cli.OutputOpts store store.DataLakeUpdater name string region string @@ -76,7 +76,7 @@ func (opts *UpdateOpts) Run() error { return err } - return output.Print(config.Default(), updateTemplate, r) + return opts.Print(r) } // mongocli atlas datalake(s) update name --projectId projectId [--role role] [--testBucket bucket] [--region region] @@ -93,7 +93,10 @@ func UpdateBuilder() *cobra.Command { return fmt.Errorf("nothing to update") } - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), updateTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -105,6 +108,7 @@ func UpdateBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.testBucket, flag.TestBucket, "", usage.DataLakeTestBucket) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/dbusers/certs/create.go b/internal/cli/atlas/dbusers/certs/create.go index 3eb6273a08..e316a289fb 100644 --- a/internal/cli/atlas/dbusers/certs/create.go +++ b/internal/cli/atlas/dbusers/certs/create.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts store store.DBUserCertificateCreator username string monthsUntilExpiry int @@ -43,9 +43,11 @@ func (opts *CreateOpts) Run() error { return err } - return output.Print(config.Default(), "", r) + return opts.Print(r) } +var createTemplate = "Certificate created '{{.ID}}'\n" + // mongocli atlas dbuser(s) certs create --username [--monthsUntilExpiration number] [--projectId projectId] func CreateBuilder() *cobra.Command { opts := &CreateOpts{} @@ -54,7 +56,10 @@ func CreateBuilder() *cobra.Command { Short: createDBUserCerts, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -63,7 +68,9 @@ func CreateBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.monthsUntilExpiry, flag.MonthsUntilExpiration, 3, usage.MonthsUntilExpiration) cmd.Flags().StringVar(&opts.username, flag.Username, "", usage.DatabaseUser) + cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.Username) diff --git a/internal/cli/atlas/dbusers/certs/list.go b/internal/cli/atlas/dbusers/certs/list.go index 3a5763dc78..3b5c4efdd8 100644 --- a/internal/cli/atlas/dbusers/certs/list.go +++ b/internal/cli/atlas/dbusers/certs/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts store store.DBUserCertificateLister username string @@ -43,9 +43,13 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), "", r) + return opts.Print(r) } +var listTemplate = `ID USERNAME SUBJECT CREATED AT{{range .}} +{{.ID}} {{.Username}} {{.Subject}} {{.CreatedAt}}{{end}} +` + // mongocli atlas dbuser(s) certs list|ls [--projectId projectId] func ListBuilder() *cobra.Command { opts := &ListOpts{} @@ -57,7 +61,10 @@ func ListBuilder() *cobra.Command { PreRunE: func(cmd *cobra.Command, args []string) error { opts.username = args[0] - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -65,6 +72,7 @@ func ListBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/dbusers/create.go b/internal/cli/atlas/dbusers/create.go index d47cd91e01..8bee5ab723 100644 --- a/internal/cli/atlas/dbusers/create.go +++ b/internal/cli/atlas/dbusers/create.go @@ -22,7 +22,6 @@ import ( "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/convert" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/mongodb/mongocli/internal/validate" @@ -32,6 +31,7 @@ import ( type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts username string password string x509Type string @@ -88,7 +88,7 @@ func (opts *CreateOpts) Run() error { return err } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } func (opts *CreateOpts) newDatabaseUser() *atlas.DatabaseUser { @@ -172,12 +172,13 @@ func CreateBuilder() *cobra.Command { Args: cobra.OnlyValidArgs, ValidArgs: []string{"atlasAdmin", "readWriteAnyDatabase", "readAnyDatabase", "clusterMonitor", "backup", "dbAdminAnyDatabase", "enableSharding"}, PreRunE: func(cmd *cobra.Command, args []string) error { - if err := opts.PreRunE(opts.initStore); err != nil { - return err - } opts.roles = append(opts.roles, args...) - return opts.validate() + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + opts.validate, + ) }, RunE: func(cmd *cobra.Command, args []string) error { if err := opts.Prompt(); err != nil { @@ -196,6 +197,7 @@ func CreateBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.ldapType, flag.LDAPType, none, usage.LDAPType) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.Username) diff --git a/internal/cli/atlas/dbusers/describe.go b/internal/cli/atlas/dbusers/describe.go index 8f4fca09f4..6d10792668 100644 --- a/internal/cli/atlas/dbusers/describe.go +++ b/internal/cli/atlas/dbusers/describe.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/convert" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/mongodb/mongocli/internal/validate" @@ -31,6 +30,7 @@ const describeTemplate = `USERNAME DATABASE type DescribeOpts struct { cli.GlobalOpts + cli.OutputOpts store store.DatabaseUserDescriber authDB string username string @@ -48,7 +48,7 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } // mongocli atlas dbuser(s) describe --projectId projectId --authDB authDB @@ -66,16 +66,20 @@ func DescribeBuilder() *cobra.Command { return err } - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), describeTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() }, } - cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) - cmd.Flags().StringVar(&opts.authDB, flag.AuthDB, convert.AdminDB, usage.AuthDB) + cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + return cmd } diff --git a/internal/cli/atlas/dbusers/list.go b/internal/cli/atlas/dbusers/list.go index e3f85ac0c4..3af2851d4d 100644 --- a/internal/cli/atlas/dbusers/list.go +++ b/internal/cli/atlas/dbusers/list.go @@ -17,7 +17,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -29,6 +28,7 @@ const listTemplate = `USERNAME DATABASE{{range .}} type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts store store.DatabaseUserLister } @@ -46,7 +46,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli atlas dbuser(s) list --projectId projectId [--page N] [--limit N] @@ -58,7 +58,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -67,7 +70,9 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.PageNum, flag.Page, 0, usage.Page) cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) + cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/dbusers/update.go b/internal/cli/atlas/dbusers/update.go index 040b5c5b56..8b76ac35d6 100644 --- a/internal/cli/atlas/dbusers/update.go +++ b/internal/cli/atlas/dbusers/update.go @@ -19,7 +19,6 @@ import ( "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/convert" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -29,6 +28,7 @@ import ( const updateTemplate = "Successfully updated database user '{{.Username}}'.\n" type UpdateOpts struct { + cli.OutputOpts cli.GlobalOpts username string password string @@ -51,7 +51,7 @@ func (opts *UpdateOpts) Run() error { return err } - return output.Print(config.Default(), updateTemplate, r) + return opts.Print(r) } func (opts *UpdateOpts) update(out *atlas.DatabaseUser) { @@ -75,7 +75,10 @@ func UpdateBuilder() *cobra.Command { $ mongocli atlas dbuser update --role readWriteAnyDatabase --projectId `, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), updateTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.username = args[0] @@ -88,6 +91,7 @@ func UpdateBuilder() *cobra.Command { cmd.Flags().StringSliceVar(&opts.roles, flag.Role, []string{}, usage.Roles) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/metrics/databases_list.go b/internal/cli/atlas/metrics/databases_list.go index 01e31c0810..4accf7729b 100644 --- a/internal/cli/atlas/metrics/databases_list.go +++ b/internal/cli/atlas/metrics/databases_list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type DatabasesListsOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts host string port int @@ -38,6 +38,10 @@ func (opts *DatabasesListsOpts) initStore() error { return err } +var databasesListTemplate = `{{range .Results}} +{{.DatabaseName}}{{end}} +` + func (opts *DatabasesListsOpts) Run() error { listOpts := opts.NewListOptions() r, err := opts.store.ProcessDatabases(opts.ConfigProjectID(), opts.host, opts.port, listOpts) @@ -45,7 +49,7 @@ func (opts *DatabasesListsOpts) Run() error { return err } - return output.Print(config.Default(), "", r) + return opts.Print(r) } // mongocli atlas metric(s) process(es) disks lists @@ -57,7 +61,10 @@ func DatabasesListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), databasesListTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { var err error @@ -72,6 +79,7 @@ func DatabasesListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.PageNum, flag.Page, 0, usage.Page) cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/metrics/disks_describe.go b/internal/cli/atlas/metrics/disks_describe.go index d26e3bdd61..2211f06076 100644 --- a/internal/cli/atlas/metrics/disks_describe.go +++ b/internal/cli/atlas/metrics/disks_describe.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type DisksDescribeOpts struct { cli.GlobalOpts + cli.OutputOpts cli.MetricsOpts host string port int @@ -46,9 +46,14 @@ func (opts *DisksDescribeOpts) Run() error { return err } - return output.Print(config.Default(), "", r) + return opts.Print(r) } +var diskMetricTemplate = `NAME UNITS TIMESTAMP VALUE{{range .ProcessMeasurements.Measurements}} {{if .DataPoints}} +{{- $name := .Name }}{{- $unit := .Units }}{{- range .DataPoints}} +{{ $name }} {{ $unit }} {{.Timestamp}} {{if .Value }} {{ .Value }}{{else}} N/A {{end}}{{end}}{{end}}{{end}} +` + // mcli atlas metric(s) disk(s) describe --granularity g --period p --start start --end end [--type type] [--projectId projectId] func DisksDescribeBuilder() *cobra.Command { const argsN = 2 @@ -58,7 +63,10 @@ func DisksDescribeBuilder() *cobra.Command { Short: describeDisks, Args: cobra.ExactArgs(argsN), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), diskMetricTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { var err error @@ -81,6 +89,7 @@ func DisksDescribeBuilder() *cobra.Command { cmd.Flags().StringSliceVar(&opts.MeasurementType, flag.Type, nil, usage.MeasurementType) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.Granularity) diff --git a/internal/cli/atlas/metrics/disks_list.go b/internal/cli/atlas/metrics/disks_list.go index 8624908dd8..a1127bb3ef 100644 --- a/internal/cli/atlas/metrics/disks_list.go +++ b/internal/cli/atlas/metrics/disks_list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type DisksListsOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts host string port int @@ -45,9 +45,13 @@ func (opts *DisksListsOpts) Run() error { return err } - return output.Print(config.Default(), "", r) + return opts.Print(r) } +var listTemplate = `{{range .Results}} +{{.PartitionName}}{{end}} +` + // mongocli atlas metric(s) process(es) disks lists func DisksListBuilder() *cobra.Command { opts := &DisksListsOpts{} @@ -57,7 +61,10 @@ func DisksListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { var err error @@ -73,6 +80,7 @@ func DisksListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.PageNum, flag.Page, 0, usage.Page) cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/metrics/processes.go b/internal/cli/atlas/metrics/processes.go index 9c26695245..e396a4e845 100644 --- a/internal/cli/atlas/metrics/processes.go +++ b/internal/cli/atlas/metrics/processes.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type ProcessOpts struct { cli.GlobalOpts + cli.OutputOpts cli.MetricsOpts host string port int @@ -45,9 +45,14 @@ func (opts *ProcessOpts) Run() error { return err } - return output.Print(config.Default(), "", r) + return opts.Print(r) } +var metricTemplate = `NAME UNITS TIMESTAMP VALUE{{range .Measurements}} {{if .DataPoints}} +{{- $name := .Name }}{{- $unit := .Units }}{{- range .DataPoints}} +{{ $name }} {{ $unit }} {{.Timestamp}} {{if .Value }} {{ .Value }}{{else}} N/A {{end}}{{end}}{{end}}{{end}} +` + // mongocli atlas metric(s) process(es) [--granularity granularity] [--period period] [--start start] [--end end] [--type type][--projectId projectId] func ProcessBuilder() *cobra.Command { opts := &ProcessOpts{} @@ -57,7 +62,10 @@ func ProcessBuilder() *cobra.Command { Aliases: []string{"process"}, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), metricTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { var err error @@ -79,6 +87,7 @@ func ProcessBuilder() *cobra.Command { cmd.Flags().StringSliceVar(&opts.MeasurementType, flag.Type, nil, usage.MeasurementType) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.Granularity) diff --git a/internal/cli/atlas/networking/containers/list.go b/internal/cli/atlas/networking/containers/list.go index a08fc05949..ad78c489d1 100644 --- a/internal/cli/atlas/networking/containers/list.go +++ b/internal/cli/atlas/networking/containers/list.go @@ -17,7 +17,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts provider string store store.ContainersLister @@ -54,7 +54,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } func (opts *ListOpts) newContainerListOptions() *atlas.ContainersListOptions { @@ -64,7 +64,7 @@ func (opts *ListOpts) newContainerListOptions() *atlas.ContainersListOptions { } } -// mongocli atlas networking container(s) list [--projectId projectId] [--orgId orgId] [--page N] [--limit N] [--minDate minDate] [--maxDate maxDate] +// mongocli atlas networking container(s) list [--projectId projectId] [--page N] [--limit N] [--minDate minDate] [--maxDate maxDate] func ListBuilder() *cobra.Command { opts := &ListOpts{} cmd := &cobra.Command{ @@ -73,7 +73,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.initStore() + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -84,6 +87,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/networking/peering/create/aws.go b/internal/cli/atlas/networking/peering/create/aws.go index 919ebc6fe4..26b47830e5 100644 --- a/internal/cli/atlas/networking/peering/create/aws.go +++ b/internal/cli/atlas/networking/peering/create/aws.go @@ -20,7 +20,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -29,6 +28,7 @@ import ( type AWSOpts struct { cli.GlobalOpts + cli.OutputOpts region string routeTableCidrBlock string accountID string @@ -61,7 +61,7 @@ func (opts *AWSOpts) Run() error { if err != nil { return err } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } func (opts *AWSOpts) containerExists() (*atlas.Container, error) { @@ -121,7 +121,10 @@ func AwsBuilder() *cobra.Command { Short: createAWSConnection, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -135,6 +138,7 @@ func AwsBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.atlasCIDRBlock, flag.AtlasCIDRBlock, "", usage.AtlasCIDRBlock) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.AccountID) _ = cmd.MarkFlagRequired(flag.RouteTableCidrBlock) diff --git a/internal/cli/atlas/networking/peering/create/azure.go b/internal/cli/atlas/networking/peering/create/azure.go index 95614d6a74..41de2216b8 100644 --- a/internal/cli/atlas/networking/peering/create/azure.go +++ b/internal/cli/atlas/networking/peering/create/azure.go @@ -20,7 +20,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -29,6 +28,7 @@ import ( type AzureOpts struct { cli.GlobalOpts + cli.OutputOpts region string atlasCIDRBlock string directoryID string @@ -66,7 +66,7 @@ func (opts *AzureOpts) Run() error { if err != nil { return err } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } func (opts *AzureOpts) containerExists() (*atlas.Container, error) { @@ -121,7 +121,10 @@ func AzureBuilder() *cobra.Command { Short: createAzureConnection, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -136,6 +139,7 @@ func AzureBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.atlasCIDRBlock, flag.AtlasCIDRBlock, "", usage.AtlasCIDRBlock) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.DirectoryID) _ = cmd.MarkFlagRequired(flag.SubscriptionID) diff --git a/internal/cli/atlas/networking/peering/create/gcp.go b/internal/cli/atlas/networking/peering/create/gcp.go index d918d71e92..9dda5e833d 100644 --- a/internal/cli/atlas/networking/peering/create/gcp.go +++ b/internal/cli/atlas/networking/peering/create/gcp.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +26,7 @@ import ( type GCPOpts struct { cli.GlobalOpts + cli.OutputOpts atlasCIDRBlock string gcpProjectID string network string @@ -39,8 +39,6 @@ func (opts *GCPOpts) initStore() error { return err } -var gcpTemplate = "Network peering connection '{{.ID}}' created.\n" - func (opts *GCPOpts) Run() error { container, err := opts.containerExists() if err != nil { @@ -58,7 +56,7 @@ func (opts *GCPOpts) Run() error { if err != nil { return err } - return output.Print(config.Default(), gcpTemplate, r) + return opts.Print(r) } func (opts *GCPOpts) containerExists() (*atlas.Container, error) { @@ -104,7 +102,10 @@ func GCPBuilder() *cobra.Command { Short: createGCPConnection, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -116,6 +117,7 @@ func GCPBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.atlasCIDRBlock, flag.AtlasCIDRBlock, "", usage.AtlasCIDRBlock) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.AtlasCIDRBlock) diff --git a/internal/cli/atlas/networking/peering/list.go b/internal/cli/atlas/networking/peering/list.go index a9991a5786..8f5f765bc8 100644 --- a/internal/cli/atlas/networking/peering/list.go +++ b/internal/cli/atlas/networking/peering/list.go @@ -17,7 +17,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts provider string store store.PeeringConnectionLister @@ -48,7 +48,7 @@ func (opts *ListOpts) Run() error { if err != nil { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } func (opts *ListOpts) newContainerListOptions() *atlas.ContainersListOptions { @@ -67,7 +67,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.initStore() + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -79,6 +82,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/onlinearchive/create.go b/internal/cli/atlas/onlinearchive/create.go index 895fc2be3a..7d57b330dc 100644 --- a/internal/cli/atlas/onlinearchive/create.go +++ b/internal/cli/atlas/onlinearchive/create.go @@ -21,7 +21,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -30,6 +29,7 @@ import ( type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts clusterName string dbName string collection string @@ -57,7 +57,7 @@ func (opts *CreateOpts) Run() error { return err } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } func (opts *CreateOpts) newOnlineArchive() (*atlas.OnlineArchive, error) { @@ -110,7 +110,10 @@ func CreateBuilder() *cobra.Command { if len(opts.partitions) > maxPartitions { return fmt.Errorf("can only define up to 2 partition fields, got: %d", len(opts.partitions)) } - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -125,6 +128,7 @@ func CreateBuilder() *cobra.Command { cmd.Flags().StringSliceVar(&opts.partitions, flag.Partition, nil, usage.PartitionFields) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.ClusterName) _ = cmd.MarkFlagRequired(flag.Database) diff --git a/internal/cli/atlas/onlinearchive/describe.go b/internal/cli/atlas/onlinearchive/describe.go index 187c6993f2..26f777daf8 100644 --- a/internal/cli/atlas/onlinearchive/describe.go +++ b/internal/cli/atlas/onlinearchive/describe.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/mongodb/mongocli/internal/validate" @@ -27,6 +26,7 @@ import ( type DescribeOpts struct { cli.GlobalOpts + cli.OutputOpts clusterName string archiveID string store store.OnlineArchiveDescriber @@ -48,7 +48,7 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } // mongocli atlas cluster(s) describe [--clusterName name][--projectId projectId] @@ -59,7 +59,10 @@ func DescribeBuilder() *cobra.Command { Short: describeOnlineArchive, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), describeTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { if err := validate.ObjectID(args[0]); err != nil { @@ -74,6 +77,7 @@ func DescribeBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.clusterName, flag.ClusterName, "", usage.ClusterName) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.ClusterName) diff --git a/internal/cli/atlas/onlinearchive/list.go b/internal/cli/atlas/onlinearchive/list.go index 633e0cd203..6fa2f30ba5 100644 --- a/internal/cli/atlas/onlinearchive/list.go +++ b/internal/cli/atlas/onlinearchive/list.go @@ -17,7 +17,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -25,6 +24,7 @@ import ( type ListOpts struct { cli.GlobalOpts + cli.OutputOpts clusterName string store store.OnlineArchiveLister } @@ -45,7 +45,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli atlas onlineArchive(s) list [--projectId projectId] [--clusterName name] @@ -57,7 +57,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.initStore() + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -67,6 +70,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.clusterName, flag.ClusterName, "", usage.ClusterName) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.ClusterName) diff --git a/internal/cli/atlas/onlinearchive/pause.go b/internal/cli/atlas/onlinearchive/pause.go index 7be39955b0..58eb7a3633 100644 --- a/internal/cli/atlas/onlinearchive/pause.go +++ b/internal/cli/atlas/onlinearchive/pause.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +26,7 @@ import ( type PauseOpts struct { cli.GlobalOpts + cli.OutputOpts id string clusterName string store store.OnlineArchiveUpdater @@ -51,7 +51,7 @@ func (opts *PauseOpts) Run() error { return err } - return output.Print(config.Default(), pauseTemplate, r) + return opts.Print(r) } // mongocli atlas cluster(s) onlineArchive(s) pause [--clusterName name][--projectId projectId] @@ -62,7 +62,10 @@ func PauseBuilder() *cobra.Command { Short: pauseOnlineArchive, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), pauseTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.id = args[0] @@ -73,6 +76,7 @@ func PauseBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.clusterName, flag.ClusterName, "", usage.ClusterName) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.ClusterName) diff --git a/internal/cli/atlas/onlinearchive/start.go b/internal/cli/atlas/onlinearchive/start.go index 8e58dcafec..afcf4da094 100644 --- a/internal/cli/atlas/onlinearchive/start.go +++ b/internal/cli/atlas/onlinearchive/start.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +26,7 @@ import ( type StartOpts struct { cli.GlobalOpts + cli.OutputOpts id string clusterName string store store.OnlineArchiveUpdater @@ -51,7 +51,7 @@ func (opts *StartOpts) Run() error { return err } - return output.Print(config.Default(), startTemplate, r) + return opts.Print(r) } // mongocli atlas cluster(s) onlineArchive(s) start [--clusterName name][--projectId projectId] @@ -62,7 +62,10 @@ func StartBuilder() *cobra.Command { Short: startOnlineArchive, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), startTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.id = args[0] @@ -73,6 +76,7 @@ func StartBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.clusterName, flag.ClusterName, "", usage.ClusterName) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.ClusterName) diff --git a/internal/cli/atlas/onlinearchive/update.go b/internal/cli/atlas/onlinearchive/update.go index 1062bd8be8..25cf475304 100644 --- a/internal/cli/atlas/onlinearchive/update.go +++ b/internal/cli/atlas/onlinearchive/update.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +26,7 @@ import ( type UpdateOpts struct { cli.GlobalOpts + cli.OutputOpts id string clusterName string archiveAfter float64 @@ -48,7 +48,7 @@ func (opts *UpdateOpts) Run() error { return err } - return output.Print(config.Default(), updateTemplate, r) + return opts.Print(r) } func (opts *UpdateOpts) newOnlineArchive() *atlas.OnlineArchive { @@ -69,7 +69,10 @@ func UpdateBuilder() *cobra.Command { Short: updateOnlineArchive, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), updateTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.id = args[0] @@ -81,6 +84,7 @@ func UpdateBuilder() *cobra.Command { cmd.Flags().Float64Var(&opts.archiveAfter, flag.ArchiveAfter, 0, usage.ArchiveAfter) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.ClusterName) _ = cmd.MarkFlagRequired(flag.ArchiveAfter) diff --git a/internal/cli/atlas/privateendpoints/create.go b/internal/cli/atlas/privateendpoints/create.go index 264230c382..9b5f49ef75 100644 --- a/internal/cli/atlas/privateendpoints/create.go +++ b/internal/cli/atlas/privateendpoints/create.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +26,7 @@ import ( type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts store store.PrivateEndpointCreator region string provider string @@ -48,7 +48,7 @@ func (opts *CreateOpts) Run() error { return err } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } func (opts *CreateOpts) newPrivateEndpointConnection() *mongodbatlas.PrivateEndpointConnection { @@ -67,7 +67,10 @@ func CreateBuilder() *cobra.Command { Short: createPrivateEndpoint, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -77,6 +80,7 @@ func CreateBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.region, flag.Region, "", usage.PrivateEndpointRegion) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.Region) diff --git a/internal/cli/atlas/privateendpoints/describe.go b/internal/cli/atlas/privateendpoints/describe.go index 3e07b79c3a..eebbe84e08 100644 --- a/internal/cli/atlas/privateendpoints/describe.go +++ b/internal/cli/atlas/privateendpoints/describe.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -30,6 +29,7 @@ var describeTemplate = `ID ENDPOINT SERVICE STATUS ERROR type DescribeOpts struct { cli.GlobalOpts + cli.OutputOpts id string store store.PrivateEndpointDescriber } @@ -47,7 +47,7 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } // mongocli atlas privateEndpoint(s)|privateendpoint(s) describe|get [--projectId projectId] @@ -60,7 +60,10 @@ func DescribeBuilder() *cobra.Command { Short: describePrivateEndpoints, PreRunE: func(cmd *cobra.Command, args []string) error { opts.id = args[0] - return opts.PreRunE(opts.init) + return opts.PreRunE( + opts.init, + opts.InitOutput(cmd.OutOrStdout(), describeTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -68,6 +71,7 @@ func DescribeBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/privateendpoints/interfaces/create.go b/internal/cli/atlas/privateendpoints/interfaces/create.go index de0def4007..d07b257ea1 100644 --- a/internal/cli/atlas/privateendpoints/interfaces/create.go +++ b/internal/cli/atlas/privateendpoints/interfaces/create.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts store store.InterfaceEndpointCreator privateEndpointID string interfaceEndpointID string @@ -45,7 +45,7 @@ func (opts *CreateOpts) Run() error { return err } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } // mongocli atlas privateEndpoint(s)|privateendpoint(s) interface(s) create [--privateEndpointId privateEndpointID][--projectId projectId] @@ -57,7 +57,10 @@ func CreateBuilder() *cobra.Command { Short: createInterfaceEndpoint, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.interfaceEndpointID = args[0] @@ -67,6 +70,7 @@ func CreateBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.privateEndpointID, flag.PrivateEndpointID, "", usage.PrivateEndpointID) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.PrivateEndpointID) diff --git a/internal/cli/atlas/privateendpoints/interfaces/describe.go b/internal/cli/atlas/privateendpoints/interfaces/describe.go index 43c48d5114..58afabb2e1 100644 --- a/internal/cli/atlas/privateendpoints/interfaces/describe.go +++ b/internal/cli/atlas/privateendpoints/interfaces/describe.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type DescribeOpts struct { cli.GlobalOpts + cli.OutputOpts id string privateEndpointID string store store.InterfaceEndpointDescriber @@ -48,7 +48,7 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } // mongocli atlas privateEndpoint(s) interface(s) describe [--privateEndpointId privateEndpointID][--projectId projectId] @@ -61,7 +61,10 @@ func DescribeBuilder() *cobra.Command { Short: describeInterfaceEndpoint, PreRunE: func(cmd *cobra.Command, args []string) error { opts.id = args[0] - return opts.PreRunE(opts.init) + return opts.PreRunE( + opts.init, + opts.InitOutput(cmd.OutOrStdout(), describeTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -70,6 +73,7 @@ func DescribeBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.privateEndpointID, flag.PrivateEndpointID, "", usage.PrivateEndpointID) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.PrivateEndpointID) diff --git a/internal/cli/atlas/privateendpoints/list.go b/internal/cli/atlas/privateendpoints/list.go index 778588f34d..ca0782d9bf 100644 --- a/internal/cli/atlas/privateendpoints/list.go +++ b/internal/cli/atlas/privateendpoints/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -30,6 +29,7 @@ var listTemplate = `ID ENDPOINT SERVICE STATUS ERROR{{range .}} type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts store store.PrivateEndpointLister } @@ -47,7 +47,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli atlas privateEndpoint(s)|privateendpoint(s) list|ls [--projectId projectId] @@ -59,7 +59,10 @@ func ListBuilder() *cobra.Command { Short: listPrivateEndpoints, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.init) + return opts.PreRunE( + opts.init, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -70,6 +73,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/processes/processes_list.go b/internal/cli/atlas/processes/processes_list.go index 5263abca1d..c57a35e490 100644 --- a/internal/cli/atlas/processes/processes_list.go +++ b/internal/cli/atlas/processes/processes_list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -31,6 +30,7 @@ const listTemplate = `ID REPLICA SET NAME SHARD NAME VERSION{{range .}} type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts clusterID string store store.ProcessLister @@ -49,7 +49,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } func (opts *ListOpts) newProcessesListOptions() *atlas.ProcessesListOptions { @@ -68,7 +68,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -80,6 +83,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/search/create.go b/internal/cli/atlas/search/create.go index fb7ec647b6..4ec2d0b3ab 100644 --- a/internal/cli/atlas/search/create.go +++ b/internal/cli/atlas/search/create.go @@ -20,7 +20,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -28,6 +27,7 @@ import ( type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts IndexOpts clusterName string store store.SearchIndexCreator @@ -51,7 +51,7 @@ func (opts *CreateOpts) Run() error { return err } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } // CreateBuilder @@ -86,7 +86,10 @@ func CreateBuilder() *cobra.Command { if opts.dynamic && len(opts.fields) > 0 { return errors.New("you can't specify fields and dynamic at the same time") } - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.name = args[0] @@ -103,6 +106,7 @@ func CreateBuilder() *cobra.Command { cmd.Flags().StringSliceVar(&opts.fields, flag.Field, nil, usage.SearchFields) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.ClusterName) _ = cmd.MarkFlagRequired(flag.Database) diff --git a/internal/cli/atlas/search/describe.go b/internal/cli/atlas/search/describe.go index eb7cf6102a..c6b4d32852 100644 --- a/internal/cli/atlas/search/describe.go +++ b/internal/cli/atlas/search/describe.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/mongodb/mongocli/internal/validate" @@ -27,6 +26,7 @@ import ( type DescribeOpts struct { cli.GlobalOpts + cli.OutputOpts clusterName string indexID string store store.SearchIndexDescriber @@ -48,7 +48,7 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } // mongocli atlas cluster(s) search indexes describe [--clusterName name][--projectId projectId] @@ -59,7 +59,10 @@ func DescribeBuilder() *cobra.Command { Short: describeSearchIndexes, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), describeTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { if err := validate.ObjectID(args[0]); err != nil { @@ -74,6 +77,7 @@ func DescribeBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.clusterName, flag.ClusterName, "", usage.ClusterName) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.ClusterName) diff --git a/internal/cli/atlas/search/list.go b/internal/cli/atlas/search/list.go index 346aa42f0d..dc0f05f3ed 100644 --- a/internal/cli/atlas/search/list.go +++ b/internal/cli/atlas/search/list.go @@ -17,7 +17,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -25,6 +24,7 @@ import ( type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts clusterName string dbName string @@ -48,7 +48,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli atlas clusters search(s) list [--projectId projectId] [--clusterName name][--db database][--collection collName] @@ -60,7 +60,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.initStore() + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -73,7 +76,9 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.PageNum, flag.Page, 0, usage.Page) cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) + cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.ClusterName) _ = cmd.MarkFlagRequired(flag.Database) diff --git a/internal/cli/atlas/search/update.go b/internal/cli/atlas/search/update.go index 3cf8f19103..a612019614 100644 --- a/internal/cli/atlas/search/update.go +++ b/internal/cli/atlas/search/update.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type UpdateOpts struct { cli.GlobalOpts + cli.OutputOpts IndexOpts id string clusterName string @@ -50,7 +50,7 @@ func (opts *UpdateOpts) Run() error { return err } - return output.Print(config.Default(), updateTemplate, r) + return opts.Print(r) } // UpdateBuilder @@ -80,7 +80,10 @@ func UpdateBuilder() *cobra.Command { Short: updateSearchIndex, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), updateTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.id = args[0] @@ -98,6 +101,7 @@ func UpdateBuilder() *cobra.Command { cmd.Flags().StringSliceVar(&opts.fields, flag.Field, nil, usage.SearchFields) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.ClusterName) _ = cmd.MarkFlagRequired(flag.IndexName) diff --git a/internal/cli/atlas/security/customercerts/create.go b/internal/cli/atlas/security/customercerts/create.go index bf413918af..79a3f88ac0 100644 --- a/internal/cli/atlas/security/customercerts/create.go +++ b/internal/cli/atlas/security/customercerts/create.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/afero" @@ -29,6 +28,7 @@ const createTemplate = "Certificate successfully created.\n" type SaveOpts struct { cli.GlobalOpts + cli.OutputOpts store store.X509CertificateConfSaver casPath string fs afero.Fs @@ -53,7 +53,7 @@ func (opts *SaveOpts) Run() error { return err } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } // mongocli atlas security customercerts create --projectId projectId --casFile /path/to/certificates.pem @@ -66,7 +66,10 @@ func CreateBuilder() *cobra.Command { Short: saveCertConfig, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -76,6 +79,7 @@ func CreateBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.casPath, flag.CASFilePath, "", usage.CASFilePath) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.CASFilePath) diff --git a/internal/cli/atlas/security/customercerts/describe.go b/internal/cli/atlas/security/customercerts/describe.go index a3e1d81d13..d410c04dfc 100644 --- a/internal/cli/atlas/security/customercerts/describe.go +++ b/internal/cli/atlas/security/customercerts/describe.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -28,6 +27,7 @@ const describeTemplate = "{{.Cas}}\n" type DescribeOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts store store.X509CertificateConfDescriber } @@ -44,7 +44,7 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } // mongocli atlas security customerCerts describe --projectId projectId @@ -55,7 +55,10 @@ func DescribeBuilder() *cobra.Command { Short: describeCertConfig, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), describeTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -63,6 +66,7 @@ func DescribeBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/whitelist/create.go b/internal/cli/atlas/whitelist/create.go index 893bedbe4e..42e9f76d17 100644 --- a/internal/cli/atlas/whitelist/create.go +++ b/internal/cli/atlas/whitelist/create.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -34,6 +33,7 @@ const ( type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts entry string entryType string comment string @@ -55,7 +55,7 @@ func (opts *CreateOpts) Run() error { return err } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } func (opts *CreateOpts) newWhitelist() *atlas.ProjectIPWhitelist { @@ -83,7 +83,10 @@ func CreateBuilder() *cobra.Command { Short: createWhitelist, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.entry = args[0] @@ -97,6 +100,7 @@ func CreateBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.deleteAfter, flag.DeleteAfter, "", usage.WhiteListsDeleteAfter) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/whitelist/describe.go b/internal/cli/atlas/whitelist/describe.go index c1ba5da441..587a52a733 100644 --- a/internal/cli/atlas/whitelist/describe.go +++ b/internal/cli/atlas/whitelist/describe.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -30,6 +29,7 @@ const describeTemplate = `CIDR BLOCK SECURITY GROUP type DescribeOpts struct { cli.GlobalOpts + cli.OutputOpts name string store store.ProjectIPWhitelistDescriber } @@ -46,7 +46,7 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } // mongocli atlas whitelist(s) describe --projectId projectId @@ -57,7 +57,10 @@ func DescribeBuilder() *cobra.Command { Short: describeWhitelist, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), describeTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.name = args[0] @@ -66,6 +69,7 @@ func DescribeBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/atlas/whitelist/list.go b/internal/cli/atlas/whitelist/list.go index b873f28174..deab9b253e 100644 --- a/internal/cli/atlas/whitelist/list.go +++ b/internal/cli/atlas/whitelist/list.go @@ -17,7 +17,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -29,6 +28,7 @@ const listTemplate = `CIDR BLOCK SECURITY GROUP{{range .}} type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts store store.ProjectIPWhitelistLister } @@ -47,7 +47,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli atlas whitelist(s) list --projectId projectId [--page N] [--limit N] @@ -59,7 +59,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -70,6 +73,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/events/list.go b/internal/cli/events/list.go index 416ee8685d..4872dcc22a 100644 --- a/internal/cli/events/list.go +++ b/internal/cli/events/list.go @@ -19,7 +19,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -28,6 +27,7 @@ import ( type ListOpts struct { cli.ListOpts + cli.OutputOpts orgID string projectID string eventType []string @@ -61,7 +61,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } func (opts *ListOpts) newEventListOptions() *atlas.EventListOptions { @@ -79,6 +79,7 @@ func (opts *ListOpts) newEventListOptions() *atlas.EventListOptions { // mongocli atlas event(s) list [--projectId projectId] [--orgId orgId] [--page N] [--limit N] [--minDate minDate] [--maxDate maxDate] func ListBuilder() *cobra.Command { opts := &ListOpts{} + opts.Template = listTemplate cmd := &cobra.Command{ Use: "list", Short: listEvents, @@ -91,6 +92,7 @@ func ListBuilder() *cobra.Command { if opts.orgID == "" && opts.projectID == "" { return fmt.Errorf("--%s or --%s must be set", flag.ProjectID, flag.OrgID) } + opts.OutWriter = cmd.OutOrStdout() return opts.initStore() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -107,6 +109,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.projectID, flag.ProjectID, "", usage.ProjectID) cmd.Flags().StringVar(&opts.orgID, flag.OrgID, "", usage.OrgID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/iam/globalapikeys/create.go b/internal/cli/iam/globalapikeys/create.go index 5279e86986..fa7c4c55e2 100644 --- a/internal/cli/iam/globalapikeys/create.go +++ b/internal/cli/iam/globalapikeys/create.go @@ -15,9 +15,9 @@ package globalapikeys import ( + "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -30,6 +30,7 @@ Private API Key {{.PrivateKey}} ` type CreateOpts struct { + cli.OutputOpts desc string roles []string store store.GlobalAPIKeyCreator @@ -49,22 +50,24 @@ func (opts *CreateOpts) newAPIKeyInput() *atlas.APIKeyInput { } func (opts *CreateOpts) Run() error { - p, err := opts.store.CreateGlobalAPIKey(opts.newAPIKeyInput()) + r, err := opts.store.CreateGlobalAPIKey(opts.newAPIKeyInput()) if err != nil { return err } - return output.Print(config.Default(), createTemplate, p) + return opts.Print(r) } // mongocli iam globalApiKey(s) create [--role role][--desc description] func CreateBuilder() *cobra.Command { opts := new(CreateOpts) + opts.Template = createTemplate cmd := &cobra.Command{ Use: "create", Short: createAPIKey, PreRunE: func(cmd *cobra.Command, args []string) error { + opts.OutWriter = cmd.OutOrStdout() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -74,6 +77,7 @@ func CreateBuilder() *cobra.Command { cmd.Flags().StringSliceVar(&opts.roles, flag.Role, []string{}, usage.APIKeyRoles) cmd.Flags().StringVar(&opts.desc, flag.Description, "", usage.APIKeyDescription) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.Description) _ = cmd.MarkFlagRequired(flag.Role) diff --git a/internal/cli/iam/globalapikeys/describe.go b/internal/cli/iam/globalapikeys/describe.go index 484b098add..22c97973d9 100644 --- a/internal/cli/iam/globalapikeys/describe.go +++ b/internal/cli/iam/globalapikeys/describe.go @@ -14,13 +14,16 @@ package globalapikeys import ( + "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" - "github.com/mongodb/mongocli/internal/output" + "github.com/mongodb/mongocli/internal/flag" "github.com/mongodb/mongocli/internal/store" + "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" ) type DescribeOpts struct { + cli.OutputOpts id string store store.GlobalAPIKeyDescriber } @@ -41,18 +44,20 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } // mongocli iam globalApiKey(s) describe func DescribeBuilder() *cobra.Command { opts := new(DescribeOpts) + opts.Template = describeTemplate cmd := &cobra.Command{ Use: "describe ", Aliases: []string{"show"}, Args: cobra.ExactArgs(1), Short: describeAPIKey, PreRunE: func(cmd *cobra.Command, args []string) error { + opts.OutWriter = cmd.OutOrStdout() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -61,5 +66,7 @@ func DescribeBuilder() *cobra.Command { }, } + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + return cmd } diff --git a/internal/cli/iam/globalapikeys/list.go b/internal/cli/iam/globalapikeys/list.go index b88ff6a0b4..b154a2a0d7 100644 --- a/internal/cli/iam/globalapikeys/list.go +++ b/internal/cli/iam/globalapikeys/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -29,6 +28,7 @@ const listTemplate = `ID DESCRIPTION PUBLIC KEY PRIVATE KEY{{range .}} ` type ListOpts struct { + cli.OutputOpts cli.ListOpts store store.GlobalAPIKeyLister } @@ -46,17 +46,19 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli iam globalApiKey(s) list|ls func ListBuilder() *cobra.Command { opts := new(ListOpts) + opts.Template = listTemplate cmd := &cobra.Command{ Use: "list", Aliases: []string{"ls"}, Short: listAPIKeys, PreRunE: func(cmd *cobra.Command, args []string) error { + opts.OutWriter = cmd.OutOrStdout() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -67,5 +69,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.PageNum, flag.Page, 0, usage.Page) cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + return cmd } diff --git a/internal/cli/iam/globalapikeys/update.go b/internal/cli/iam/globalapikeys/update.go index 89019cb31b..539e58a3a8 100644 --- a/internal/cli/iam/globalapikeys/update.go +++ b/internal/cli/iam/globalapikeys/update.go @@ -14,9 +14,9 @@ package globalapikeys import ( + "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -24,6 +24,7 @@ import ( ) type UpdateOpts struct { + cli.OutputOpts id string desc string roles []string @@ -51,17 +52,19 @@ func (opts *UpdateOpts) Run() error { return err } - return output.Print(config.Default(), updateTemplate, r) + return opts.Print(r) } // mongocli iam globalApiKey(s) update [--role role][--desc description] func UpdateBuilder() *cobra.Command { opts := new(UpdateOpts) + opts.Template = updateTemplate cmd := &cobra.Command{ Use: "update ", Args: cobra.ExactArgs(1), Short: updateAPIKey, PreRunE: func(cmd *cobra.Command, args []string) error { + opts.OutWriter = cmd.OutOrStdout() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -73,6 +76,8 @@ func UpdateBuilder() *cobra.Command { cmd.Flags().StringSliceVar(&opts.roles, flag.Role, []string{}, usage.APIKeyRoles) cmd.Flags().StringVar(&opts.desc, flag.Description, "", usage.APIKeyDescription) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + _ = cmd.MarkFlagRequired(flag.Description) _ = cmd.MarkFlagRequired(flag.Role) diff --git a/internal/cli/iam/globalwhitelist/create.go b/internal/cli/iam/globalwhitelist/create.go index 843a5e03a6..e608c836ba 100644 --- a/internal/cli/iam/globalwhitelist/create.go +++ b/internal/cli/iam/globalwhitelist/create.go @@ -15,9 +15,9 @@ package globalwhitelist import ( + "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +27,7 @@ import ( const createTemplate = "Global whitelist entry '{{.ID}}' created.\n" type CreateOpts struct { + cli.OutputOpts description string cidr string store store.GlobalAPIKeyWhitelistCreator @@ -48,22 +49,24 @@ func (opts *CreateOpts) newWhitelistAPIKeysReq() *opsmngr.WhitelistAPIKeysReq { func (opts *CreateOpts) Run() error { whitelistReq := opts.newWhitelistAPIKeysReq() - p, err := opts.store.CreateGlobalAPIKeyWhitelist(whitelistReq) + r, err := opts.store.CreateGlobalAPIKeyWhitelist(whitelistReq) if err != nil { return err } - return output.Print(config.Default(), createTemplate, p) + return opts.Print(r) } // mongocli iam globalWhitelist(s) create [--cidr cidr][--desc description] func CreateBuilder() *cobra.Command { opts := new(CreateOpts) + opts.Template = createTemplate cmd := &cobra.Command{ Use: "create", Short: createWhitelist, PreRunE: func(cmd *cobra.Command, args []string) error { + opts.OutWriter = cmd.OutOrStdout() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -73,6 +76,8 @@ func CreateBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.cidr, flag.CIDR, "", usage.WhitelistCIDREntry) cmd.Flags().StringVar(&opts.description, flag.Description, "", usage.WhitelistIPEntry) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + _ = cmd.MarkFlagRequired(flag.CIDR) _ = cmd.MarkFlagRequired(flag.Description) return cmd diff --git a/internal/cli/iam/globalwhitelist/describe.go b/internal/cli/iam/globalwhitelist/describe.go index fc7beb1747..ad6ecead9e 100644 --- a/internal/cli/iam/globalwhitelist/describe.go +++ b/internal/cli/iam/globalwhitelist/describe.go @@ -14,13 +14,16 @@ package globalwhitelist import ( + "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" - "github.com/mongodb/mongocli/internal/output" + "github.com/mongodb/mongocli/internal/flag" "github.com/mongodb/mongocli/internal/store" + "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" ) type DescribeOpts struct { + cli.OutputOpts id string store store.GlobalAPIKeyWhitelistDescriber } @@ -41,18 +44,20 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } // mongocli iam globalWhitelist(s) describe func DescribeBuilder() *cobra.Command { opts := new(DescribeOpts) + opts.Template = describeTemplate cmd := &cobra.Command{ Use: "describe ", Aliases: []string{"show"}, Args: cobra.ExactArgs(1), Short: describeEntry, PreRunE: func(cmd *cobra.Command, args []string) error { + opts.OutWriter = cmd.OutOrStdout() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -61,5 +66,7 @@ func DescribeBuilder() *cobra.Command { }, } + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + return cmd } diff --git a/internal/cli/iam/globalwhitelist/list.go b/internal/cli/iam/globalwhitelist/list.go index 66fd83da78..3cfb952f9a 100644 --- a/internal/cli/iam/globalwhitelist/list.go +++ b/internal/cli/iam/globalwhitelist/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -29,7 +28,7 @@ const listTemplate = `ID CIDR BLOCK CREATED AT{{range .Results}} ` type ListOpts struct { - cli.GlobalOpts + cli.OutputOpts cli.ListOpts store store.GlobalAPIKeyWhitelistLister } @@ -47,18 +46,20 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli iam globalWhitelist(s) list|ls func ListBuilder() *cobra.Command { opts := new(ListOpts) + opts.Template = listTemplate cmd := &cobra.Command{ Use: "list", Aliases: []string{"ls"}, Args: cobra.NoArgs, Short: listWhitelist, PreRunE: func(cmd *cobra.Command, args []string) error { + opts.OutWriter = cmd.OutOrStdout() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -69,5 +70,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.PageNum, flag.Page, 0, usage.Page) cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + return cmd } diff --git a/internal/cli/iam/organizations/apikeys/create.go b/internal/cli/iam/organizations/apikeys/create.go index 8bd13b0847..4779de6e20 100644 --- a/internal/cli/iam/organizations/apikeys/create.go +++ b/internal/cli/iam/organizations/apikeys/create.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -32,6 +31,7 @@ Private API Key {{.PrivateKey}} type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts desc string roles []string store store.OrganizationAPIKeyCreator @@ -51,13 +51,13 @@ func (opts *CreateOpts) newAPIKeyInput() *atlas.APIKeyInput { } func (opts *CreateOpts) Run() error { - p, err := opts.store.CreateOrganizationAPIKey(opts.ConfigOrgID(), opts.newAPIKeyInput()) + r, err := opts.store.CreateOrganizationAPIKey(opts.ConfigOrgID(), opts.newAPIKeyInput()) if err != nil { return err } - return output.Print(config.Default(), createTemplate, p) + return opts.Print(r) } // mongocli iam organizations|orgs apiKey(s)|apikeys create [--role role][--desc description][--orgId orgId] @@ -67,7 +67,10 @@ func CreateBuilder() *cobra.Command { Use: "create", Short: createAPIKey, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunEOrg(opts.init) + return opts.PreRunEOrg( + opts.init, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -78,6 +81,7 @@ func CreateBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.desc, flag.Description, "", usage.APIKeyDescription) cmd.Flags().StringVar(&opts.OrgID, flag.OrgID, "", usage.OrgID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.Description) _ = cmd.MarkFlagRequired(flag.Role) diff --git a/internal/cli/iam/organizations/apikeys/describe.go b/internal/cli/iam/organizations/apikeys/describe.go index 55b27edefa..8085643c37 100644 --- a/internal/cli/iam/organizations/apikeys/describe.go +++ b/internal/cli/iam/organizations/apikeys/describe.go @@ -17,7 +17,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -25,6 +24,7 @@ import ( type DescribeOpts struct { cli.GlobalOpts + cli.OutputOpts id string store store.OrganizationAPIKeyDescriber } @@ -45,7 +45,7 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } // mongocli iam organizations(s) apiKey(s)|apikey(s) describe --orgID @@ -57,7 +57,10 @@ func DescribeBuilder() *cobra.Command { Args: cobra.ExactArgs(1), Short: describeAPIKey, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunEOrg(opts.init) + return opts.PreRunEOrg( + opts.init, + opts.InitOutput(cmd.OutOrStdout(), describeTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.id = args[0] @@ -66,6 +69,7 @@ func DescribeBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.OrgID, flag.OrgID, "", usage.OrgID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/iam/organizations/apikeys/list.go b/internal/cli/iam/organizations/apikeys/list.go index edaa1effad..97b9dbf591 100644 --- a/internal/cli/iam/organizations/apikeys/list.go +++ b/internal/cli/iam/organizations/apikeys/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -30,6 +29,7 @@ const listTemplate = `ID DESCRIPTION PUBLIC KEY PRIVATE KEY{{range .}} type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts store store.OrganizationAPIKeyLister } @@ -47,7 +47,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli iam organizations|orgs apiKey(s)|apikey(s) list|ls [--orgId orgId] @@ -58,7 +58,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Short: listAPIKeys, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunEOrg(opts.init) + return opts.PreRunEOrg( + opts.init, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -69,6 +72,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.OrgID, flag.OrgID, "", usage.OrgID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/iam/organizations/apikeys/update.go b/internal/cli/iam/organizations/apikeys/update.go index f2415eaf90..df2ae98d79 100644 --- a/internal/cli/iam/organizations/apikeys/update.go +++ b/internal/cli/iam/organizations/apikeys/update.go @@ -17,7 +17,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type UpdateOpts struct { cli.GlobalOpts + cli.OutputOpts id string desc string roles []string @@ -53,7 +53,7 @@ func (opts *UpdateOpts) Run() error { return err } - return output.Print(config.Default(), updateTemplate, r) + return opts.Print(r) } // mongocli iam organizations|orgs apiKey(s)|apikey(s) update [--role role][--desc description][--orgId orgId] @@ -65,7 +65,10 @@ func UpdateBuilder() *cobra.Command { Args: cobra.ExactArgs(1), Short: updateAPIKey, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunEOrg(opts.init) + return opts.PreRunEOrg( + opts.init, + opts.InitOutput(cmd.OutOrStdout(), updateTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.id = args[0] @@ -77,6 +80,7 @@ func UpdateBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.desc, flag.Description, "", usage.APIKeyDescription) cmd.Flags().StringVar(&opts.OrgID, flag.OrgID, "", usage.OrgID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/iam/organizations/apikeys/whitelist/create.go b/internal/cli/iam/organizations/apikeys/whitelist/create.go index 490f9500f1..66745be80d 100644 --- a/internal/cli/iam/organizations/apikeys/whitelist/create.go +++ b/internal/cli/iam/organizations/apikeys/whitelist/create.go @@ -20,7 +20,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -31,6 +30,7 @@ const createTemplate = "Created new whitelist entry(s).\n" type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts apyKey string ips []string cidrs []string @@ -71,13 +71,13 @@ func (opts *CreateOpts) Run() error { return err } - p, err := opts.store.CreateOrganizationAPIKeyWhite(opts.ConfigOrgID(), opts.apyKey, whitelistReq) + r, err := opts.store.CreateOrganizationAPIKeyWhite(opts.ConfigOrgID(), opts.apyKey, whitelistReq) if err != nil { return err } - return output.Print(config.Default(), createTemplate, p) + return opts.Print(r) } // mongocli iam organizations|orgs apiKey(s)|apikeys whitelist|ipwhitelist create [--apiKey keyId] [--orgId orgId] [--ip ip] [--cidr cidr] @@ -87,7 +87,10 @@ func CreateBuilder() *cobra.Command { Use: "create", Short: createWhitelist, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunEOrg(opts.init) + return opts.PreRunEOrg( + opts.init, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -99,6 +102,7 @@ func CreateBuilder() *cobra.Command { cmd.Flags().StringSliceVar(&opts.ips, flag.IP, []string{}, usage.WhitelistIPEntry) cmd.Flags().StringVar(&opts.OrgID, flag.OrgID, "", usage.OrgID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.APIKey) diff --git a/internal/cli/iam/organizations/apikeys/whitelist/list.go b/internal/cli/iam/organizations/apikeys/whitelist/list.go index 6b12bb9985..137c5e6f8b 100644 --- a/internal/cli/iam/organizations/apikeys/whitelist/list.go +++ b/internal/cli/iam/organizations/apikeys/whitelist/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -30,6 +29,7 @@ const listTemplate = `IP ADDRESS CIDR BLOCK CREATED AT{{range .Results}} type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts id string store store.OrganizationAPIKeyWhitelistLister @@ -48,7 +48,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli iam organizations|orgs apiKey(s)|apikey(s) whitelist|ipwhitelist list|ls [--orgId orgId] @@ -60,7 +60,10 @@ func ListBuilder() *cobra.Command { Args: cobra.ExactArgs(1), Short: listWhitelist, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunEOrg(opts.init) + return opts.PreRunEOrg( + opts.init, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.id = args[0] @@ -72,6 +75,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.OrgID, flag.OrgID, "", usage.OrgID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/iam/organizations/create.go b/internal/cli/iam/organizations/create.go index b5735674da..f6cef9b6ef 100644 --- a/internal/cli/iam/organizations/create.go +++ b/internal/cli/iam/organizations/create.go @@ -15,15 +15,18 @@ package organizations import ( + "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" - "github.com/mongodb/mongocli/internal/output" + "github.com/mongodb/mongocli/internal/flag" "github.com/mongodb/mongocli/internal/store" + "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" ) const createTemplate = "Organization '{{.ID}}' created.\n" type CreateOpts struct { + cli.OutputOpts name string store store.OrganizationCreator } @@ -35,23 +38,25 @@ func (opts *CreateOpts) init() error { } func (opts *CreateOpts) Run() error { - p, err := opts.store.CreateOrganization(opts.name) + r, err := opts.store.CreateOrganization(opts.name) if err != nil { return err } - return output.Print(config.Default(), createTemplate, p) + return opts.Print(r) } // mongocli iam organization(s) create func CreateBuilder() *cobra.Command { opts := new(CreateOpts) + opts.Template = createTemplate cmd := &cobra.Command{ Use: "create ", Short: createOrganization, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { + opts.OutWriter = cmd.OutOrStdout() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -61,5 +66,7 @@ func CreateBuilder() *cobra.Command { }, } + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + return cmd } diff --git a/internal/cli/iam/organizations/describe.go b/internal/cli/iam/organizations/describe.go index c672f64089..ac8cfaae12 100644 --- a/internal/cli/iam/organizations/describe.go +++ b/internal/cli/iam/organizations/describe.go @@ -15,9 +15,11 @@ package organizations import ( + "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" - "github.com/mongodb/mongocli/internal/output" + "github.com/mongodb/mongocli/internal/flag" "github.com/mongodb/mongocli/internal/store" + "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" ) @@ -26,6 +28,7 @@ const describeTemplate = `ID NAME ` type DescribeOpts struct { + cli.OutputOpts id string store store.OrganizationDescriber } @@ -37,23 +40,25 @@ func (opts *DescribeOpts) init() error { } func (opts *DescribeOpts) Run() error { - org, err := opts.store.Organization(opts.id) + r, err := opts.store.Organization(opts.id) if err != nil { return err } - return output.Print(config.Default(), describeTemplate, org) + return opts.Print(r) } // mongocli iam organizations(s) describe func DescribeBuilder() *cobra.Command { opts := new(DescribeOpts) + opts.Template = describeTemplate cmd := &cobra.Command{ Use: "describe ", Aliases: []string{"show"}, Args: cobra.ExactArgs(1), Short: describeOrganizations, PreRunE: func(cmd *cobra.Command, args []string) error { + opts.OutWriter = cmd.OutOrStdout() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -62,5 +67,7 @@ func DescribeBuilder() *cobra.Command { }, } + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + return cmd } diff --git a/internal/cli/iam/organizations/list.go b/internal/cli/iam/organizations/list.go index 46a26efcf8..930902e4aa 100644 --- a/internal/cli/iam/organizations/list.go +++ b/internal/cli/iam/organizations/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -30,6 +29,7 @@ const listTemplate = `ID NAME{{range .Results}} type ListOpts struct { cli.ListOpts + cli.OutputOpts store store.OrganizationLister } @@ -47,17 +47,19 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli iam organizations(s) list func ListBuilder() *cobra.Command { opts := new(ListOpts) + opts.Template = listTemplate cmd := &cobra.Command{ Use: "list", Aliases: []string{"ls"}, Short: listOrganizations, PreRunE: func(cmd *cobra.Command, args []string) error { + opts.OutWriter = cmd.OutOrStdout() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -68,5 +70,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.PageNum, flag.Page, 0, usage.Page) cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + return cmd } diff --git a/internal/cli/iam/projects/apikeys/assign.go b/internal/cli/iam/projects/apikeys/assign.go index a33baa59bd..4ef9541511 100644 --- a/internal/cli/iam/projects/apikeys/assign.go +++ b/internal/cli/iam/projects/apikeys/assign.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +26,7 @@ import ( type AssignOpts struct { cli.GlobalOpts + cli.OutputOpts id string roles []string store store.ProjectAPIKeyAssigner @@ -51,7 +51,7 @@ func (opts *AssignOpts) Run() error { if err != nil { return err } - return output.Print(config.Default(), updateTemplate, nil) + return opts.Print(nil) } // mongocli iam project(s) apiKey(s)|apikey(s) assign [--role role][--projectId projectId] @@ -59,11 +59,15 @@ func AssignBuilder() *cobra.Command { opts := new(AssignOpts) cmd := &cobra.Command{ Use: "assign ", - Aliases: []string{"updates"}, + Aliases: []string{"update"}, Args: cobra.ExactArgs(1), Short: assignProjectAPIKey, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.init) + opts.OutWriter = cmd.OutOrStdout() + return opts.PreRunE( + opts.init, + opts.InitOutput(cmd.OutOrStdout(), updateTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.id = args[0] @@ -77,5 +81,7 @@ func AssignBuilder() *cobra.Command { _ = cmd.MarkFlagRequired(flag.Role) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + return cmd } diff --git a/internal/cli/iam/projects/apikeys/create.go b/internal/cli/iam/projects/apikeys/create.go index d7c9276eaf..c6673a2ed7 100644 --- a/internal/cli/iam/projects/apikeys/create.go +++ b/internal/cli/iam/projects/apikeys/create.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -32,6 +31,7 @@ Private API Key {{.PrivateKey}} type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts store store.ProjectAPIKeyCreator description string roles []string @@ -54,7 +54,7 @@ func (opts *CreateOpts) Run() error { return err } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } // mongocli iam project apiKey create --roles roles --description description @@ -65,11 +65,10 @@ func CreateBuilder() *cobra.Command { Short: createProjectAPIKey, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - if err := opts.init(); err != nil { - return err - } - - return opts.PreRunE() + return opts.PreRunE( + opts.init, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -80,6 +79,7 @@ func CreateBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.description, flag.Description, "", usage.APIKeyDescription) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.Description) _ = cmd.MarkFlagRequired(flag.Role) diff --git a/internal/cli/iam/projects/apikeys/list.go b/internal/cli/iam/projects/apikeys/list.go index 93159fd3d5..534d657158 100644 --- a/internal/cli/iam/projects/apikeys/list.go +++ b/internal/cli/iam/projects/apikeys/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -30,6 +29,7 @@ const listTemplate = `ID PUBLIC KEY DESCRIPTION{{range .}} type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts store store.ProjectAPIKeyLister } @@ -48,7 +48,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli iam project(s) apiKeys list @@ -59,7 +59,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Short: listProjectAPIKeys, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.init() + return opts.PreRunE( + opts.init, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -69,5 +72,8 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.PageNum, flag.Page, 0, usage.Page) cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) + cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + return cmd } diff --git a/internal/cli/iam/projects/create.go b/internal/cli/iam/projects/create.go index d99154d039..a2ebd55bc1 100644 --- a/internal/cli/iam/projects/create.go +++ b/internal/cli/iam/projects/create.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -28,6 +27,7 @@ var createTemplate = "Project '{{.ID}}' created.\n" type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts name string store store.ProjectCreator } @@ -52,17 +52,19 @@ func (opts *CreateOpts) Run() error { createTemplate += "Agent API Key: '{{.AgentAPIKey}}'\n" } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } // mongocli iam project(s) create [--orgId orgId] func CreateBuilder() *cobra.Command { opts := &CreateOpts{} + opts.Template = createTemplate cmd := &cobra.Command{ Use: "create ", Short: createProject, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { + opts.OutWriter = cmd.OutOrStdout() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -72,6 +74,7 @@ func CreateBuilder() *cobra.Command { }, } cmd.Flags().StringVar(&opts.OrgID, flag.OrgID, "", usage.OrgID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/iam/projects/describe.go b/internal/cli/iam/projects/describe.go index 346cc63741..29ff470356 100644 --- a/internal/cli/iam/projects/describe.go +++ b/internal/cli/iam/projects/describe.go @@ -15,9 +15,11 @@ package projects import ( + "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" - "github.com/mongodb/mongocli/internal/output" + "github.com/mongodb/mongocli/internal/flag" "github.com/mongodb/mongocli/internal/store" + "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" ) @@ -26,6 +28,7 @@ const describeTemplate = `ID NAME ` type DescribeOpts struct { + cli.OutputOpts id string store store.ProjectDescriber } @@ -37,23 +40,25 @@ func (opts *DescribeOpts) init() error { } func (opts *DescribeOpts) Run() error { - org, err := opts.store.Project(opts.id) + r, err := opts.store.Project(opts.id) if err != nil { return err } - return output.Print(config.Default(), describeTemplate, org) + return opts.Print(r) } // mongocli iam projects(s) describe func DescribeBuilder() *cobra.Command { opts := new(DescribeOpts) + opts.Template = describeTemplate cmd := &cobra.Command{ Use: "describe ", Aliases: []string{"show"}, Args: cobra.ExactArgs(1), Short: describeProject, PreRunE: func(cmd *cobra.Command, args []string) error { + opts.OutWriter = cmd.OutOrStdout() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -62,5 +67,7 @@ func DescribeBuilder() *cobra.Command { }, } + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + return cmd } diff --git a/internal/cli/iam/projects/list.go b/internal/cli/iam/projects/list.go index 2526191776..818b9101ed 100644 --- a/internal/cli/iam/projects/list.go +++ b/internal/cli/iam/projects/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -30,6 +29,7 @@ const listTemplate = `ID NAME{{range .Results}} type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts store store.ProjectLister } @@ -52,17 +52,19 @@ func (opts *ListOpts) Run() error { if err != nil { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli iam project(s) list [--orgId orgId] func ListBuilder() *cobra.Command { opts := &ListOpts{} + opts.Template = listTemplate cmd := &cobra.Command{ Use: "list", Aliases: []string{"ls"}, Short: listProjects, PreRunE: func(cmd *cobra.Command, args []string) error { + opts.OutWriter = cmd.OutOrStdout() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -74,6 +76,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.OrgID, flag.OrgID, "", usage.OrgID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/agents/apikeys/create.go b/internal/cli/opsmanager/agents/apikeys/create.go index 8fb7ab7548..1c13fb34df 100644 --- a/internal/cli/opsmanager/agents/apikeys/create.go +++ b/internal/cli/opsmanager/agents/apikeys/create.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -29,6 +28,7 @@ const createTemplate = "API Key '{{.Key}}' created.\n" type CreateOpts struct { cli.GlobalOpts + cli.OutputOpts desc string store store.AgentAPIKeyCreator } @@ -46,13 +46,13 @@ func (opts *CreateOpts) newAgentAPIKeysRequest() *opsmngr.AgentAPIKeysRequest { } func (opts *CreateOpts) Run() error { - p, err := opts.store.CreateAgentAPIKey(opts.ConfigProjectID(), opts.newAgentAPIKeysRequest()) + r, err := opts.store.CreateAgentAPIKey(opts.ConfigProjectID(), opts.newAgentAPIKeysRequest()) if err != nil { return err } - return output.Print(config.Default(), createTemplate, p) + return opts.Print(r) } // mongocli iam organizations|orgs apiKey(s)|apikeys create [--desc description][--projectId projectId] @@ -62,7 +62,10 @@ func CreateBuilder() *cobra.Command { Use: "create", Short: CreateAgentAPIKey, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.init) + return opts.PreRunE( + opts.init, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -71,6 +74,7 @@ func CreateBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.desc, flag.Description, "", usage.APIKeyDescription) cmd.Flags().StringVar(&opts.OrgID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.Description) diff --git a/internal/cli/opsmanager/agents/apikeys/list.go b/internal/cli/opsmanager/agents/apikeys/list.go index cabe7d7172..19ed837f91 100644 --- a/internal/cli/opsmanager/agents/apikeys/list.go +++ b/internal/cli/opsmanager/agents/apikeys/list.go @@ -17,7 +17,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -25,6 +24,7 @@ import ( type ListOpts struct { cli.GlobalOpts + cli.OutputOpts store store.AgentAPIKeyLister } @@ -44,7 +44,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli om agents apiKeys(s) list [--projectId projectId] @@ -55,7 +55,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Short: ListAgentAPIKeys, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -63,6 +66,7 @@ func ListBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/agents/list.go b/internal/cli/opsmanager/agents/list.go index 016f619bc4..8d197e7723 100644 --- a/internal/cli/opsmanager/agents/list.go +++ b/internal/cli/opsmanager/agents/list.go @@ -19,7 +19,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +26,7 @@ import ( type ListOpts struct { cli.GlobalOpts + cli.OutputOpts agentType string store store.AgentLister } @@ -47,7 +47,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli om agent(s) list [--projectId projectId] @@ -60,7 +60,10 @@ func ListBuilder() *cobra.Command { ValidArgs: []string{"AUTOMATION", "MONITORING", "BACKUP"}, Short: ListAgents, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.agentType = strings.ToUpper(args[0]) @@ -69,6 +72,7 @@ func ListBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/agents/upgrade.go b/internal/cli/opsmanager/agents/upgrade.go index 0d2f31d094..03da90afe3 100644 --- a/internal/cli/opsmanager/agents/upgrade.go +++ b/internal/cli/opsmanager/agents/upgrade.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type UpgradeOpts struct { cli.GlobalOpts + cli.OutputOpts store store.AgentUpgrader } @@ -42,7 +42,7 @@ func (opts *UpgradeOpts) Run() error { if err != nil { return err } - return output.Print(config.Default(), upgradeTemplate, r) + return opts.Print(r) } // mongocli ops-manager agents upgrade [--projectId projectId] @@ -53,7 +53,10 @@ func UpgradeBuilder() *cobra.Command { Args: cobra.NoArgs, Short: UpgradeAgents, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), upgradeTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -61,6 +64,7 @@ func UpgradeBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/automation/describe.go b/internal/cli/opsmanager/automation/describe.go index 559fa1d1b9..b3673532b2 100644 --- a/internal/cli/opsmanager/automation/describe.go +++ b/internal/cli/opsmanager/automation/describe.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type DescribeOpts struct { cli.GlobalOpts + cli.OutputOpts store store.AutomationGetter } @@ -41,7 +41,7 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), "", r) + return opts.Print(r) } // mongocli ops-manager automation describe [--projectId projectId] @@ -62,6 +62,7 @@ func DescribeBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/automation/status.go b/internal/cli/opsmanager/automation/status.go index bc86b9e94c..39a43f4398 100644 --- a/internal/cli/opsmanager/automation/status.go +++ b/internal/cli/opsmanager/automation/status.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type StatusOpts struct { cli.GlobalOpts + cli.OutputOpts store store.AutomationStatusGetter } @@ -41,7 +41,7 @@ func (opts *StatusOpts) Run() error { return err } - return output.Print(config.Default(), "", r) + return opts.Print(r) } // mongocli ops-manager automation status [--projectId projectId] @@ -52,7 +52,10 @@ func StatusBuilder() *cobra.Command { Short: ShowAutomationStatus, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), ""), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -60,6 +63,7 @@ func StatusBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/backup/checkpoints_list.go b/internal/cli/opsmanager/backup/checkpoints_list.go index b13c784a2b..6e29449c9e 100644 --- a/internal/cli/opsmanager/backup/checkpoints_list.go +++ b/internal/cli/opsmanager/backup/checkpoints_list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/mongodb/mongocli/internal/validate" @@ -31,6 +30,7 @@ const checkpointsTemplate = `ID TIMESTAMP{{range .Results}} type CheckpointsListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts clusterID string store store.CheckpointsLister @@ -50,7 +50,7 @@ func (opts *CheckpointsListOpts) Run() error { return err } - return output.Print(config.Default(), checkpointsTemplate, r) + return opts.Print(r) } // mongocli atlas backup(s) checkpoint(s) list [--projectId projectId] @@ -65,7 +65,10 @@ func AtlasBackupsCheckpointsListBuilder() *cobra.Command { if err := validate.ObjectID(args[0]); err != nil { return err } - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), checkpointsTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.clusterID = args[0] @@ -77,6 +80,7 @@ func AtlasBackupsCheckpointsListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/backup/restores_list.go b/internal/cli/opsmanager/backup/restores_list.go index 520c1b8a17..1a178a93a2 100644 --- a/internal/cli/opsmanager/backup/restores_list.go +++ b/internal/cli/opsmanager/backup/restores_list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/mongodb/mongocli/internal/validate" @@ -31,6 +30,7 @@ const restoresTemplate = `ID TIMESTAMP STATUS{{range .Results}} type RestoresListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts clusterID string store store.ContinuousJobLister @@ -49,7 +49,7 @@ func (opts *RestoresListOpts) Run() error { return err } - return output.Print(config.Default(), restoresTemplate, r) + return opts.Print(r) } // mongocli atlas backup(s) restore(s) job(s) list [--page N] [--limit N] @@ -61,7 +61,10 @@ func RestoresListBuilder() *cobra.Command { Short: ListRestores, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), restoresTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { if err := validate.ObjectID(args[0]); err != nil { @@ -77,6 +80,7 @@ func RestoresListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/backup/restores_start.go b/internal/cli/opsmanager/backup/restores_start.go index 0538779e53..fe78b796c6 100644 --- a/internal/cli/opsmanager/backup/restores_start.go +++ b/internal/cli/opsmanager/backup/restores_start.go @@ -15,13 +15,11 @@ package backup import ( - "errors" "fmt" "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -38,12 +36,11 @@ const ( type RestoresStartOpts struct { cli.GlobalOpts + cli.OutputOpts method string - clusterName string clusterID string targetProjectID string targetClusterID string - targetClusterName string checkpointID string oplogTS string oplogInc int64 @@ -63,12 +60,12 @@ func (opts *RestoresStartOpts) initStore() error { func (opts *RestoresStartOpts) Run() error { request := opts.newContinuousJobRequest() - r, err := opts.store.CreateContinuousRestoreJob(opts.ConfigProjectID(), opts.fromCluster(), request) + r, err := opts.store.CreateContinuousRestoreJob(opts.ConfigProjectID(), opts.clusterID, request) if err != nil { return err } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } func (opts *RestoresStartOpts) newContinuousJobRequest() *atlas.ContinuousJobRequest { @@ -78,7 +75,7 @@ func (opts *RestoresStartOpts) newContinuousJobRequest() *atlas.ContinuousJobReq if opts.isAutomatedRestore() { request.Delivery.TargetGroupID = opts.targetProjectID - opts.setTargetCluster(request) + request.Delivery.TargetClusterID = opts.targetClusterID if opts.oplogTS != "" && opts.oplogInc != 0 { request.OplogTS = opts.oplogTS @@ -103,21 +100,6 @@ func (opts *RestoresStartOpts) newContinuousJobRequest() *atlas.ContinuousJobReq return request } -func (opts *RestoresStartOpts) fromCluster() string { - if opts.clusterName != "" { - return opts.clusterName - } - return opts.clusterID -} - -func (opts *RestoresStartOpts) setTargetCluster(out *atlas.ContinuousJobRequest) { - if opts.targetClusterID != "" { - out.Delivery.TargetClusterID = opts.targetClusterID - } else if opts.targetClusterName != "" { - out.Delivery.TargetClusterName = opts.targetClusterName - } -} - func (opts *RestoresStartOpts) isAutomatedRestore() bool { return opts.method == automatedRestore } @@ -127,10 +109,6 @@ func (opts *RestoresStartOpts) isHTTP() bool { } func (opts *RestoresStartOpts) validateParams() error { - if (opts.clusterName == "" && opts.clusterID == "") || (opts.clusterName != "" && opts.clusterID != "") { - return errors.New("needs clusterName or clusterId") - } - if !opts.isAutomatedRestore() { if e := opts.automatedRestoreOnlyFlags(); e != nil { return e @@ -200,7 +178,10 @@ func RestoresStartBuilder() *cobra.Command { return err } } - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), createTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.method = args[0] @@ -214,8 +195,6 @@ func RestoresStartBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.snapshotID, flag.SnapshotID, "", usage.SnapshotID) - // Atlas uses cluster name - cmd.Flags().StringVar(&opts.clusterName, flag.ClusterName, "", usage.ClusterName) // C/OM uses cluster ID cmd.Flags().StringVar(&opts.clusterID, flag.ClusterID, "", usage.ClusterID) @@ -223,8 +202,6 @@ func RestoresStartBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.targetProjectID, flag.TargetProjectID, "", usage.TargetProjectID) // C/OM uses cluster ID cmd.Flags().StringVar(&opts.targetClusterID, flag.TargetClusterID, "", usage.TargetClusterID) - // Atlas uses cluster name - cmd.Flags().StringVar(&opts.targetClusterName, flag.TargetClusterName, "", usage.TargetClusterName) cmd.Flags().StringVar(&opts.checkpointID, flag.CheckpointID, "", usage.CheckpointID) cmd.Flags().StringVar(&opts.oplogTS, flag.OplogTS, "", usage.OplogTS) cmd.Flags().Int64Var(&opts.oplogInc, flag.OplogInc, 0, usage.OplogInc) @@ -236,6 +213,9 @@ func RestoresStartBuilder() *cobra.Command { cmd.Flags().Int64Var(&opts.expirationHours, flag.ExpirationHours, 0, usage.ExpirationHours) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + _ = cmd.MarkFlagRequired(flag.ClusterID) + _ = cmd.MarkFlagRequired(flag.TargetClusterID) return cmd } diff --git a/internal/cli/opsmanager/backup/restores_start_test.go b/internal/cli/opsmanager/backup/restores_start_test.go index e06de3eb82..eebedb8eee 100644 --- a/internal/cli/opsmanager/backup/restores_start_test.go +++ b/internal/cli/opsmanager/backup/restores_start_test.go @@ -33,9 +33,9 @@ func TestRestoresStart_Run(t *testing.T) { t.Run(automatedRestore, func(t *testing.T) { listOpts := &RestoresStartOpts{ - store: mockStore, - method: automatedRestore, - clusterName: "Cluster0", + store: mockStore, + method: automatedRestore, + clusterID: "Cluster0", } mockStore. @@ -52,9 +52,9 @@ func TestRestoresStart_Run(t *testing.T) { t.Run(httpRestore, func(t *testing.T) { listOpts := &RestoresStartOpts{ - store: mockStore, - method: httpRestore, - clusterName: "Cluster0", + store: mockStore, + method: httpRestore, + clusterID: "Cluster0", } mockStore. diff --git a/internal/cli/opsmanager/backup/snapshots_list.go b/internal/cli/opsmanager/backup/snapshots_list.go index f7603bed0b..20637e3d68 100644 --- a/internal/cli/opsmanager/backup/snapshots_list.go +++ b/internal/cli/opsmanager/backup/snapshots_list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/mongodb/mongocli/internal/validate" @@ -31,6 +30,7 @@ const snapshotsTemplate = `ID CREATED COMPLETE{{range .Results}} type SnapshotsListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts clusterID string store store.ContinuousSnapshotsLister @@ -49,7 +49,7 @@ func (opts *SnapshotsListOpts) Run() error { return err } - return output.Print(config.Default(), snapshotsTemplate, r) + return opts.Print(r) } // mongocli atlas backups snapshots list [--projectId projectId] [--page N] [--limit N] @@ -61,7 +61,10 @@ func SnapshotsListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), snapshotsTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { if err := validate.ObjectID(args[0]); err != nil { @@ -77,6 +80,7 @@ func SnapshotsListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/clusters/describe.go b/internal/cli/opsmanager/clusters/describe.go index 13c16e99dc..2af524b418 100644 --- a/internal/cli/opsmanager/clusters/describe.go +++ b/internal/cli/opsmanager/clusters/describe.go @@ -21,7 +21,6 @@ import ( "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/convert" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -29,6 +28,7 @@ import ( type DescribeOpts struct { cli.GlobalOpts + cli.OutputOpts name string store store.CloudManagerClustersDescriber } @@ -49,11 +49,11 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } func (opts *DescribeOpts) cluster() (interface{}, error) { - if config.Output() == "" { + if opts.ConfigOutput() == "" { return opts.store.Cluster(opts.ConfigProjectID(), opts.name) } c, err := opts.store.GetAutomationConfig(opts.ConfigProjectID()) @@ -77,7 +77,10 @@ func DescribeBuilder() *cobra.Command { Short: DescribeCluster, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), describeTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.name = args[0] @@ -86,6 +89,7 @@ func DescribeBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/clusters/list.go b/internal/cli/opsmanager/clusters/list.go index ecc705403b..5e60beb070 100644 --- a/internal/cli/opsmanager/clusters/list.go +++ b/internal/cli/opsmanager/clusters/list.go @@ -19,7 +19,6 @@ import ( "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/convert" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +26,7 @@ import ( type ListOpts struct { cli.GlobalOpts + cli.OutputOpts store store.CloudManagerClustersLister } @@ -52,7 +52,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), opts.template(), r) + return opts.Print(r) } func (opts *ListOpts) template() string { @@ -66,7 +66,7 @@ func (opts *ListOpts) clusters() (interface{}, error) { if opts.ConfigProjectID() == "" { return opts.store.ListAllProjectClusters() } - if config.Output() == "" { + if opts.ConfigOutput() == "" { return opts.store.ProjectClusters(opts.ConfigProjectID(), nil) } c, err := opts.store.GetAutomationConfig(opts.ConfigProjectID()) @@ -87,6 +87,7 @@ func ListBuilder() *cobra.Command { Short: ListClusters, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { + _ = opts.InitOutput(cmd.OutOrStdout(), opts.template())() return opts.init() }, RunE: func(cmd *cobra.Command, args []string) error { @@ -95,6 +96,7 @@ func ListBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/dbusers/list.go b/internal/cli/opsmanager/dbusers/list.go index 7c592168de..5b00ae1dab 100644 --- a/internal/cli/opsmanager/dbusers/list.go +++ b/internal/cli/opsmanager/dbusers/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -30,6 +29,7 @@ const listTemplate = `USERNAME DATABASE{{range .}} type ListOpts struct { cli.GlobalOpts + cli.OutputOpts store store.AutomationGetter } @@ -40,13 +40,13 @@ func (opts *ListOpts) initStore() error { } func (opts *ListOpts) Run() error { - current, err := opts.store.GetAutomationConfig(opts.ConfigProjectID()) + r, err := opts.store.GetAutomationConfig(opts.ConfigProjectID()) if err != nil { return err } - return output.Print(config.Default(), listTemplate, current.Auth.Users) + return opts.Print(r.Auth.Users) } // mongocli om|cm dbuser(s) list [--projectId projectId] @@ -58,7 +58,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -66,6 +69,7 @@ func ListBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/logs/jobs_collect.go b/internal/cli/opsmanager/logs/jobs_collect.go index 4480a89fb9..5b083eb820 100644 --- a/internal/cli/opsmanager/logs/jobs_collect.go +++ b/internal/cli/opsmanager/logs/jobs_collect.go @@ -21,7 +21,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/search" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" @@ -31,6 +30,7 @@ import ( type JobsCollectOpts struct { cli.GlobalOpts + cli.OutputOpts resourceType string resourceName string logTypes []string @@ -52,7 +52,7 @@ func (opts *JobsCollectOpts) Run() error { if err != nil { return err } - return output.Print(config.Default(), collectTemplate, r) + return opts.Print(r) } func (opts *JobsCollectOpts) newLog() *opsmngr.LogCollectionJob { @@ -85,7 +85,10 @@ func JobsCollectOptsBuilder() *cobra.Command { }, ValidArgs: []string{"cluster", "process", "replicaset"}, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), collectTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.resourceType = args[0] @@ -102,6 +105,7 @@ func JobsCollectOptsBuilder() *cobra.Command { _ = cmd.MarkFlagRequired(flag.Type) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/logs/jobs_list.go b/internal/cli/opsmanager/logs/jobs_list.go index 539427ef84..53c435e509 100644 --- a/internal/cli/opsmanager/logs/jobs_list.go +++ b/internal/cli/opsmanager/logs/jobs_list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +26,7 @@ import ( type JobsListOpts struct { cli.GlobalOpts + cli.OutputOpts verbose bool store store.LogJobLister } @@ -46,7 +46,7 @@ func (opts *JobsListOpts) Run() error { if err != nil { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } func (opts *JobsListOpts) newLogListOptions() *opsmngr.LogListOptions { @@ -61,7 +61,10 @@ func JobsListOptsBuilder() *cobra.Command { Aliases: []string{"ls"}, Short: ListLogCollectionJobs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -71,6 +74,7 @@ func JobsListOptsBuilder() *cobra.Command { cmd.Flags().BoolVar(&opts.verbose, flag.Verbose, false, usage.Verbose) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/metrics/databases_list.go b/internal/cli/opsmanager/metrics/databases_list.go index 4a4519fb34..48d2c77df9 100644 --- a/internal/cli/opsmanager/metrics/databases_list.go +++ b/internal/cli/opsmanager/metrics/databases_list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type DatabasesListsOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts hostID string store store.HostDatabaseLister @@ -49,7 +49,7 @@ func (opts *DatabasesListsOpts) Run() error { return err } - return output.Print(config.Default(), databasesListTemplate, r) + return opts.Print(r) } // mongocli om metric(s) process(es) disks lists @@ -61,7 +61,10 @@ func DatabasesListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), databasesListTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.hostID = args[0] @@ -73,6 +76,7 @@ func DatabasesListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.PageNum, flag.Page, 0, usage.Page) cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/metrics/disks_describe.go b/internal/cli/opsmanager/metrics/disks_describe.go index 85fd362430..aef926b1bc 100644 --- a/internal/cli/opsmanager/metrics/disks_describe.go +++ b/internal/cli/opsmanager/metrics/disks_describe.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type DisksDescribeOpts struct { cli.GlobalOpts + cli.OutputOpts cli.MetricsOpts hostID string name string @@ -50,7 +50,7 @@ func (opts *DisksDescribeOpts) Run() error { return err } - return output.Print(config.Default(), diskMetricTemplate, r) + return opts.Print(r) } // mcli om metric(s) disk(s) describe --granularity g --period p --start start --end end [--type type] [--projectId projectId] @@ -62,7 +62,10 @@ func DisksDescribeBuilder() *cobra.Command { Short: DescribeDisks, Args: cobra.ExactArgs(argsN), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), diskMetricTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.hostID = args[0] @@ -82,6 +85,7 @@ func DisksDescribeBuilder() *cobra.Command { cmd.Flags().StringSliceVar(&opts.MeasurementType, flag.Type, nil, usage.MeasurementType) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) _ = cmd.MarkFlagRequired(flag.Granularity) diff --git a/internal/cli/opsmanager/metrics/disks_list.go b/internal/cli/opsmanager/metrics/disks_list.go index 4d9afeaabd..81e511576d 100644 --- a/internal/cli/opsmanager/metrics/disks_list.go +++ b/internal/cli/opsmanager/metrics/disks_list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type DisksListsOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts hostID string store store.HostDisksLister @@ -48,7 +48,7 @@ func (opts *DisksListsOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli om metric(s) process(es) disks lists @@ -60,7 +60,10 @@ func DisksListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.hostID = args[0] @@ -72,6 +75,7 @@ func DisksListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.PageNum, flag.Page, 0, usage.Page) cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/metrics/process.go b/internal/cli/opsmanager/metrics/process.go index 6453887bc0..7755dd9359 100644 --- a/internal/cli/opsmanager/metrics/process.go +++ b/internal/cli/opsmanager/metrics/process.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type ProcessOpts struct { cli.GlobalOpts + cli.OutputOpts cli.MetricsOpts hostID string store store.HostMeasurementLister @@ -49,7 +49,7 @@ func (opts *ProcessOpts) Run() error { return err } - return output.Print(config.Default(), metricTemplate, r) + return opts.Print(r) } // mongocli om|cm metric(s) process(es) [--granularity granularity] [--period period] [--start start] [--end end] [--type type][--projectId projectId] @@ -61,7 +61,10 @@ func ProcessBuilder() *cobra.Command { Aliases: []string{"processes"}, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), metricTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.hostID = args[0] @@ -76,6 +79,7 @@ func ProcessBuilder() *cobra.Command { cmd.Flags().StringSliceVar(&opts.MeasurementType, flag.Type, nil, usage.MeasurementType) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/owner/create.go b/internal/cli/opsmanager/owner/create.go index 315f31a708..eda72c4bce 100644 --- a/internal/cli/opsmanager/owner/create.go +++ b/internal/cli/opsmanager/owner/create.go @@ -16,9 +16,9 @@ package owner import ( "github.com/AlecAivazis/survey/v2" + "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +26,7 @@ import ( ) type CreateOpts struct { + cli.OutputOpts email string password string firstName string @@ -56,7 +57,7 @@ func (opts *CreateOpts) Run() error { return err } - return output.Print(config.Default(), createTemplate, r) + return opts.Print(r) } func (opts *CreateOpts) newOwner() *opsmngr.User { @@ -90,6 +91,7 @@ func CreateBuilder() *cobra.Command { Long: CreateLong, Args: cobra.OnlyValidArgs, PreRunE: func(cmd *cobra.Command, args []string) error { + _ = opts.InitOutput(cmd.OutOrStdout(), createTemplate)() if err := opts.init(); err != nil { return err } @@ -106,6 +108,8 @@ func CreateBuilder() *cobra.Command { cmd.Flags().StringVar(&opts.lastName, flag.LastName, "", usage.LastName) cmd.Flags().StringSliceVar(&opts.whitelistIps, flag.WhitelistIP, []string{}, usage.WhitelistIps) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) + _ = cmd.MarkFlagRequired(flag.Email) _ = cmd.MarkFlagRequired(flag.FirstName) _ = cmd.MarkFlagRequired(flag.LastName) diff --git a/internal/cli/opsmanager/processes/describe.go b/internal/cli/opsmanager/processes/describe.go index 265f317e3c..9de27dfe19 100644 --- a/internal/cli/opsmanager/processes/describe.go +++ b/internal/cli/opsmanager/processes/describe.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -26,6 +25,7 @@ import ( type DescribeOpts struct { cli.GlobalOpts + cli.OutputOpts hostID string store store.HostDescriber } @@ -46,7 +46,7 @@ func (opts *DescribeOpts) Run() error { return err } - return output.Print(config.Default(), describeTemplate, r) + return opts.Print(r) } // mongocli om process(es) describe [--projectId projectId] @@ -58,7 +58,10 @@ func DescribeBuilder() *cobra.Command { Aliases: []string{"d"}, Args: cobra.ExactArgs(1), PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), describeTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { opts.hostID = args[0] @@ -67,6 +70,7 @@ func DescribeBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/processes/list.go b/internal/cli/opsmanager/processes/list.go index 9b54bdd3b4..2236283ab9 100644 --- a/internal/cli/opsmanager/processes/list.go +++ b/internal/cli/opsmanager/processes/list.go @@ -18,7 +18,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -27,6 +26,7 @@ import ( type ListOpts struct { cli.GlobalOpts + cli.OutputOpts cli.ListOpts clusterID string store store.HostLister @@ -49,7 +49,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } func (opts *ListOpts) newHostListOptions() *opsmngr.HostListOptions { @@ -68,7 +68,10 @@ func ListBuilder() *cobra.Command { Aliases: []string{"ls"}, Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -80,6 +83,7 @@ func ListBuilder() *cobra.Command { cmd.Flags().IntVar(&opts.ItemsPerPage, flag.Limit, 0, usage.Limit) cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/opsmanager/servers/list.go b/internal/cli/opsmanager/servers/list.go index d74277183b..1edb858d28 100644 --- a/internal/cli/opsmanager/servers/list.go +++ b/internal/cli/opsmanager/servers/list.go @@ -17,7 +17,6 @@ import ( "github.com/mongodb/mongocli/internal/cli" "github.com/mongodb/mongocli/internal/config" "github.com/mongodb/mongocli/internal/flag" - "github.com/mongodb/mongocli/internal/output" "github.com/mongodb/mongocli/internal/store" "github.com/mongodb/mongocli/internal/usage" "github.com/spf13/cobra" @@ -29,6 +28,7 @@ const ( type ListOpts struct { cli.GlobalOpts + cli.OutputOpts store store.AgentLister } @@ -48,7 +48,7 @@ func (opts *ListOpts) Run() error { return err } - return output.Print(config.Default(), listTemplate, r) + return opts.Print(r) } // mongocli om server(s) list [--projectId projectId] @@ -60,7 +60,10 @@ func ListBuilder() *cobra.Command { Args: cobra.NoArgs, Short: listServer, PreRunE: func(cmd *cobra.Command, args []string) error { - return opts.PreRunE(opts.initStore) + return opts.PreRunE( + opts.initStore, + opts.InitOutput(cmd.OutOrStdout(), listTemplate), + ) }, RunE: func(cmd *cobra.Command, args []string) error { return opts.Run() @@ -68,6 +71,7 @@ func ListBuilder() *cobra.Command { } cmd.Flags().StringVar(&opts.ProjectID, flag.ProjectID, "", usage.ProjectID) + cmd.Flags().StringVarP(&opts.Output, flag.Output, flag.OutputShort, "", usage.FormatOut) return cmd } diff --git a/internal/cli/output_opts.go b/internal/cli/output_opts.go new file mode 100644 index 0000000000..59b63c0079 --- /dev/null +++ b/internal/cli/output_opts.go @@ -0,0 +1,129 @@ +// Copyright 2020 MongoDB Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package cli + +import ( + "fmt" + "io" + "io/ioutil" + "os" + "strings" + + "github.com/mattn/go-isatty" + "github.com/mongodb/mongocli/internal/config" + "github.com/mongodb/mongocli/internal/jsonwriter" + "github.com/mongodb/mongocli/internal/templatewriter" +) + +const ( + jsonFormat = "json" + goTemplate = "go-template" + goTemplateFile = "go-template-file" +) + +var templateFormats = []string{goTemplate, goTemplateFile} + +type OutputOpts struct { + Template string + OutWriter io.Writer + Output string +} + +// InitOutput allow to init the OutputOpts in a functional way +func (opts *OutputOpts) InitOutput(w io.Writer, t string) func() error { + return func() error { + opts.Template = t + opts.OutWriter = w + return nil + } +} + +// ConfigOutput returns the output format. +// If the format is empty, it caches it after querying config. +func (opts *OutputOpts) ConfigOutput() string { + if opts.Output != "" { + return opts.Output + } + opts.Output = config.Output() + return opts.Output +} + +// ConfigWriter returns the io.Writer. +// If the writer is nil, it defaults to os.Stdout and caches it. +func (opts *OutputOpts) ConfigWriter() io.Writer { + if opts.OutWriter != nil { + return opts.OutWriter + } + opts.OutWriter = os.Stdout + return opts.OutWriter +} + +// IsTerminal returns true is the current file descriptor is TTY kind of terminal +func (opts *OutputOpts) IsTerminal() bool { + if f, isFile := opts.OutWriter.(*os.File); isFile { + return isatty.IsTerminal(f.Fd()) || opts.IsCygwinTerminal() + } + + return false +} + +// IsCygwinTerminal returns true is the current file descriptor is cygwin +func (opts *OutputOpts) IsCygwinTerminal() bool { + if f, isFile := opts.OutWriter.(*os.File); isFile { + return isatty.IsCygwinTerminal(f.Fd()) + } + + return false +} + +// Print will evaluate the defined format and try to parse it accordingly outputting to the set writer +func (opts *OutputOpts) Print(v interface{}) error { + if opts.ConfigOutput() == jsonFormat { + return jsonwriter.Print(opts.ConfigWriter(), v) + } + t, err := opts.parseTemplate() + if err != nil { + return err + } + if t != "" { + return templatewriter.Print(opts.ConfigWriter(), t, v) + } + _, err = fmt.Fprintln(opts.ConfigWriter(), v) + return err +} + +// parseTemplate will try to find if the given format is a user given template, either by string or file and use it. +// Current available user templates are "go-template=Template string" and "go-template-file=path/to/template" +func (opts *OutputOpts) parseTemplate() (string, error) { + value := opts.Template + templateFormat := "" + for _, format := range templateFormats { + format += "=" + if strings.HasPrefix(opts.ConfigOutput(), format) { + value = opts.ConfigOutput()[len(format):] + templateFormat = format[:len(format)-1] + break + } + } + if templateFormat == goTemplateFile { + data, err := ioutil.ReadFile(value) + if err != nil { + return "", fmt.Errorf("error loading template: %s, %v", value, err) + } + + value = string(data) + } + return value, nil +} diff --git a/internal/output/output_test.go b/internal/cli/output_opts_test.go similarity index 63% rename from internal/output/output_test.go rename to internal/cli/output_opts_test.go index 6bc70791ab..ce5d854a1b 100644 --- a/internal/output/output_test.go +++ b/internal/cli/output_opts_test.go @@ -14,52 +14,54 @@ // +build unit -package output +package cli -import "testing" +import ( + "io" + "testing" +) -type testConfig string - -func (t testConfig) Output() string { - return string(t) -} - -func Test_templateValue(t *testing.T) { - type args struct { - c Config - defaultTemplate string +func TestOutputOpts_parseTemplate(t *testing.T) { + type fields struct { + Template string + OutWriter io.Writer + Output string } tests := []struct { name string - args args + fields fields want string wantErr bool }{ { name: "go-template", - args: args{c: testConfig("go-template=test"), defaultTemplate: ""}, + fields: fields{Output: "go-template=test", Template: ""}, want: "test", wantErr: false, }, { name: "not-valid", - args: args{c: testConfig("not-valid"), defaultTemplate: "default"}, + fields: fields{Output: "not-valid", Template: "default"}, want: "default", wantErr: false, }, } for _, tt := range tests { - args := tt.args + opts := &OutputOpts{ + Template: tt.fields.Template, + OutWriter: tt.fields.OutWriter, + Output: tt.fields.Output, + } wantErr := tt.wantErr want := tt.want t.Run(tt.name, func(t *testing.T) { - got, err := templateValue(args.c, args.defaultTemplate) + got, err := opts.parseTemplate() if (err != nil) != wantErr { - t.Errorf("templateValue() error = %v, wantErr %v", err, wantErr) + t.Errorf("parseTemplate() error = %v, wantErr %v", err, wantErr) return } if got != want { - t.Errorf("templateValue() got = %v, want %v", got, want) + t.Errorf("parseTemplate() got = %v, want %v", got, want) } }) } diff --git a/internal/json/fmt.go b/internal/jsonwriter/jsonwriter.go similarity index 74% rename from internal/json/fmt.go rename to internal/jsonwriter/jsonwriter.go index 595ad5c6a0..9648f35b5a 100644 --- a/internal/json/fmt.go +++ b/internal/jsonwriter/jsonwriter.go @@ -12,19 +12,25 @@ // See the License for the specific language governing permissions and // limitations under the License. -package json +package jsonwriter import ( "encoding/json" "fmt" + "io" ) -func PrettyPrint(obj interface{}) error { - prettyJSON, err := json.MarshalIndent(obj, "", " ") +const ( + prefix = "" + indent = " " +) + +func Print(w io.Writer, obj interface{}) error { + prettyJSON, err := json.MarshalIndent(obj, prefix, indent) if err != nil { return err } - fmt.Println(string(prettyJSON)) + _, err = fmt.Fprintln(w, string(prettyJSON)) - return nil + return err } diff --git a/internal/output/output.go b/internal/templatewriter/templatewriter.go similarity index 51% rename from internal/output/output.go rename to internal/templatewriter/templatewriter.go index cdae97ef28..0543be0932 100644 --- a/internal/output/output.go +++ b/internal/templatewriter/templatewriter.go @@ -12,28 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -package output +package templatewriter import ( - "fmt" "io" - "io/ioutil" - "os" - "strings" "text/tabwriter" "text/template" - - "github.com/mongodb/mongocli/internal/json" ) -type Config interface { - Output() string -} - const ( - jsonFormat = "json" - goTemplate = "go-template" - goTemplateFile = "go-template-file" tabwriterMinWidth = 6 tabwriterWidth = 4 tabwriterPadding = 3 @@ -45,53 +32,19 @@ func newTabWriter(output io.Writer) *tabwriter.Writer { return tabwriter.NewWriter(output, tabwriterMinWidth, tabwriterWidth, tabwriterPadding, tabwriterPadChar, 0) } -var templateFormats = []string{goTemplate, goTemplateFile} - // Print outputs v to os.Stdout while handling configured formats, // if the optional t is given then it's processed as a go-template, // this template will be handled with a tabwriter so you can use tabs (\t) // and new lines (\n) to space your content evenly. -func Print(c Config, defaultTemplate string, v interface{}) error { - if c.Output() == jsonFormat { - return json.PrettyPrint(v) - } - t, err := templateValue(c, defaultTemplate) +func Print(writer io.Writer, t string, v interface{}) error { + tmpl, err := template.New("output").Parse(t) if err != nil { return err } - if t != "" { - tmpl, err := template.New("output").Parse(t) - if err != nil { - return err - } - w := newTabWriter(os.Stdout) + w := newTabWriter(writer) - if err := tmpl.Execute(w, v); err != nil { - return err - } - return w.Flush() - } - return nil -} - -func templateValue(c Config, defaultTemplate string) (string, error) { - value := defaultTemplate - templateFormat := "" - for _, format := range templateFormats { - format += "=" - if strings.HasPrefix(c.Output(), format) { - value = c.Output()[len(format):] - templateFormat = format[:len(format)-1] - break - } - } - if templateFormat == goTemplateFile { - data, err := ioutil.ReadFile(value) - if err != nil { - return "", fmt.Errorf("error loading template: %s, %v", value, err) - } - - value = string(data) + if err := tmpl.Execute(w, v); err != nil { + return err } - return value, nil + return w.Flush() }