From 701c41a966267d338d43e9fd845a524e64b0041c Mon Sep 17 00:00:00 2001 From: Andrew Nester Date: Mon, 23 Oct 2023 13:39:55 +0200 Subject: [PATCH 1/4] Simplified code generation logic for handling path and request body parameters and JSON input --- .codegen/service.go.tmpl | 42 ++- cmd/account/groups/groups.go | 17 - cmd/account/log-delivery/log-delivery.go | 17 - cmd/account/metastores/metastores.go | 4 - cmd/account/networks/networks.go | 6 +- .../o-auth-enrollment/o-auth-enrollment.go | 14 - .../o-auth-published-apps.go | 14 - cmd/account/private-access/private-access.go | 8 +- .../published-app-integration.go | 4 - .../service-principals/service-principals.go | 17 - cmd/account/settings/settings.go | 4 - cmd/account/users/users.go | 17 - cmd/account/vpc-endpoints/vpc-endpoints.go | 6 +- cmd/account/workspaces/workspaces.go | 6 +- cmd/workspace/catalogs/catalogs.go | 6 +- cmd/workspace/clean-rooms/clean-rooms.go | 13 - .../cluster-policies/cluster-policies.go | 80 +---- cmd/workspace/clusters/clusters.go | 331 +++++++----------- cmd/workspace/dashboards/dashboards.go | 16 - cmd/workspace/experiments/experiments.go | 282 ++------------- .../external-locations/external-locations.go | 10 +- .../git-credentials/git-credentials.go | 15 +- .../global-init-scripts.go | 17 +- cmd/workspace/groups/groups.go | 17 - .../instance-pools/instance-pools.go | 55 +-- .../instance-profiles/instance-profiles.go | 43 +-- cmd/workspace/jobs/jobs.go | 280 ++++++--------- cmd/workspace/metastores/metastores.go | 37 +- .../model-registry/model-registry.go | 298 +++------------- cmd/workspace/pipelines/pipelines.go | 7 - .../policy-families/policy-families.go | 14 - cmd/workspace/providers/providers.go | 34 +- cmd/workspace/queries/queries.go | 16 - cmd/workspace/query-history/query-history.go | 4 - .../query-visualizations.go | 3 - cmd/workspace/recipients/recipients.go | 27 +- .../registered-models/registered-models.go | 32 +- cmd/workspace/repos/repos.go | 21 +- cmd/workspace/schemas/schemas.go | 8 +- cmd/workspace/secrets/secrets.go | 74 +--- .../service-principals/service-principals.go | 17 - cmd/workspace/settings/settings.go | 4 - cmd/workspace/shares/shares.go | 14 +- .../storage-credentials.go | 10 +- .../token-management/token-management.go | 41 +-- cmd/workspace/tokens/tokens.go | 51 +-- cmd/workspace/users/users.go | 25 -- cmd/workspace/volumes/volumes.go | 25 +- cmd/workspace/warehouses/warehouses.go | 21 -- .../workspace-conf/workspace-conf.go | 14 - cmd/workspace/workspace/workspace.go | 88 ++--- 51 files changed, 463 insertions(+), 1763 deletions(-) diff --git a/.codegen/service.go.tmpl b/.codegen/service.go.tmpl index b4b6b4d464..508da8a016 100644 --- a/.codegen/service.go.tmpl +++ b/.codegen/service.go.tmpl @@ -78,12 +78,12 @@ var {{.CamelName}}Overrides []func( func new{{.PascalName}}() *cobra.Command { cmd := &cobra.Command{} - {{- $needJsonFlag := or .CanSetRequiredFieldsFromJson (and .Request (not .Request.IsOnlyPrimitiveFields)) -}} + {{- $hasRequiredRequestBodyFields := and .Request (gt 0 (len .Request.RequiredRequestBodyFields)) -}} {{- if .Request}} var {{.CamelName}}Req {{.Service.Package.Name}}.{{.Request.PascalName}} - {{- if $needJsonFlag}} + {{- if .CanUseJson}} var {{.CamelName}}Json flags.JsonFlag {{- end}} {{- end}} @@ -96,7 +96,7 @@ func new{{.PascalName}}() *cobra.Command { cmd.Flags().DurationVar(&{{.CamelName}}Timeout, "timeout", {{.Wait.Timeout}}*time.Minute, `maximum amount of time to reach {{range $i, $e := .Wait.Success}}{{if $i}} or {{end}}{{.Content}}{{end}} state`) {{end -}} {{if .Request}}// TODO: short flags - {{- if $needJsonFlag}} + {{- if .CanUseJson}} cmd.Flags().Var(&{{.CamelName}}Json, "json", `either inline JSON string or @path/to/file.json with request body`) {{- end}} {{$method := .}} @@ -142,9 +142,9 @@ func new{{.PascalName}}() *cobra.Command { {{if $hasRequiredArgs }} cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs({{len .Request.RequiredFields}}) - {{- if .CanSetRequiredFieldsFromJson }} + {{- if and .CanUseJson $hasRequiredRequestBodyFields }} if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) + check = cobra.ExactArgs({{len .Request.RequiredPathFields}}) } {{- end }} return check(cmd, args) @@ -155,14 +155,16 @@ func new{{.PascalName}}() *cobra.Command { ctx := cmd.Context() {{if .Service.IsAccounts}}a := root.AccountClient(ctx){{else}}w := root.WorkspaceClient(ctx){{end}} {{- if .Request }} - {{ if $needJsonFlag }} + {{ if .CanUseJson }} if cmd.Flags().Changed("json") { err = {{.CamelName}}Json.Unmarshal(&{{.CamelName}}Req) if err != nil { return err } - }{{end}}{{if .CanSetRequiredFieldsFromJson }} else { - {{- end }} + }{{end}}{{ if .MustUseJson }}else { + return fmt.Errorf("please provide command input in JSON format by specifying the --json flag") + }{{- end}} + {{- if (not .MustUseJson) }} {{- if $hasIdPrompt}} if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) @@ -182,22 +184,18 @@ func new{{.PascalName}}() *cobra.Command { return fmt.Errorf("expected to have {{range .Request.RequiredFields}}{{.Summary | trimSuffix "." | lower}}{{end}}") } {{- end -}} + {{$method := .}} - {{- if and .Request.IsAllRequiredFieldsPrimitive (not .IsJsonOnly) -}} - {{- range $arg, $field := .Request.RequiredFields}} - {{if not $field.Entity.IsString -}} - _, err = fmt.Sscan(args[{{$arg}}], &{{$method.CamelName}}Req.{{$field.PascalName}}) - if err != nil { - return fmt.Errorf("invalid {{$field.ConstantName}}: %s", args[{{$arg}}]) - }{{else -}} - {{$method.CamelName}}Req.{{$field.PascalName}} = args[{{$arg}}] - {{- end -}}{{end}} - {{- else -}} - return fmt.Errorf("please provide command input in JSON format by specifying the --json flag") + {{- range $arg, $field := .Request.RequiredFields}} + {{if not $field.Entity.IsString -}} + _, err = fmt.Sscan(args[{{$arg}}], &{{$method.CamelName}}Req.{{$field.PascalName}}) + if err != nil { + return fmt.Errorf("invalid {{$field.ConstantName}}: %s", args[{{$arg}}]) + }{{else -}} + {{$method.CamelName}}Req.{{$field.PascalName}} = args[{{$arg}}] + {{- end -}} {{- end -}} - {{if .CanSetRequiredFieldsFromJson }} - } - {{end }} + {{- end}} {{end}} {{if $wait -}} wait, err := {{if .Service.IsAccounts}}a{{else}}w{{end}}.{{.Service.PascalName}}.{{.PascalName}}(ctx{{if .Request}}, {{.CamelName}}Req{{end}}) diff --git a/cmd/account/groups/groups.go b/cmd/account/groups/groups.go index 2ecaa3a70b..407f46a974 100755 --- a/cmd/account/groups/groups.go +++ b/cmd/account/groups/groups.go @@ -79,9 +79,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -95,7 +92,6 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { } response, err := a.Groups.Create(ctx, createReq) @@ -282,10 +278,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq iam.ListAccountGroupsRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listReq.Attributes, "attributes", listReq.Attributes, `Comma-separated list of attributes to return in response.`) cmd.Flags().IntVar(&listReq.Count, "count", listReq.Count, `Desired number of results per page.`) @@ -305,9 +299,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -316,14 +307,6 @@ func newList() *cobra.Command { ctx := cmd.Context() a := root.AccountClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := a.Groups.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/account/log-delivery/log-delivery.go b/cmd/account/log-delivery/log-delivery.go index 6323e0ddd0..0c7e314160 100755 --- a/cmd/account/log-delivery/log-delivery.go +++ b/cmd/account/log-delivery/log-delivery.go @@ -147,9 +147,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -163,7 +160,6 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { } response, err := a.LogDelivery.Create(ctx, createReq) @@ -278,10 +274,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq billing.ListLogDeliveryRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listReq.CredentialsId, "credentials-id", listReq.CredentialsId, `Filter by credential configuration ID.`) cmd.Flags().Var(&listReq.Status, "status", `Filter by status ENABLED or DISABLED.`) @@ -298,9 +292,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -309,14 +300,6 @@ func newList() *cobra.Command { ctx := cmd.Context() a := root.AccountClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := a.LogDelivery.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/account/metastores/metastores.go b/cmd/account/metastores/metastores.go index 726b779d88..30be31ba1c 100755 --- a/cmd/account/metastores/metastores.go +++ b/cmd/account/metastores/metastores.go @@ -64,9 +64,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -80,7 +77,6 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { } response, err := a.Metastores.Create(ctx, createReq) diff --git a/cmd/account/networks/networks.go b/cmd/account/networks/networks.go index f481ffdbd7..6357dd1936 100755 --- a/cmd/account/networks/networks.go +++ b/cmd/account/networks/networks.go @@ -72,9 +72,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -88,9 +85,8 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { - createReq.NetworkName = args[0] } + createReq.NetworkName = args[0] response, err := a.Networks.Create(ctx, createReq) if err != nil { diff --git a/cmd/account/o-auth-enrollment/o-auth-enrollment.go b/cmd/account/o-auth-enrollment/o-auth-enrollment.go index 91fdfa0a7f..c2f82cd62c 100755 --- a/cmd/account/o-auth-enrollment/o-auth-enrollment.go +++ b/cmd/account/o-auth-enrollment/o-auth-enrollment.go @@ -5,7 +5,6 @@ package o_auth_enrollment import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" - "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/oauth2" "github.com/spf13/cobra" ) @@ -50,10 +49,8 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq oauth2.CreateOAuthEnrollment - var createJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().BoolVar(&createReq.EnableAllPublishedApps, "enable-all-published-apps", createReq.EnableAllPublishedApps, `If true, enable OAuth for all the published applications in the account.`) @@ -75,9 +72,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -86,14 +80,6 @@ func newCreate() *cobra.Command { ctx := cmd.Context() a := root.AccountClient(ctx) - if cmd.Flags().Changed("json") { - err = createJson.Unmarshal(&createReq) - if err != nil { - return err - } - } else { - } - err = a.OAuthEnrollment.Create(ctx, createReq) if err != nil { return err diff --git a/cmd/account/o-auth-published-apps/o-auth-published-apps.go b/cmd/account/o-auth-published-apps/o-auth-published-apps.go index 640e8a4c03..b611724d4f 100755 --- a/cmd/account/o-auth-published-apps/o-auth-published-apps.go +++ b/cmd/account/o-auth-published-apps/o-auth-published-apps.go @@ -5,7 +5,6 @@ package o_auth_published_apps import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" - "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/oauth2" "github.com/spf13/cobra" ) @@ -49,10 +48,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq oauth2.ListOAuthPublishedAppsRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().Int64Var(&listReq.PageSize, "page-size", listReq.PageSize, `The max number of OAuth published apps to return.`) cmd.Flags().StringVar(&listReq.PageToken, "page-token", listReq.PageToken, `A token that can be used to get the next page of results.`) @@ -67,9 +64,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -78,14 +72,6 @@ func newList() *cobra.Command { ctx := cmd.Context() a := root.AccountClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := a.OAuthPublishedApps.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/account/private-access/private-access.go b/cmd/account/private-access/private-access.go index 9cbc092901..c626bc9ee0 100755 --- a/cmd/account/private-access/private-access.go +++ b/cmd/account/private-access/private-access.go @@ -81,9 +81,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -97,10 +94,9 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { - createReq.PrivateAccessSettingsName = args[0] - createReq.Region = args[1] } + createReq.PrivateAccessSettingsName = args[0] + createReq.Region = args[1] response, err := a.PrivateAccess.Create(ctx, createReq) if err != nil { diff --git a/cmd/account/published-app-integration/published-app-integration.go b/cmd/account/published-app-integration/published-app-integration.go index 9b29d53d8e..9fe4e6e88f 100755 --- a/cmd/account/published-app-integration/published-app-integration.go +++ b/cmd/account/published-app-integration/published-app-integration.go @@ -69,9 +69,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -85,7 +82,6 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { } response, err := a.PublishedAppIntegration.Create(ctx, createReq) diff --git a/cmd/account/service-principals/service-principals.go b/cmd/account/service-principals/service-principals.go index be210b35e2..06fc690c7e 100755 --- a/cmd/account/service-principals/service-principals.go +++ b/cmd/account/service-principals/service-principals.go @@ -77,9 +77,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -93,7 +90,6 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { } response, err := a.ServicePrincipals.Create(ctx, createReq) @@ -281,10 +277,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq iam.ListAccountServicePrincipalsRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listReq.Attributes, "attributes", listReq.Attributes, `Comma-separated list of attributes to return in response.`) cmd.Flags().IntVar(&listReq.Count, "count", listReq.Count, `Desired number of results per page.`) @@ -304,9 +298,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -315,14 +306,6 @@ func newList() *cobra.Command { ctx := cmd.Context() a := root.AccountClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := a.ServicePrincipals.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/account/settings/settings.go b/cmd/account/settings/settings.go index 4e98119dd9..09794488d3 100755 --- a/cmd/account/settings/settings.go +++ b/cmd/account/settings/settings.go @@ -197,9 +197,6 @@ func newUpdatePersonalComputeSetting() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -213,7 +210,6 @@ func newUpdatePersonalComputeSetting() *cobra.Command { if err != nil { return err } - } else { } response, err := a.Settings.UpdatePersonalComputeSetting(ctx, updatePersonalComputeSettingReq) diff --git a/cmd/account/users/users.go b/cmd/account/users/users.go index c826ab0def..97e9c31f3e 100755 --- a/cmd/account/users/users.go +++ b/cmd/account/users/users.go @@ -85,9 +85,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -101,7 +98,6 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { } response, err := a.Users.Create(ctx, createReq) @@ -289,10 +285,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq iam.ListAccountUsersRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listReq.Attributes, "attributes", listReq.Attributes, `Comma-separated list of attributes to return in response.`) cmd.Flags().IntVar(&listReq.Count, "count", listReq.Count, `Desired number of results per page.`) @@ -312,9 +306,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -323,14 +314,6 @@ func newList() *cobra.Command { ctx := cmd.Context() a := root.AccountClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := a.Users.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/account/vpc-endpoints/vpc-endpoints.go b/cmd/account/vpc-endpoints/vpc-endpoints.go index 5112b48d78..20efa27d25 100755 --- a/cmd/account/vpc-endpoints/vpc-endpoints.go +++ b/cmd/account/vpc-endpoints/vpc-endpoints.go @@ -79,9 +79,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -95,9 +92,8 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { - createReq.VpcEndpointName = args[0] } + createReq.VpcEndpointName = args[0] response, err := a.VpcEndpoints.Create(ctx, createReq) if err != nil { diff --git a/cmd/account/workspaces/workspaces.go b/cmd/account/workspaces/workspaces.go index 60142a8a07..af1c207707 100755 --- a/cmd/account/workspaces/workspaces.go +++ b/cmd/account/workspaces/workspaces.go @@ -100,9 +100,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -116,9 +113,8 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { - createReq.WorkspaceName = args[0] } + createReq.WorkspaceName = args[0] wait, err := a.Workspaces.Create(ctx, createReq) if err != nil { diff --git a/cmd/workspace/catalogs/catalogs.go b/cmd/workspace/catalogs/catalogs.go index 462b645009..cec03dc2f1 100755 --- a/cmd/workspace/catalogs/catalogs.go +++ b/cmd/workspace/catalogs/catalogs.go @@ -77,9 +77,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -93,9 +90,8 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { - createReq.Name = args[0] } + createReq.Name = args[0] response, err := w.Catalogs.Create(ctx, createReq) if err != nil { diff --git a/cmd/workspace/clean-rooms/clean-rooms.go b/cmd/workspace/clean-rooms/clean-rooms.go index 1eab2fb3f1..05a1141d2d 100755 --- a/cmd/workspace/clean-rooms/clean-rooms.go +++ b/cmd/workspace/clean-rooms/clean-rooms.go @@ -250,10 +250,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq sharing.ListCleanRoomsRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().IntVar(&listReq.MaxResults, "max-results", listReq.MaxResults, `Maximum number of clean rooms to return.`) cmd.Flags().StringVar(&listReq.PageToken, "page-token", listReq.PageToken, `Pagination token to go to next page based on previous query.`) @@ -270,9 +268,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -281,14 +276,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.CleanRooms.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/workspace/cluster-policies/cluster-policies.go b/cmd/workspace/cluster-policies/cluster-policies.go index 0e30919453..f0743573fe 100755 --- a/cmd/workspace/cluster-policies/cluster-policies.go +++ b/cmd/workspace/cluster-policies/cluster-policies.go @@ -71,10 +71,8 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq compute.CreatePolicy - var createJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.Definition, "definition", createReq.Definition, `Policy definition document expressed in Databricks Cluster Policy Definition Language.`) cmd.Flags().StringVar(&createReq.Description, "description", createReq.Description, `Additional human-readable description of the cluster policy.`) @@ -92,9 +90,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -103,14 +98,7 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = createJson.Unmarshal(&createReq) - if err != nil { - return err - } - } else { - createReq.Name = args[0] - } + createReq.Name = args[0] response, err := w.ClusterPolicies.Create(ctx, createReq) if err != nil { @@ -150,10 +138,8 @@ func newDelete() *cobra.Command { cmd := &cobra.Command{} var deleteReq compute.DeletePolicy - var deleteJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&deleteJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete POLICY_ID" cmd.Short = `Delete a cluster policy.` @@ -169,31 +155,24 @@ func newDelete() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = deleteJson.Unmarshal(&deleteReq) + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No POLICY_ID argument specified. Loading names for Cluster Policies drop-down." + names, err := w.ClusterPolicies.PolicyNameToPolicyIdMap(ctx, compute.ListClusterPoliciesRequest{}) + close(promptSpinner) if err != nil { - return err - } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No POLICY_ID argument specified. Loading names for Cluster Policies drop-down." - names, err := w.ClusterPolicies.PolicyNameToPolicyIdMap(ctx, compute.ListClusterPoliciesRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Cluster Policies drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The ID of the policy to delete") - if err != nil { - return err - } - args = append(args, id) + return fmt.Errorf("failed to load names for Cluster Policies drop-down. Please manually specify required arguments. Original error: %w", err) } - if len(args) != 1 { - return fmt.Errorf("expected to have the id of the policy to delete") + id, err := cmdio.Select(ctx, names, "The ID of the policy to delete") + if err != nil { + return err } - deleteReq.PolicyId = args[0] + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have the id of the policy to delete") } + deleteReq.PolicyId = args[0] err = w.ClusterPolicies.Delete(ctx, deleteReq) if err != nil { @@ -233,10 +212,8 @@ func newEdit() *cobra.Command { cmd := &cobra.Command{} var editReq compute.EditPolicy - var editJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&editJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&editReq.Definition, "definition", editReq.Definition, `Policy definition document expressed in Databricks Cluster Policy Definition Language.`) cmd.Flags().StringVar(&editReq.Description, "description", editReq.Description, `Additional human-readable description of the cluster policy.`) @@ -255,9 +232,6 @@ func newEdit() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -266,15 +240,8 @@ func newEdit() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = editJson.Unmarshal(&editReq) - if err != nil { - return err - } - } else { - editReq.PolicyId = args[0] - editReq.Name = args[1] - } + editReq.PolicyId = args[0] + editReq.Name = args[1] err = w.ClusterPolicies.Edit(ctx, editReq) if err != nil { @@ -534,10 +501,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq compute.ListClusterPoliciesRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().Var(&listReq.SortColumn, "sort-column", `The cluster policy attribute to sort by.`) cmd.Flags().Var(&listReq.SortOrder, "sort-order", `The order in which the policies get listed.`) @@ -552,9 +517,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -563,14 +525,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.ClusterPolicies.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/workspace/clusters/clusters.go b/cmd/workspace/clusters/clusters.go index 07effe090f..6a9fe8aa8f 100755 --- a/cmd/workspace/clusters/clusters.go +++ b/cmd/workspace/clusters/clusters.go @@ -75,10 +75,8 @@ func newChangeOwner() *cobra.Command { cmd := &cobra.Command{} var changeOwnerReq compute.ChangeClusterOwner - var changeOwnerJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&changeOwnerJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "change-owner CLUSTER_ID OWNER_USERNAME" cmd.Short = `Change cluster owner.` @@ -91,9 +89,6 @@ func newChangeOwner() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -102,15 +97,8 @@ func newChangeOwner() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = changeOwnerJson.Unmarshal(&changeOwnerReq) - if err != nil { - return err - } - } else { - changeOwnerReq.ClusterId = args[0] - changeOwnerReq.OwnerUsername = args[1] - } + changeOwnerReq.ClusterId = args[0] + changeOwnerReq.OwnerUsername = args[1] err = w.Clusters.ChangeOwner(ctx, changeOwnerReq) if err != nil { @@ -205,9 +193,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -221,9 +206,8 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { - createReq.SparkVersion = args[0] } + createReq.SparkVersion = args[0] wait, err := w.Clusters.Create(ctx, createReq) if err != nil { @@ -275,7 +259,6 @@ func newDelete() *cobra.Command { cmd := &cobra.Command{} var deleteReq compute.DeleteCluster - var deleteJson flags.JsonFlag var deleteSkipWait bool var deleteTimeout time.Duration @@ -283,7 +266,6 @@ func newDelete() *cobra.Command { cmd.Flags().BoolVar(&deleteSkipWait, "no-wait", deleteSkipWait, `do not wait to reach TERMINATED state`) cmd.Flags().DurationVar(&deleteTimeout, "timeout", 20*time.Minute, `maximum amount of time to reach TERMINATED state`) // TODO: short flags - cmd.Flags().Var(&deleteJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete CLUSTER_ID" cmd.Short = `Terminate cluster.` @@ -301,31 +283,24 @@ func newDelete() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = deleteJson.Unmarshal(&deleteReq) + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) if err != nil { - return err - } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The cluster to be terminated") - if err != nil { - return err - } - args = append(args, id) + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) } - if len(args) != 1 { - return fmt.Errorf("expected to have the cluster to be terminated") + id, err := cmdio.Select(ctx, names, "The cluster to be terminated") + if err != nil { + return err } - deleteReq.ClusterId = args[0] + args = append(args, id) } + if len(args) != 1 { + return fmt.Errorf("expected to have the cluster to be terminated") + } + deleteReq.ClusterId = args[0] wait, err := w.Clusters.Delete(ctx, deleteReq) if err != nil { @@ -436,9 +411,6 @@ func newEdit() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -452,10 +424,9 @@ func newEdit() *cobra.Command { if err != nil { return err } - } else { - editReq.ClusterId = args[0] - editReq.SparkVersion = args[1] } + editReq.ClusterId = args[0] + editReq.SparkVersion = args[1] wait, err := w.Clusters.Edit(ctx, editReq) if err != nil { @@ -539,26 +510,25 @@ func newEvents() *cobra.Command { if err != nil { return err } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The ID of the cluster to retrieve events about") - if err != nil { - return err - } - args = append(args, id) + } + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) } - if len(args) != 1 { - return fmt.Errorf("expected to have the id of the cluster to retrieve events about") + id, err := cmdio.Select(ctx, names, "The ID of the cluster to retrieve events about") + if err != nil { + return err } - eventsReq.ClusterId = args[0] + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have the id of the cluster to retrieve events about") } + eventsReq.ClusterId = args[0] response, err := w.Clusters.EventsAll(ctx, eventsReq) if err != nil { @@ -824,10 +794,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq compute.ListClustersRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listReq.CanUseClient, "can-use-client", listReq.CanUseClient, `Filter clusters based on what type of client it can be used for.`) @@ -849,9 +817,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -860,14 +825,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.Clusters.ListAll(ctx, listReq) if err != nil { return err @@ -1004,10 +961,8 @@ func newPermanentDelete() *cobra.Command { cmd := &cobra.Command{} var permanentDeleteReq compute.PermanentDeleteCluster - var permanentDeleteJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&permanentDeleteJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "permanent-delete CLUSTER_ID" cmd.Short = `Permanently delete cluster.` @@ -1027,31 +982,24 @@ func newPermanentDelete() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = permanentDeleteJson.Unmarshal(&permanentDeleteReq) + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) if err != nil { - return err - } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The cluster to be deleted") - if err != nil { - return err - } - args = append(args, id) + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) } - if len(args) != 1 { - return fmt.Errorf("expected to have the cluster to be deleted") + id, err := cmdio.Select(ctx, names, "The cluster to be deleted") + if err != nil { + return err } - permanentDeleteReq.ClusterId = args[0] + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have the cluster to be deleted") } + permanentDeleteReq.ClusterId = args[0] err = w.Clusters.PermanentDelete(ctx, permanentDeleteReq) if err != nil { @@ -1091,10 +1039,8 @@ func newPin() *cobra.Command { cmd := &cobra.Command{} var pinReq compute.PinCluster - var pinJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&pinJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "pin CLUSTER_ID" cmd.Short = `Pin cluster.` @@ -1111,31 +1057,24 @@ func newPin() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = pinJson.Unmarshal(&pinReq) + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) if err != nil { - return err - } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "") - if err != nil { - return err - } - args = append(args, id) + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) } - if len(args) != 1 { - return fmt.Errorf("expected to have ") + id, err := cmdio.Select(ctx, names, "") + if err != nil { + return err } - pinReq.ClusterId = args[0] + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have ") } + pinReq.ClusterId = args[0] err = w.Clusters.Pin(ctx, pinReq) if err != nil { @@ -1207,26 +1146,25 @@ func newResize() *cobra.Command { if err != nil { return err } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The cluster to be resized") - if err != nil { - return err - } - args = append(args, id) + } + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) } - if len(args) != 1 { - return fmt.Errorf("expected to have the cluster to be resized") + id, err := cmdio.Select(ctx, names, "The cluster to be resized") + if err != nil { + return err } - resizeReq.ClusterId = args[0] + args = append(args, id) } + if len(args) != 1 { + return fmt.Errorf("expected to have the cluster to be resized") + } + resizeReq.ClusterId = args[0] wait, err := w.Clusters.Resize(ctx, resizeReq) if err != nil { @@ -1278,7 +1216,6 @@ func newRestart() *cobra.Command { cmd := &cobra.Command{} var restartReq compute.RestartCluster - var restartJson flags.JsonFlag var restartSkipWait bool var restartTimeout time.Duration @@ -1286,7 +1223,6 @@ func newRestart() *cobra.Command { cmd.Flags().BoolVar(&restartSkipWait, "no-wait", restartSkipWait, `do not wait to reach RUNNING state`) cmd.Flags().DurationVar(&restartTimeout, "timeout", 20*time.Minute, `maximum amount of time to reach RUNNING state`) // TODO: short flags - cmd.Flags().Var(&restartJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&restartReq.RestartUser, "restart-user", restartReq.RestartUser, `.`) @@ -1304,31 +1240,24 @@ func newRestart() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = restartJson.Unmarshal(&restartReq) + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) if err != nil { - return err - } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The cluster to be started") - if err != nil { - return err - } - args = append(args, id) + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) } - if len(args) != 1 { - return fmt.Errorf("expected to have the cluster to be started") + id, err := cmdio.Select(ctx, names, "The cluster to be started") + if err != nil { + return err } - restartReq.ClusterId = args[0] + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have the cluster to be started") } + restartReq.ClusterId = args[0] wait, err := w.Clusters.Restart(ctx, restartReq) if err != nil { @@ -1513,7 +1442,6 @@ func newStart() *cobra.Command { cmd := &cobra.Command{} var startReq compute.StartCluster - var startJson flags.JsonFlag var startSkipWait bool var startTimeout time.Duration @@ -1521,7 +1449,6 @@ func newStart() *cobra.Command { cmd.Flags().BoolVar(&startSkipWait, "no-wait", startSkipWait, `do not wait to reach RUNNING state`) cmd.Flags().DurationVar(&startTimeout, "timeout", 20*time.Minute, `maximum amount of time to reach RUNNING state`) // TODO: short flags - cmd.Flags().Var(&startJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "start CLUSTER_ID" cmd.Short = `Start terminated cluster.` @@ -1543,31 +1470,24 @@ func newStart() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = startJson.Unmarshal(&startReq) + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) if err != nil { - return err - } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The cluster to be started") - if err != nil { - return err - } - args = append(args, id) + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) } - if len(args) != 1 { - return fmt.Errorf("expected to have the cluster to be started") + id, err := cmdio.Select(ctx, names, "The cluster to be started") + if err != nil { + return err } - startReq.ClusterId = args[0] + args = append(args, id) } + if len(args) != 1 { + return fmt.Errorf("expected to have the cluster to be started") + } + startReq.ClusterId = args[0] wait, err := w.Clusters.Start(ctx, startReq) if err != nil { @@ -1619,10 +1539,8 @@ func newUnpin() *cobra.Command { cmd := &cobra.Command{} var unpinReq compute.UnpinCluster - var unpinJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&unpinJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "unpin CLUSTER_ID" cmd.Short = `Unpin cluster.` @@ -1639,31 +1557,24 @@ func newUnpin() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = unpinJson.Unmarshal(&unpinReq) + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) if err != nil { - return err - } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "") - if err != nil { - return err - } - args = append(args, id) + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) } - if len(args) != 1 { - return fmt.Errorf("expected to have ") + id, err := cmdio.Select(ctx, names, "") + if err != nil { + return err } - unpinReq.ClusterId = args[0] + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have ") } + unpinReq.ClusterId = args[0] err = w.Clusters.Unpin(ctx, unpinReq) if err != nil { diff --git a/cmd/workspace/dashboards/dashboards.go b/cmd/workspace/dashboards/dashboards.go index 2335ee28ea..9e3d91a735 100755 --- a/cmd/workspace/dashboards/dashboards.go +++ b/cmd/workspace/dashboards/dashboards.go @@ -66,9 +66,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -272,10 +269,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq sql.ListDashboardsRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().Var(&listReq.Order, "order", `Name of dashboard attribute to order by.`) cmd.Flags().IntVar(&listReq.Page, "page", listReq.Page, `Page number to retrieve.`) @@ -292,9 +287,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -303,14 +295,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.Dashboards.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/workspace/experiments/experiments.go b/cmd/workspace/experiments/experiments.go index 13087029d9..45cf947fcd 100755 --- a/cmd/workspace/experiments/experiments.go +++ b/cmd/workspace/experiments/experiments.go @@ -79,9 +79,6 @@ func newCreateExperiment() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -95,9 +92,8 @@ func newCreateExperiment() *cobra.Command { if err != nil { return err } - } else { - createExperimentReq.Name = args[0] } + createExperimentReq.Name = args[0] response, err := w.Experiments.CreateExperiment(ctx, createExperimentReq) if err != nil { @@ -160,9 +156,6 @@ func newCreateRun() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -176,7 +169,6 @@ func newCreateRun() *cobra.Command { if err != nil { return err } - } else { } response, err := w.Experiments.CreateRun(ctx, createRunReq) @@ -217,10 +209,8 @@ func newDeleteExperiment() *cobra.Command { cmd := &cobra.Command{} var deleteExperimentReq ml.DeleteExperiment - var deleteExperimentJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&deleteExperimentJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete-experiment EXPERIMENT_ID" cmd.Short = `Delete an experiment.` @@ -234,9 +224,6 @@ func newDeleteExperiment() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -245,14 +232,7 @@ func newDeleteExperiment() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = deleteExperimentJson.Unmarshal(&deleteExperimentReq) - if err != nil { - return err - } - } else { - deleteExperimentReq.ExperimentId = args[0] - } + deleteExperimentReq.ExperimentId = args[0] err = w.Experiments.DeleteExperiment(ctx, deleteExperimentReq) if err != nil { @@ -292,10 +272,8 @@ func newDeleteRun() *cobra.Command { cmd := &cobra.Command{} var deleteRunReq ml.DeleteRun - var deleteRunJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&deleteRunJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete-run RUN_ID" cmd.Short = `Delete a run.` @@ -307,9 +285,6 @@ func newDeleteRun() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -318,14 +293,7 @@ func newDeleteRun() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = deleteRunJson.Unmarshal(&deleteRunReq) - if err != nil { - return err - } - } else { - deleteRunReq.RunId = args[0] - } + deleteRunReq.RunId = args[0] err = w.Experiments.DeleteRun(ctx, deleteRunReq) if err != nil { @@ -365,10 +333,8 @@ func newDeleteRuns() *cobra.Command { cmd := &cobra.Command{} var deleteRunsReq ml.DeleteRuns - var deleteRunsJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&deleteRunsJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().IntVar(&deleteRunsReq.MaxRuns, "max-runs", deleteRunsReq.MaxRuns, `An optional positive integer indicating the maximum number of runs to delete.`) @@ -383,9 +349,6 @@ func newDeleteRuns() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -394,17 +357,10 @@ func newDeleteRuns() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = deleteRunsJson.Unmarshal(&deleteRunsReq) - if err != nil { - return err - } - } else { - deleteRunsReq.ExperimentId = args[0] - _, err = fmt.Sscan(args[1], &deleteRunsReq.MaxTimestampMillis) - if err != nil { - return fmt.Errorf("invalid MAX_TIMESTAMP_MILLIS: %s", args[1]) - } + deleteRunsReq.ExperimentId = args[0] + _, err = fmt.Sscan(args[1], &deleteRunsReq.MaxTimestampMillis) + if err != nil { + return fmt.Errorf("invalid MAX_TIMESTAMP_MILLIS: %s", args[1]) } response, err := w.Experiments.DeleteRuns(ctx, deleteRunsReq) @@ -445,10 +401,8 @@ func newDeleteTag() *cobra.Command { cmd := &cobra.Command{} var deleteTagReq ml.DeleteTag - var deleteTagJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&deleteTagJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete-tag RUN_ID KEY" cmd.Short = `Delete a tag.` @@ -461,9 +415,6 @@ func newDeleteTag() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -472,15 +423,8 @@ func newDeleteTag() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = deleteTagJson.Unmarshal(&deleteTagReq) - if err != nil { - return err - } - } else { - deleteTagReq.RunId = args[0] - deleteTagReq.Key = args[1] - } + deleteTagReq.RunId = args[0] + deleteTagReq.Key = args[1] err = w.Experiments.DeleteTag(ctx, deleteTagReq) if err != nil { @@ -907,10 +851,8 @@ func newListArtifacts() *cobra.Command { cmd := &cobra.Command{} var listArtifactsReq ml.ListArtifactsRequest - var listArtifactsJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listArtifactsJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listArtifactsReq.PageToken, "page-token", listArtifactsReq.PageToken, `Token indicating the page of artifact results to fetch.`) cmd.Flags().StringVar(&listArtifactsReq.Path, "path", listArtifactsReq.Path, `Filter artifacts matching this path (a relative path from the root artifact directory).`) @@ -928,9 +870,6 @@ func newListArtifacts() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -939,14 +878,6 @@ func newListArtifacts() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listArtifactsJson.Unmarshal(&listArtifactsReq) - if err != nil { - return err - } - } else { - } - response, err := w.Experiments.ListArtifactsAll(ctx, listArtifactsReq) if err != nil { return err @@ -985,10 +916,8 @@ func newListExperiments() *cobra.Command { cmd := &cobra.Command{} var listExperimentsReq ml.ListExperimentsRequest - var listExperimentsJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listExperimentsJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().IntVar(&listExperimentsReq.MaxResults, "max-results", listExperimentsReq.MaxResults, `Maximum number of experiments desired.`) cmd.Flags().StringVar(&listExperimentsReq.PageToken, "page-token", listExperimentsReq.PageToken, `Token indicating the page of experiments to fetch.`) @@ -1004,9 +933,6 @@ func newListExperiments() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1015,14 +941,6 @@ func newListExperiments() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listExperimentsJson.Unmarshal(&listExperimentsReq) - if err != nil { - return err - } - } else { - } - response, err := w.Experiments.ListExperimentsAll(ctx, listExperimentsReq) if err != nil { return err @@ -1117,9 +1035,6 @@ func newLogBatch() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1133,7 +1048,6 @@ func newLogBatch() *cobra.Command { if err != nil { return err } - } else { } err = w.Experiments.LogBatch(ctx, logBatchReq) @@ -1193,9 +1107,6 @@ func newLogInputs() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1209,7 +1120,6 @@ func newLogInputs() *cobra.Command { if err != nil { return err } - } else { } err = w.Experiments.LogInputs(ctx, logInputsReq) @@ -1250,10 +1160,8 @@ func newLogMetric() *cobra.Command { cmd := &cobra.Command{} var logMetricReq ml.LogMetric - var logMetricJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&logMetricJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&logMetricReq.RunId, "run-id", logMetricReq.RunId, `ID of the run under which to log the metric.`) cmd.Flags().StringVar(&logMetricReq.RunUuid, "run-uuid", logMetricReq.RunUuid, `[Deprecated, use run_id instead] ID of the run under which to log the metric.`) @@ -1271,9 +1179,6 @@ func newLogMetric() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1282,21 +1187,14 @@ func newLogMetric() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = logMetricJson.Unmarshal(&logMetricReq) - if err != nil { - return err - } - } else { - logMetricReq.Key = args[0] - _, err = fmt.Sscan(args[1], &logMetricReq.Value) - if err != nil { - return fmt.Errorf("invalid VALUE: %s", args[1]) - } - _, err = fmt.Sscan(args[2], &logMetricReq.Timestamp) - if err != nil { - return fmt.Errorf("invalid TIMESTAMP: %s", args[2]) - } + logMetricReq.Key = args[0] + _, err = fmt.Sscan(args[1], &logMetricReq.Value) + if err != nil { + return fmt.Errorf("invalid VALUE: %s", args[1]) + } + _, err = fmt.Sscan(args[2], &logMetricReq.Timestamp) + if err != nil { + return fmt.Errorf("invalid TIMESTAMP: %s", args[2]) } err = w.Experiments.LogMetric(ctx, logMetricReq) @@ -1337,10 +1235,8 @@ func newLogModel() *cobra.Command { cmd := &cobra.Command{} var logModelReq ml.LogModel - var logModelJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&logModelJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&logModelReq.ModelJson, "model-json", logModelReq.ModelJson, `MLmodel file in json format.`) cmd.Flags().StringVar(&logModelReq.RunId, "run-id", logModelReq.RunId, `ID of the run to log under.`) @@ -1356,9 +1252,6 @@ func newLogModel() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1367,14 +1260,6 @@ func newLogModel() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = logModelJson.Unmarshal(&logModelReq) - if err != nil { - return err - } - } else { - } - err = w.Experiments.LogModel(ctx, logModelReq) if err != nil { return err @@ -1413,10 +1298,8 @@ func newLogParam() *cobra.Command { cmd := &cobra.Command{} var logParamReq ml.LogParam - var logParamJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&logParamJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&logParamReq.RunId, "run-id", logParamReq.RunId, `ID of the run under which to log the param.`) cmd.Flags().StringVar(&logParamReq.RunUuid, "run-uuid", logParamReq.RunUuid, `[Deprecated, use run_id instead] ID of the run under which to log the param.`) @@ -1434,9 +1317,6 @@ func newLogParam() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1445,15 +1325,8 @@ func newLogParam() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = logParamJson.Unmarshal(&logParamReq) - if err != nil { - return err - } - } else { - logParamReq.Key = args[0] - logParamReq.Value = args[1] - } + logParamReq.Key = args[0] + logParamReq.Value = args[1] err = w.Experiments.LogParam(ctx, logParamReq) if err != nil { @@ -1493,10 +1366,8 @@ func newRestoreExperiment() *cobra.Command { cmd := &cobra.Command{} var restoreExperimentReq ml.RestoreExperiment - var restoreExperimentJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&restoreExperimentJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "restore-experiment EXPERIMENT_ID" cmd.Short = `Restores an experiment.` @@ -1513,9 +1384,6 @@ func newRestoreExperiment() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1524,14 +1392,7 @@ func newRestoreExperiment() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = restoreExperimentJson.Unmarshal(&restoreExperimentReq) - if err != nil { - return err - } - } else { - restoreExperimentReq.ExperimentId = args[0] - } + restoreExperimentReq.ExperimentId = args[0] err = w.Experiments.RestoreExperiment(ctx, restoreExperimentReq) if err != nil { @@ -1571,10 +1432,8 @@ func newRestoreRun() *cobra.Command { cmd := &cobra.Command{} var restoreRunReq ml.RestoreRun - var restoreRunJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&restoreRunJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "restore-run RUN_ID" cmd.Short = `Restore a run.` @@ -1586,9 +1445,6 @@ func newRestoreRun() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1597,14 +1453,7 @@ func newRestoreRun() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = restoreRunJson.Unmarshal(&restoreRunReq) - if err != nil { - return err - } - } else { - restoreRunReq.RunId = args[0] - } + restoreRunReq.RunId = args[0] err = w.Experiments.RestoreRun(ctx, restoreRunReq) if err != nil { @@ -1644,10 +1493,8 @@ func newRestoreRuns() *cobra.Command { cmd := &cobra.Command{} var restoreRunsReq ml.RestoreRuns - var restoreRunsJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&restoreRunsJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().IntVar(&restoreRunsReq.MaxRuns, "max-runs", restoreRunsReq.MaxRuns, `An optional positive integer indicating the maximum number of runs to restore.`) @@ -1662,9 +1509,6 @@ func newRestoreRuns() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1673,17 +1517,10 @@ func newRestoreRuns() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = restoreRunsJson.Unmarshal(&restoreRunsReq) - if err != nil { - return err - } - } else { - restoreRunsReq.ExperimentId = args[0] - _, err = fmt.Sscan(args[1], &restoreRunsReq.MinTimestampMillis) - if err != nil { - return fmt.Errorf("invalid MIN_TIMESTAMP_MILLIS: %s", args[1]) - } + restoreRunsReq.ExperimentId = args[0] + _, err = fmt.Sscan(args[1], &restoreRunsReq.MinTimestampMillis) + if err != nil { + return fmt.Errorf("invalid MIN_TIMESTAMP_MILLIS: %s", args[1]) } response, err := w.Experiments.RestoreRuns(ctx, restoreRunsReq) @@ -1745,9 +1582,6 @@ func newSearchExperiments() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1761,7 +1595,6 @@ func newSearchExperiments() *cobra.Command { if err != nil { return err } - } else { } response, err := w.Experiments.SearchExperimentsAll(ctx, searchExperimentsReq) @@ -1826,9 +1659,6 @@ func newSearchRuns() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1842,7 +1672,6 @@ func newSearchRuns() *cobra.Command { if err != nil { return err } - } else { } response, err := w.Experiments.SearchRunsAll(ctx, searchRunsReq) @@ -1883,10 +1712,8 @@ func newSetExperimentTag() *cobra.Command { cmd := &cobra.Command{} var setExperimentTagReq ml.SetExperimentTag - var setExperimentTagJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&setExperimentTagJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "set-experiment-tag EXPERIMENT_ID KEY VALUE" cmd.Short = `Set a tag.` @@ -1898,9 +1725,6 @@ func newSetExperimentTag() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1909,16 +1733,9 @@ func newSetExperimentTag() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = setExperimentTagJson.Unmarshal(&setExperimentTagReq) - if err != nil { - return err - } - } else { - setExperimentTagReq.ExperimentId = args[0] - setExperimentTagReq.Key = args[1] - setExperimentTagReq.Value = args[2] - } + setExperimentTagReq.ExperimentId = args[0] + setExperimentTagReq.Key = args[1] + setExperimentTagReq.Value = args[2] err = w.Experiments.SetExperimentTag(ctx, setExperimentTagReq) if err != nil { @@ -2030,10 +1847,8 @@ func newSetTag() *cobra.Command { cmd := &cobra.Command{} var setTagReq ml.SetTag - var setTagJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&setTagJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&setTagReq.RunId, "run-id", setTagReq.RunId, `ID of the run under which to log the tag.`) cmd.Flags().StringVar(&setTagReq.RunUuid, "run-uuid", setTagReq.RunUuid, `[Deprecated, use run_id instead] ID of the run under which to log the tag.`) @@ -2049,9 +1864,6 @@ func newSetTag() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -2060,15 +1872,8 @@ func newSetTag() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = setTagJson.Unmarshal(&setTagReq) - if err != nil { - return err - } - } else { - setTagReq.Key = args[0] - setTagReq.Value = args[1] - } + setTagReq.Key = args[0] + setTagReq.Value = args[1] err = w.Experiments.SetTag(ctx, setTagReq) if err != nil { @@ -2108,10 +1913,8 @@ func newUpdateExperiment() *cobra.Command { cmd := &cobra.Command{} var updateExperimentReq ml.UpdateExperiment - var updateExperimentJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&updateExperimentJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&updateExperimentReq.NewName, "new-name", updateExperimentReq.NewName, `If provided, the experiment's name is changed to the new name.`) @@ -2125,9 +1928,6 @@ func newUpdateExperiment() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -2136,14 +1936,7 @@ func newUpdateExperiment() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = updateExperimentJson.Unmarshal(&updateExperimentReq) - if err != nil { - return err - } - } else { - updateExperimentReq.ExperimentId = args[0] - } + updateExperimentReq.ExperimentId = args[0] err = w.Experiments.UpdateExperiment(ctx, updateExperimentReq) if err != nil { @@ -2255,10 +2048,8 @@ func newUpdateRun() *cobra.Command { cmd := &cobra.Command{} var updateRunReq ml.UpdateRun - var updateRunJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&updateRunJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().Int64Var(&updateRunReq.EndTime, "end-time", updateRunReq.EndTime, `Unix timestamp in milliseconds of when the run ended.`) cmd.Flags().StringVar(&updateRunReq.RunId, "run-id", updateRunReq.RunId, `ID of the run to update.`) @@ -2275,9 +2066,6 @@ func newUpdateRun() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -2286,14 +2074,6 @@ func newUpdateRun() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = updateRunJson.Unmarshal(&updateRunReq) - if err != nil { - return err - } - } else { - } - response, err := w.Experiments.UpdateRun(ctx, updateRunReq) if err != nil { return err diff --git a/cmd/workspace/external-locations/external-locations.go b/cmd/workspace/external-locations/external-locations.go index fd1b44e40e..2b9254f6b8 100755 --- a/cmd/workspace/external-locations/external-locations.go +++ b/cmd/workspace/external-locations/external-locations.go @@ -81,9 +81,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -97,11 +94,10 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { - createReq.Name = args[0] - createReq.Url = args[1] - createReq.CredentialName = args[2] } + createReq.Name = args[0] + createReq.Url = args[1] + createReq.CredentialName = args[2] response, err := w.ExternalLocations.Create(ctx, createReq) if err != nil { diff --git a/cmd/workspace/git-credentials/git-credentials.go b/cmd/workspace/git-credentials/git-credentials.go index 8d5c59ed88..831b6e238f 100755 --- a/cmd/workspace/git-credentials/git-credentials.go +++ b/cmd/workspace/git-credentials/git-credentials.go @@ -7,7 +7,6 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" - "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/workspace" "github.com/spf13/cobra" ) @@ -53,10 +52,8 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq workspace.CreateCredentials - var createJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.GitUsername, "git-username", createReq.GitUsername, `Git username.`) cmd.Flags().StringVar(&createReq.PersonalAccessToken, "personal-access-token", createReq.PersonalAccessToken, `The personal access token used to authenticate to the corresponding Git provider.`) @@ -74,9 +71,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -85,14 +79,7 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = createJson.Unmarshal(&createReq) - if err != nil { - return err - } - } else { - createReq.GitProvider = args[0] - } + createReq.GitProvider = args[0] response, err := w.GitCredentials.Create(ctx, createReq) if err != nil { diff --git a/cmd/workspace/global-init-scripts/global-init-scripts.go b/cmd/workspace/global-init-scripts/global-init-scripts.go index 12c49a513d..39335d73b0 100755 --- a/cmd/workspace/global-init-scripts/global-init-scripts.go +++ b/cmd/workspace/global-init-scripts/global-init-scripts.go @@ -7,7 +7,6 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" - "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/compute" "github.com/spf13/cobra" ) @@ -56,10 +55,8 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq compute.GlobalInitScriptCreateRequest - var createJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().BoolVar(&createReq.Enabled, "enabled", createReq.Enabled, `Specifies whether the script is enabled.`) cmd.Flags().IntVar(&createReq.Position, "position", createReq.Position, `The position of a global init script, where 0 represents the first script to run, 1 is the second script to run, in ascending order.`) @@ -74,9 +71,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -85,15 +79,8 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = createJson.Unmarshal(&createReq) - if err != nil { - return err - } - } else { - createReq.Name = args[0] - createReq.Script = args[1] - } + createReq.Name = args[0] + createReq.Script = args[1] response, err := w.GlobalInitScripts.Create(ctx, createReq) if err != nil { diff --git a/cmd/workspace/groups/groups.go b/cmd/workspace/groups/groups.go index 55d231fc5a..4ebf740dbf 100755 --- a/cmd/workspace/groups/groups.go +++ b/cmd/workspace/groups/groups.go @@ -79,9 +79,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -95,7 +92,6 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { } response, err := w.Groups.Create(ctx, createReq) @@ -282,10 +278,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq iam.ListGroupsRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listReq.Attributes, "attributes", listReq.Attributes, `Comma-separated list of attributes to return in response.`) cmd.Flags().IntVar(&listReq.Count, "count", listReq.Count, `Desired number of results per page.`) @@ -305,9 +299,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -316,14 +307,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.Groups.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/workspace/instance-pools/instance-pools.go b/cmd/workspace/instance-pools/instance-pools.go index b03542c0e5..e220dba330 100755 --- a/cmd/workspace/instance-pools/instance-pools.go +++ b/cmd/workspace/instance-pools/instance-pools.go @@ -92,9 +92,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -108,10 +105,9 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { - createReq.InstancePoolName = args[0] - createReq.NodeTypeId = args[1] } + createReq.InstancePoolName = args[0] + createReq.NodeTypeId = args[1] response, err := w.InstancePools.Create(ctx, createReq) if err != nil { @@ -151,10 +147,8 @@ func newDelete() *cobra.Command { cmd := &cobra.Command{} var deleteReq compute.DeleteInstancePool - var deleteJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&deleteJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete INSTANCE_POOL_ID" cmd.Short = `Delete an instance pool.` @@ -170,31 +164,24 @@ func newDelete() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = deleteJson.Unmarshal(&deleteReq) + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No INSTANCE_POOL_ID argument specified. Loading names for Instance Pools drop-down." + names, err := w.InstancePools.InstancePoolAndStatsInstancePoolNameToInstancePoolIdMap(ctx) + close(promptSpinner) if err != nil { - return err - } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No INSTANCE_POOL_ID argument specified. Loading names for Instance Pools drop-down." - names, err := w.InstancePools.InstancePoolAndStatsInstancePoolNameToInstancePoolIdMap(ctx) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Instance Pools drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The instance pool to be terminated") - if err != nil { - return err - } - args = append(args, id) + return fmt.Errorf("failed to load names for Instance Pools drop-down. Please manually specify required arguments. Original error: %w", err) } - if len(args) != 1 { - return fmt.Errorf("expected to have the instance pool to be terminated") + id, err := cmdio.Select(ctx, names, "The instance pool to be terminated") + if err != nil { + return err } - deleteReq.InstancePoolId = args[0] + args = append(args, id) } + if len(args) != 1 { + return fmt.Errorf("expected to have the instance pool to be terminated") + } + deleteReq.InstancePoolId = args[0] err = w.InstancePools.Delete(ctx, deleteReq) if err != nil { @@ -254,9 +241,6 @@ func newEdit() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -270,11 +254,10 @@ func newEdit() *cobra.Command { if err != nil { return err } - } else { - editReq.InstancePoolId = args[0] - editReq.InstancePoolName = args[1] - editReq.NodeTypeId = args[2] } + editReq.InstancePoolId = args[0] + editReq.InstancePoolName = args[1] + editReq.NodeTypeId = args[2] err = w.InstancePools.Edit(ctx, editReq) if err != nil { diff --git a/cmd/workspace/instance-profiles/instance-profiles.go b/cmd/workspace/instance-profiles/instance-profiles.go index 0922a5ae3b..f42828bf4a 100755 --- a/cmd/workspace/instance-profiles/instance-profiles.go +++ b/cmd/workspace/instance-profiles/instance-profiles.go @@ -5,7 +5,6 @@ package instance_profiles import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" - "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/compute" "github.com/spf13/cobra" ) @@ -51,10 +50,8 @@ func newAdd() *cobra.Command { cmd := &cobra.Command{} var addReq compute.AddInstanceProfile - var addJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&addJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&addReq.IamRoleArn, "iam-role-arn", addReq.IamRoleArn, `The AWS IAM role ARN of the role associated with the instance profile.`) cmd.Flags().BoolVar(&addReq.IsMetaInstanceProfile, "is-meta-instance-profile", addReq.IsMetaInstanceProfile, `Boolean flag indicating whether the instance profile should only be used in credential passthrough scenarios.`) @@ -71,9 +68,6 @@ func newAdd() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -82,14 +76,7 @@ func newAdd() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = addJson.Unmarshal(&addReq) - if err != nil { - return err - } - } else { - addReq.InstanceProfileArn = args[0] - } + addReq.InstanceProfileArn = args[0] err = w.InstanceProfiles.Add(ctx, addReq) if err != nil { @@ -129,10 +116,8 @@ func newEdit() *cobra.Command { cmd := &cobra.Command{} var editReq compute.InstanceProfile - var editJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&editJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&editReq.IamRoleArn, "iam-role-arn", editReq.IamRoleArn, `The AWS IAM role ARN of the role associated with the instance profile.`) cmd.Flags().BoolVar(&editReq.IsMetaInstanceProfile, "is-meta-instance-profile", editReq.IsMetaInstanceProfile, `Boolean flag indicating whether the instance profile should only be used in credential passthrough scenarios.`) @@ -161,9 +146,6 @@ func newEdit() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -172,14 +154,7 @@ func newEdit() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = editJson.Unmarshal(&editReq) - if err != nil { - return err - } - } else { - editReq.InstanceProfileArn = args[0] - } + editReq.InstanceProfileArn = args[0] err = w.InstanceProfiles.Edit(ctx, editReq) if err != nil { @@ -269,10 +244,8 @@ func newRemove() *cobra.Command { cmd := &cobra.Command{} var removeReq compute.RemoveInstanceProfile - var removeJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&removeJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "remove INSTANCE_PROFILE_ARN" cmd.Short = `Remove the instance profile.` @@ -287,9 +260,6 @@ func newRemove() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -298,14 +268,7 @@ func newRemove() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = removeJson.Unmarshal(&removeReq) - if err != nil { - return err - } - } else { - removeReq.InstanceProfileArn = args[0] - } + removeReq.InstanceProfileArn = args[0] err = w.InstanceProfiles.Remove(ctx, removeReq) if err != nil { diff --git a/cmd/workspace/jobs/jobs.go b/cmd/workspace/jobs/jobs.go index be0df694b0..d8f1f27643 100755 --- a/cmd/workspace/jobs/jobs.go +++ b/cmd/workspace/jobs/jobs.go @@ -66,10 +66,8 @@ func newCancelAllRuns() *cobra.Command { cmd := &cobra.Command{} var cancelAllRunsReq jobs.CancelAllRuns - var cancelAllRunsJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&cancelAllRunsJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().BoolVar(&cancelAllRunsReq.AllQueuedRuns, "all-queued-runs", cancelAllRunsReq.AllQueuedRuns, `Optional boolean parameter to cancel all queued runs.`) cmd.Flags().Int64Var(&cancelAllRunsReq.JobId, "job-id", cancelAllRunsReq.JobId, `The canonical identifier of the job to cancel all runs of.`) @@ -85,9 +83,6 @@ func newCancelAllRuns() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -96,14 +91,6 @@ func newCancelAllRuns() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = cancelAllRunsJson.Unmarshal(&cancelAllRunsReq) - if err != nil { - return err - } - } else { - } - err = w.Jobs.CancelAllRuns(ctx, cancelAllRunsReq) if err != nil { return err @@ -142,7 +129,6 @@ func newCancelRun() *cobra.Command { cmd := &cobra.Command{} var cancelRunReq jobs.CancelRun - var cancelRunJson flags.JsonFlag var cancelRunSkipWait bool var cancelRunTimeout time.Duration @@ -150,7 +136,6 @@ func newCancelRun() *cobra.Command { cmd.Flags().BoolVar(&cancelRunSkipWait, "no-wait", cancelRunSkipWait, `do not wait to reach TERMINATED or SKIPPED state`) cmd.Flags().DurationVar(&cancelRunTimeout, "timeout", 20*time.Minute, `maximum amount of time to reach TERMINATED or SKIPPED state`) // TODO: short flags - cmd.Flags().Var(&cancelRunJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "cancel-run RUN_ID" cmd.Short = `Cancel a run.` @@ -166,33 +151,26 @@ func newCancelRun() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = cancelRunJson.Unmarshal(&cancelRunReq) + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No RUN_ID argument specified. Loading names for Jobs drop-down." + names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) + close(promptSpinner) if err != nil { - return err - } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No RUN_ID argument specified. Loading names for Jobs drop-down." - names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "This field is required") - if err != nil { - return err - } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have this field is required") + return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) } - _, err = fmt.Sscan(args[0], &cancelRunReq.RunId) + id, err := cmdio.Select(ctx, names, "This field is required") if err != nil { - return fmt.Errorf("invalid RUN_ID: %s", args[0]) + return err } + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have this field is required") + } + _, err = fmt.Sscan(args[0], &cancelRunReq.RunId) + if err != nil { + return fmt.Errorf("invalid RUN_ID: %s", args[0]) } wait, err := w.Jobs.CancelRun(ctx, cancelRunReq) @@ -267,9 +245,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -325,10 +300,8 @@ func newDelete() *cobra.Command { cmd := &cobra.Command{} var deleteReq jobs.DeleteJob - var deleteJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&deleteJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete JOB_ID" cmd.Short = `Delete a job.` @@ -343,33 +316,26 @@ func newDelete() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = deleteJson.Unmarshal(&deleteReq) + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No JOB_ID argument specified. Loading names for Jobs drop-down." + names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) + close(promptSpinner) if err != nil { - return err - } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No JOB_ID argument specified. Loading names for Jobs drop-down." - names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The canonical identifier of the job to delete") - if err != nil { - return err - } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the canonical identifier of the job to delete") + return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) } - _, err = fmt.Sscan(args[0], &deleteReq.JobId) + id, err := cmdio.Select(ctx, names, "The canonical identifier of the job to delete") if err != nil { - return fmt.Errorf("invalid JOB_ID: %s", args[0]) + return err } + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have the canonical identifier of the job to delete") + } + _, err = fmt.Sscan(args[0], &deleteReq.JobId) + if err != nil { + return fmt.Errorf("invalid JOB_ID: %s", args[0]) } err = w.Jobs.Delete(ctx, deleteReq) @@ -410,10 +376,8 @@ func newDeleteRun() *cobra.Command { cmd := &cobra.Command{} var deleteRunReq jobs.DeleteRun - var deleteRunJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&deleteRunJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete-run RUN_ID" cmd.Short = `Delete a job run.` @@ -428,33 +392,26 @@ func newDeleteRun() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = deleteRunJson.Unmarshal(&deleteRunReq) + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No RUN_ID argument specified. Loading names for Jobs drop-down." + names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) + close(promptSpinner) if err != nil { - return err - } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No RUN_ID argument specified. Loading names for Jobs drop-down." - names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The canonical identifier of the run for which to retrieve the metadata") - if err != nil { - return err - } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the canonical identifier of the run for which to retrieve the metadata") + return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) } - _, err = fmt.Sscan(args[0], &deleteRunReq.RunId) + id, err := cmdio.Select(ctx, names, "The canonical identifier of the run for which to retrieve the metadata") if err != nil { - return fmt.Errorf("invalid RUN_ID: %s", args[0]) + return err } + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have the canonical identifier of the run for which to retrieve the metadata") + } + _, err = fmt.Sscan(args[0], &deleteRunReq.RunId) + if err != nil { + return fmt.Errorf("invalid RUN_ID: %s", args[0]) } err = w.Jobs.DeleteRun(ctx, deleteRunReq) @@ -964,10 +921,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq jobs.ListJobsRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().BoolVar(&listReq.ExpandTasks, "expand-tasks", listReq.ExpandTasks, `Whether to include task and cluster details in the response.`) cmd.Flags().IntVar(&listReq.Limit, "limit", listReq.Limit, `The number of jobs to return.`) @@ -985,9 +940,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -996,14 +948,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.Jobs.ListAll(ctx, listReq) if err != nil { return err @@ -1042,10 +986,8 @@ func newListRuns() *cobra.Command { cmd := &cobra.Command{} var listRunsReq jobs.ListRunsRequest - var listRunsJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listRunsJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().BoolVar(&listRunsReq.ActiveOnly, "active-only", listRunsReq.ActiveOnly, `If active_only is true, only active runs are included in the results; otherwise, lists both active and completed runs.`) cmd.Flags().BoolVar(&listRunsReq.CompletedOnly, "completed-only", listRunsReq.CompletedOnly, `If completed_only is true, only completed runs are included in the results; otherwise, lists both active and completed runs.`) @@ -1068,9 +1010,6 @@ func newListRuns() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1079,14 +1018,6 @@ func newListRuns() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listRunsJson.Unmarshal(&listRunsReq) - if err != nil { - return err - } - } else { - } - response, err := w.Jobs.ListRunsAll(ctx, listRunsReq) if err != nil { return err @@ -1169,28 +1100,27 @@ func newRepairRun() *cobra.Command { if err != nil { return err } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No RUN_ID argument specified. Loading names for Jobs drop-down." - names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The job run ID of the run to repair") - if err != nil { - return err - } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the job run id of the run to repair") + } + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No RUN_ID argument specified. Loading names for Jobs drop-down." + names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) } - _, err = fmt.Sscan(args[0], &repairRunReq.RunId) + id, err := cmdio.Select(ctx, names, "The job run ID of the run to repair") if err != nil { - return fmt.Errorf("invalid RUN_ID: %s", args[0]) + return err } + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have the job run id of the run to repair") + } + _, err = fmt.Sscan(args[0], &repairRunReq.RunId) + if err != nil { + return fmt.Errorf("invalid RUN_ID: %s", args[0]) } wait, err := w.Jobs.RepairRun(ctx, repairRunReq) @@ -1356,28 +1286,27 @@ func newRunNow() *cobra.Command { if err != nil { return err } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No JOB_ID argument specified. Loading names for Jobs drop-down." - names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The ID of the job to be executed") - if err != nil { - return err - } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the id of the job to be executed") + } + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No JOB_ID argument specified. Loading names for Jobs drop-down." + names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) } - _, err = fmt.Sscan(args[0], &runNowReq.JobId) + id, err := cmdio.Select(ctx, names, "The ID of the job to be executed") if err != nil { - return fmt.Errorf("invalid JOB_ID: %s", args[0]) + return err } + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have the id of the job to be executed") + } + _, err = fmt.Sscan(args[0], &runNowReq.JobId) + if err != nil { + return fmt.Errorf("invalid JOB_ID: %s", args[0]) } wait, err := w.Jobs.RunNow(ctx, runNowReq) @@ -1556,9 +1485,6 @@ func newSubmit() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1572,7 +1498,6 @@ func newSubmit() *cobra.Command { if err != nil { return err } - } else { } wait, err := w.Jobs.Submit(ctx, submitReq) @@ -1659,28 +1584,27 @@ func newUpdate() *cobra.Command { if err != nil { return err } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No JOB_ID argument specified. Loading names for Jobs drop-down." - names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The canonical identifier of the job to update") - if err != nil { - return err - } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the canonical identifier of the job to update") + } + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No JOB_ID argument specified. Loading names for Jobs drop-down." + names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) } - _, err = fmt.Sscan(args[0], &updateReq.JobId) + id, err := cmdio.Select(ctx, names, "The canonical identifier of the job to update") if err != nil { - return fmt.Errorf("invalid JOB_ID: %s", args[0]) + return err } + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have the canonical identifier of the job to update") + } + _, err = fmt.Sscan(args[0], &updateReq.JobId) + if err != nil { + return fmt.Errorf("invalid JOB_ID: %s", args[0]) } err = w.Jobs.Update(ctx, updateReq) diff --git a/cmd/workspace/metastores/metastores.go b/cmd/workspace/metastores/metastores.go index 2748698843..8dcc36c073 100755 --- a/cmd/workspace/metastores/metastores.go +++ b/cmd/workspace/metastores/metastores.go @@ -7,7 +7,6 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" - "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/catalog" "github.com/spf13/cobra" ) @@ -128,10 +127,8 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq catalog.CreateMetastore - var createJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.Region, "region", createReq.Region, `Cloud region which the metastore serves (e.g., us-west-2, westus).`) @@ -145,9 +142,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -156,15 +150,8 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = createJson.Unmarshal(&createReq) - if err != nil { - return err - } - } else { - createReq.Name = args[0] - createReq.StorageRoot = args[1] - } + createReq.Name = args[0] + createReq.StorageRoot = args[1] response, err := w.Metastores.Create(ctx, createReq) if err != nil { @@ -327,10 +314,8 @@ func newEnableOptimization() *cobra.Command { cmd := &cobra.Command{} var enableOptimizationReq catalog.UpdatePredictiveOptimization - var enableOptimizationJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&enableOptimizationJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "enable-optimization METASTORE_ID ENABLE" cmd.Short = `Toggle predictive optimization on the metastore.` @@ -345,9 +330,6 @@ func newEnableOptimization() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -356,17 +338,10 @@ func newEnableOptimization() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = enableOptimizationJson.Unmarshal(&enableOptimizationReq) - if err != nil { - return err - } - } else { - enableOptimizationReq.MetastoreId = args[0] - _, err = fmt.Sscan(args[1], &enableOptimizationReq.Enable) - if err != nil { - return fmt.Errorf("invalid ENABLE: %s", args[1]) - } + enableOptimizationReq.MetastoreId = args[0] + _, err = fmt.Sscan(args[1], &enableOptimizationReq.Enable) + if err != nil { + return fmt.Errorf("invalid ENABLE: %s", args[1]) } response, err := w.Metastores.EnableOptimization(ctx, enableOptimizationReq) diff --git a/cmd/workspace/model-registry/model-registry.go b/cmd/workspace/model-registry/model-registry.go index 4a84bca6a9..ab531078cd 100755 --- a/cmd/workspace/model-registry/model-registry.go +++ b/cmd/workspace/model-registry/model-registry.go @@ -49,10 +49,8 @@ func newApproveTransitionRequest() *cobra.Command { cmd := &cobra.Command{} var approveTransitionRequestReq ml.ApproveTransitionRequest - var approveTransitionRequestJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&approveTransitionRequestJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&approveTransitionRequestReq.Comment, "comment", approveTransitionRequestReq.Comment, `User-provided comment on the action.`) @@ -66,9 +64,6 @@ func newApproveTransitionRequest() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(4) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -77,22 +72,15 @@ func newApproveTransitionRequest() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = approveTransitionRequestJson.Unmarshal(&approveTransitionRequestReq) - if err != nil { - return err - } - } else { - approveTransitionRequestReq.Name = args[0] - approveTransitionRequestReq.Version = args[1] - _, err = fmt.Sscan(args[2], &approveTransitionRequestReq.Stage) - if err != nil { - return fmt.Errorf("invalid STAGE: %s", args[2]) - } - _, err = fmt.Sscan(args[3], &approveTransitionRequestReq.ArchiveExistingVersions) - if err != nil { - return fmt.Errorf("invalid ARCHIVE_EXISTING_VERSIONS: %s", args[3]) - } + approveTransitionRequestReq.Name = args[0] + approveTransitionRequestReq.Version = args[1] + _, err = fmt.Sscan(args[2], &approveTransitionRequestReq.Stage) + if err != nil { + return fmt.Errorf("invalid STAGE: %s", args[2]) + } + _, err = fmt.Sscan(args[3], &approveTransitionRequestReq.ArchiveExistingVersions) + if err != nil { + return fmt.Errorf("invalid ARCHIVE_EXISTING_VERSIONS: %s", args[3]) } response, err := w.ModelRegistry.ApproveTransitionRequest(ctx, approveTransitionRequestReq) @@ -133,10 +121,8 @@ func newCreateComment() *cobra.Command { cmd := &cobra.Command{} var createCommentReq ml.CreateComment - var createCommentJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&createCommentJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "create-comment NAME VERSION COMMENT" cmd.Short = `Post a comment.` @@ -150,9 +136,6 @@ func newCreateComment() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -161,16 +144,9 @@ func newCreateComment() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = createCommentJson.Unmarshal(&createCommentReq) - if err != nil { - return err - } - } else { - createCommentReq.Name = args[0] - createCommentReq.Version = args[1] - createCommentReq.Comment = args[2] - } + createCommentReq.Name = args[0] + createCommentReq.Version = args[1] + createCommentReq.Comment = args[2] response, err := w.ModelRegistry.CreateComment(ctx, createCommentReq) if err != nil { @@ -231,9 +207,6 @@ func newCreateModel() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -247,9 +220,8 @@ func newCreateModel() *cobra.Command { if err != nil { return err } - } else { - createModelReq.Name = args[0] } + createModelReq.Name = args[0] response, err := w.ModelRegistry.CreateModel(ctx, createModelReq) if err != nil { @@ -309,9 +281,6 @@ func newCreateModelVersion() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -325,10 +294,9 @@ func newCreateModelVersion() *cobra.Command { if err != nil { return err } - } else { - createModelVersionReq.Name = args[0] - createModelVersionReq.Source = args[1] } + createModelVersionReq.Name = args[0] + createModelVersionReq.Source = args[1] response, err := w.ModelRegistry.CreateModelVersion(ctx, createModelVersionReq) if err != nil { @@ -368,10 +336,8 @@ func newCreateTransitionRequest() *cobra.Command { cmd := &cobra.Command{} var createTransitionRequestReq ml.CreateTransitionRequest - var createTransitionRequestJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&createTransitionRequestJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createTransitionRequestReq.Comment, "comment", createTransitionRequestReq.Comment, `User-provided comment on the action.`) @@ -385,9 +351,6 @@ func newCreateTransitionRequest() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -396,18 +359,11 @@ func newCreateTransitionRequest() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = createTransitionRequestJson.Unmarshal(&createTransitionRequestReq) - if err != nil { - return err - } - } else { - createTransitionRequestReq.Name = args[0] - createTransitionRequestReq.Version = args[1] - _, err = fmt.Sscan(args[2], &createTransitionRequestReq.Stage) - if err != nil { - return fmt.Errorf("invalid STAGE: %s", args[2]) - } + createTransitionRequestReq.Name = args[0] + createTransitionRequestReq.Version = args[1] + _, err = fmt.Sscan(args[2], &createTransitionRequestReq.Stage) + if err != nil { + return fmt.Errorf("invalid STAGE: %s", args[2]) } response, err := w.ModelRegistry.CreateTransitionRequest(ctx, createTransitionRequestReq) @@ -899,10 +855,8 @@ func newDeleteWebhook() *cobra.Command { cmd := &cobra.Command{} var deleteWebhookReq ml.DeleteWebhookRequest - var deleteWebhookJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&deleteWebhookJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&deleteWebhookReq.Id, "id", deleteWebhookReq.Id, `Webhook ID required to delete a registry webhook.`) @@ -918,9 +872,6 @@ func newDeleteWebhook() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -929,14 +880,6 @@ func newDeleteWebhook() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = deleteWebhookJson.Unmarshal(&deleteWebhookReq) - if err != nil { - return err - } - } else { - } - err = w.ModelRegistry.DeleteWebhook(ctx, deleteWebhookReq) if err != nil { return err @@ -992,9 +935,6 @@ func newGetLatestVersions() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1008,9 +948,8 @@ func newGetLatestVersions() *cobra.Command { if err != nil { return err } - } else { - getLatestVersionsReq.Name = args[0] } + getLatestVersionsReq.Name = args[0] response, err := w.ModelRegistry.GetLatestVersionsAll(ctx, getLatestVersionsReq) if err != nil { @@ -1362,10 +1301,8 @@ func newListModels() *cobra.Command { cmd := &cobra.Command{} var listModelsReq ml.ListModelsRequest - var listModelsJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listModelsJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().IntVar(&listModelsReq.MaxResults, "max-results", listModelsReq.MaxResults, `Maximum number of registered models desired.`) cmd.Flags().StringVar(&listModelsReq.PageToken, "page-token", listModelsReq.PageToken, `Pagination token to go to the next page based on a previous query.`) @@ -1381,9 +1318,6 @@ func newListModels() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1392,14 +1326,6 @@ func newListModels() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listModelsJson.Unmarshal(&listModelsReq) - if err != nil { - return err - } - } else { - } - response, err := w.ModelRegistry.ListModelsAll(ctx, listModelsReq) if err != nil { return err @@ -1521,9 +1447,6 @@ func newListWebhooks() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1537,7 +1460,6 @@ func newListWebhooks() *cobra.Command { if err != nil { return err } - } else { } response, err := w.ModelRegistry.ListWebhooksAll(ctx, listWebhooksReq) @@ -1578,10 +1500,8 @@ func newRejectTransitionRequest() *cobra.Command { cmd := &cobra.Command{} var rejectTransitionRequestReq ml.RejectTransitionRequest - var rejectTransitionRequestJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&rejectTransitionRequestJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&rejectTransitionRequestReq.Comment, "comment", rejectTransitionRequestReq.Comment, `User-provided comment on the action.`) @@ -1595,9 +1515,6 @@ func newRejectTransitionRequest() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1606,18 +1523,11 @@ func newRejectTransitionRequest() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = rejectTransitionRequestJson.Unmarshal(&rejectTransitionRequestReq) - if err != nil { - return err - } - } else { - rejectTransitionRequestReq.Name = args[0] - rejectTransitionRequestReq.Version = args[1] - _, err = fmt.Sscan(args[2], &rejectTransitionRequestReq.Stage) - if err != nil { - return fmt.Errorf("invalid STAGE: %s", args[2]) - } + rejectTransitionRequestReq.Name = args[0] + rejectTransitionRequestReq.Version = args[1] + _, err = fmt.Sscan(args[2], &rejectTransitionRequestReq.Stage) + if err != nil { + return fmt.Errorf("invalid STAGE: %s", args[2]) } response, err := w.ModelRegistry.RejectTransitionRequest(ctx, rejectTransitionRequestReq) @@ -1658,10 +1568,8 @@ func newRenameModel() *cobra.Command { cmd := &cobra.Command{} var renameModelReq ml.RenameModelRequest - var renameModelJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&renameModelJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&renameModelReq.NewName, "new-name", renameModelReq.NewName, `If provided, updates the name for this registered_model.`) @@ -1675,9 +1583,6 @@ func newRenameModel() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1686,14 +1591,7 @@ func newRenameModel() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = renameModelJson.Unmarshal(&renameModelReq) - if err != nil { - return err - } - } else { - renameModelReq.Name = args[0] - } + renameModelReq.Name = args[0] response, err := w.ModelRegistry.RenameModel(ctx, renameModelReq) if err != nil { @@ -1753,9 +1651,6 @@ func newSearchModelVersions() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1769,7 +1664,6 @@ func newSearchModelVersions() *cobra.Command { if err != nil { return err } - } else { } response, err := w.ModelRegistry.SearchModelVersionsAll(ctx, searchModelVersionsReq) @@ -1830,9 +1724,6 @@ func newSearchModels() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1846,7 +1737,6 @@ func newSearchModels() *cobra.Command { if err != nil { return err } - } else { } response, err := w.ModelRegistry.SearchModelsAll(ctx, searchModelsReq) @@ -1887,10 +1777,8 @@ func newSetModelTag() *cobra.Command { cmd := &cobra.Command{} var setModelTagReq ml.SetModelTagRequest - var setModelTagJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&setModelTagJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "set-model-tag NAME KEY VALUE" cmd.Short = `Set a tag.` @@ -1902,9 +1790,6 @@ func newSetModelTag() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1913,16 +1798,9 @@ func newSetModelTag() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = setModelTagJson.Unmarshal(&setModelTagReq) - if err != nil { - return err - } - } else { - setModelTagReq.Name = args[0] - setModelTagReq.Key = args[1] - setModelTagReq.Value = args[2] - } + setModelTagReq.Name = args[0] + setModelTagReq.Key = args[1] + setModelTagReq.Value = args[2] err = w.ModelRegistry.SetModelTag(ctx, setModelTagReq) if err != nil { @@ -1962,10 +1840,8 @@ func newSetModelVersionTag() *cobra.Command { cmd := &cobra.Command{} var setModelVersionTagReq ml.SetModelVersionTagRequest - var setModelVersionTagJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&setModelVersionTagJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "set-model-version-tag NAME VERSION KEY VALUE" cmd.Short = `Set a version tag.` @@ -1977,9 +1853,6 @@ func newSetModelVersionTag() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(4) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -1988,17 +1861,10 @@ func newSetModelVersionTag() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = setModelVersionTagJson.Unmarshal(&setModelVersionTagReq) - if err != nil { - return err - } - } else { - setModelVersionTagReq.Name = args[0] - setModelVersionTagReq.Version = args[1] - setModelVersionTagReq.Key = args[2] - setModelVersionTagReq.Value = args[3] - } + setModelVersionTagReq.Name = args[0] + setModelVersionTagReq.Version = args[1] + setModelVersionTagReq.Key = args[2] + setModelVersionTagReq.Value = args[3] err = w.ModelRegistry.SetModelVersionTag(ctx, setModelVersionTagReq) if err != nil { @@ -2110,10 +1976,8 @@ func newTestRegistryWebhook() *cobra.Command { cmd := &cobra.Command{} var testRegistryWebhookReq ml.TestRegistryWebhookRequest - var testRegistryWebhookJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&testRegistryWebhookJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().Var(&testRegistryWebhookReq.Event, "event", `If event is specified, the test trigger uses the specified event.`) @@ -2129,9 +1993,6 @@ func newTestRegistryWebhook() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -2140,14 +2001,7 @@ func newTestRegistryWebhook() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = testRegistryWebhookJson.Unmarshal(&testRegistryWebhookReq) - if err != nil { - return err - } - } else { - testRegistryWebhookReq.Id = args[0] - } + testRegistryWebhookReq.Id = args[0] response, err := w.ModelRegistry.TestRegistryWebhook(ctx, testRegistryWebhookReq) if err != nil { @@ -2187,10 +2041,8 @@ func newTransitionStage() *cobra.Command { cmd := &cobra.Command{} var transitionStageReq ml.TransitionModelVersionStageDatabricks - var transitionStageJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&transitionStageJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&transitionStageReq.Comment, "comment", transitionStageReq.Comment, `User-provided comment on the action.`) @@ -2208,9 +2060,6 @@ func newTransitionStage() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(4) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -2219,22 +2068,15 @@ func newTransitionStage() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = transitionStageJson.Unmarshal(&transitionStageReq) - if err != nil { - return err - } - } else { - transitionStageReq.Name = args[0] - transitionStageReq.Version = args[1] - _, err = fmt.Sscan(args[2], &transitionStageReq.Stage) - if err != nil { - return fmt.Errorf("invalid STAGE: %s", args[2]) - } - _, err = fmt.Sscan(args[3], &transitionStageReq.ArchiveExistingVersions) - if err != nil { - return fmt.Errorf("invalid ARCHIVE_EXISTING_VERSIONS: %s", args[3]) - } + transitionStageReq.Name = args[0] + transitionStageReq.Version = args[1] + _, err = fmt.Sscan(args[2], &transitionStageReq.Stage) + if err != nil { + return fmt.Errorf("invalid STAGE: %s", args[2]) + } + _, err = fmt.Sscan(args[3], &transitionStageReq.ArchiveExistingVersions) + if err != nil { + return fmt.Errorf("invalid ARCHIVE_EXISTING_VERSIONS: %s", args[3]) } response, err := w.ModelRegistry.TransitionStage(ctx, transitionStageReq) @@ -2275,10 +2117,8 @@ func newUpdateComment() *cobra.Command { cmd := &cobra.Command{} var updateCommentReq ml.UpdateComment - var updateCommentJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&updateCommentJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "update-comment ID COMMENT" cmd.Short = `Update a comment.` @@ -2290,9 +2130,6 @@ func newUpdateComment() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -2301,15 +2138,8 @@ func newUpdateComment() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = updateCommentJson.Unmarshal(&updateCommentReq) - if err != nil { - return err - } - } else { - updateCommentReq.Id = args[0] - updateCommentReq.Comment = args[1] - } + updateCommentReq.Id = args[0] + updateCommentReq.Comment = args[1] response, err := w.ModelRegistry.UpdateComment(ctx, updateCommentReq) if err != nil { @@ -2349,10 +2179,8 @@ func newUpdateModel() *cobra.Command { cmd := &cobra.Command{} var updateModelReq ml.UpdateModelRequest - var updateModelJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&updateModelJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&updateModelReq.Description, "description", updateModelReq.Description, `If provided, updates the description for this registered_model.`) @@ -2366,9 +2194,6 @@ func newUpdateModel() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -2377,14 +2202,7 @@ func newUpdateModel() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = updateModelJson.Unmarshal(&updateModelReq) - if err != nil { - return err - } - } else { - updateModelReq.Name = args[0] - } + updateModelReq.Name = args[0] err = w.ModelRegistry.UpdateModel(ctx, updateModelReq) if err != nil { @@ -2424,10 +2242,8 @@ func newUpdateModelVersion() *cobra.Command { cmd := &cobra.Command{} var updateModelVersionReq ml.UpdateModelVersionRequest - var updateModelVersionJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&updateModelVersionJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&updateModelVersionReq.Description, "description", updateModelVersionReq.Description, `If provided, updates the description for this registered_model.`) @@ -2441,9 +2257,6 @@ func newUpdateModelVersion() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -2452,15 +2265,8 @@ func newUpdateModelVersion() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = updateModelVersionJson.Unmarshal(&updateModelVersionReq) - if err != nil { - return err - } - } else { - updateModelVersionReq.Name = args[0] - updateModelVersionReq.Version = args[1] - } + updateModelVersionReq.Name = args[0] + updateModelVersionReq.Version = args[1] err = w.ModelRegistry.UpdateModelVersion(ctx, updateModelVersionReq) if err != nil { @@ -2595,9 +2401,6 @@ func newUpdateWebhook() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -2611,9 +2414,8 @@ func newUpdateWebhook() *cobra.Command { if err != nil { return err } - } else { - updateWebhookReq.Id = args[0] } + updateWebhookReq.Id = args[0] err = w.ModelRegistry.UpdateWebhook(ctx, updateWebhookReq) if err != nil { diff --git a/cmd/workspace/pipelines/pipelines.go b/cmd/workspace/pipelines/pipelines.go index 8c1cf4f4ee..76a6b3e269 100755 --- a/cmd/workspace/pipelines/pipelines.go +++ b/cmd/workspace/pipelines/pipelines.go @@ -78,9 +78,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -600,9 +597,6 @@ func newListPipelines() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -616,7 +610,6 @@ func newListPipelines() *cobra.Command { if err != nil { return err } - } else { } response, err := w.Pipelines.ListPipelinesAll(ctx, listPipelinesReq) diff --git a/cmd/workspace/policy-families/policy-families.go b/cmd/workspace/policy-families/policy-families.go index 532317f7f2..75ab862a7b 100755 --- a/cmd/workspace/policy-families/policy-families.go +++ b/cmd/workspace/policy-families/policy-families.go @@ -5,7 +5,6 @@ package policy_families import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" - "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/compute" "github.com/spf13/cobra" ) @@ -115,10 +114,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq compute.ListPolicyFamiliesRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().Int64Var(&listReq.MaxResults, "max-results", listReq.MaxResults, `The max number of policy families to return.`) cmd.Flags().StringVar(&listReq.PageToken, "page-token", listReq.PageToken, `A token that can be used to get the next page of results.`) @@ -133,9 +130,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -144,14 +138,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.PolicyFamilies.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/workspace/providers/providers.go b/cmd/workspace/providers/providers.go index d57451cbe7..e9b5b7e19d 100755 --- a/cmd/workspace/providers/providers.go +++ b/cmd/workspace/providers/providers.go @@ -7,7 +7,6 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" - "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/sharing" "github.com/spf13/cobra" ) @@ -50,10 +49,8 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq sharing.CreateProvider - var createJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.Comment, "comment", createReq.Comment, `Description about the provider.`) cmd.Flags().StringVar(&createReq.RecipientProfileStr, "recipient-profile-str", createReq.RecipientProfileStr, `This field is required when the __authentication_type__ is **TOKEN** or not provided.`) @@ -69,9 +66,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -80,17 +74,10 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = createJson.Unmarshal(&createReq) - if err != nil { - return err - } - } else { - createReq.Name = args[0] - _, err = fmt.Sscan(args[1], &createReq.AuthenticationType) - if err != nil { - return fmt.Errorf("invalid AUTHENTICATION_TYPE: %s", args[1]) - } + createReq.Name = args[0] + _, err = fmt.Sscan(args[1], &createReq.AuthenticationType) + if err != nil { + return fmt.Errorf("invalid AUTHENTICATION_TYPE: %s", args[1]) } response, err := w.Providers.Create(ctx, createReq) @@ -280,10 +267,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq sharing.ListProvidersRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listReq.DataProviderGlobalMetastoreId, "data-provider-global-metastore-id", listReq.DataProviderGlobalMetastoreId, `If not provided, all providers will be returned.`) @@ -300,9 +285,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -311,14 +293,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.Providers.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/workspace/queries/queries.go b/cmd/workspace/queries/queries.go index 3512adaaf8..c15d61ac1d 100755 --- a/cmd/workspace/queries/queries.go +++ b/cmd/workspace/queries/queries.go @@ -74,9 +74,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -281,10 +278,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq sql.ListQueriesRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listReq.Order, "order", listReq.Order, `Name of query attribute to order by.`) cmd.Flags().IntVar(&listReq.Page, "page", listReq.Page, `Page number to retrieve.`) @@ -302,9 +297,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -313,14 +305,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.Queries.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/workspace/query-history/query-history.go b/cmd/workspace/query-history/query-history.go index 1593d6766a..22914d44eb 100755 --- a/cmd/workspace/query-history/query-history.go +++ b/cmd/workspace/query-history/query-history.go @@ -68,9 +68,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -84,7 +81,6 @@ func newList() *cobra.Command { if err != nil { return err } - } else { } response, err := w.QueryHistory.ListAll(ctx, listReq) diff --git a/cmd/workspace/query-visualizations/query-visualizations.go b/cmd/workspace/query-visualizations/query-visualizations.go index fae0f93412..9f7c5ccb6b 100755 --- a/cmd/workspace/query-visualizations/query-visualizations.go +++ b/cmd/workspace/query-visualizations/query-visualizations.go @@ -188,9 +188,6 @@ func newUpdate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } diff --git a/cmd/workspace/recipients/recipients.go b/cmd/workspace/recipients/recipients.go index 736daab0dc..c948c87d4d 100755 --- a/cmd/workspace/recipients/recipients.go +++ b/cmd/workspace/recipients/recipients.go @@ -88,9 +88,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -104,12 +101,11 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { - createReq.Name = args[0] - _, err = fmt.Sscan(args[1], &createReq.AuthenticationType) - if err != nil { - return fmt.Errorf("invalid AUTHENTICATION_TYPE: %s", args[1]) - } + } + createReq.Name = args[0] + _, err = fmt.Sscan(args[1], &createReq.AuthenticationType) + if err != nil { + return fmt.Errorf("invalid AUTHENTICATION_TYPE: %s", args[1]) } response, err := w.Recipients.Create(ctx, createReq) @@ -299,10 +295,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq sharing.ListRecipientsRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listReq.DataRecipientGlobalMetastoreId, "data-recipient-global-metastore-id", listReq.DataRecipientGlobalMetastoreId, `If not provided, all recipients will be returned.`) @@ -319,9 +313,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -330,14 +321,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.Recipients.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/workspace/registered-models/registered-models.go b/cmd/workspace/registered-models/registered-models.go index d914e1b6f4..1bcba85bad 100755 --- a/cmd/workspace/registered-models/registered-models.go +++ b/cmd/workspace/registered-models/registered-models.go @@ -7,7 +7,6 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" - "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/catalog" "github.com/spf13/cobra" ) @@ -76,10 +75,8 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq catalog.CreateRegisteredModelRequest - var createJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.Comment, "comment", createReq.Comment, `The comment attached to the registered model.`) cmd.Flags().StringVar(&createReq.StorageLocation, "storage-location", createReq.StorageLocation, `The storage location on the cloud under which model version data files are stored.`) @@ -105,9 +102,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -116,16 +110,9 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = createJson.Unmarshal(&createReq) - if err != nil { - return err - } - } else { - createReq.CatalogName = args[0] - createReq.SchemaName = args[1] - createReq.Name = args[2] - } + createReq.CatalogName = args[0] + createReq.SchemaName = args[1] + createReq.Name = args[2] response, err := w.RegisteredModels.Create(ctx, createReq) if err != nil { @@ -389,10 +376,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq catalog.ListRegisteredModelsRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listReq.CatalogName, "catalog-name", listReq.CatalogName, `The identifier of the catalog under which to list registered models.`) cmd.Flags().IntVar(&listReq.MaxResults, "max-results", listReq.MaxResults, `Max number of registered models to return.`) @@ -420,9 +405,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -431,14 +413,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.RegisteredModels.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/workspace/repos/repos.go b/cmd/workspace/repos/repos.go index 2d510e904f..8972d0653b 100755 --- a/cmd/workspace/repos/repos.go +++ b/cmd/workspace/repos/repos.go @@ -77,9 +77,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -93,10 +90,9 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { - createReq.Url = args[0] - createReq.Provider = args[1] } + createReq.Url = args[0] + createReq.Provider = args[1] response, err := w.Repos.Create(ctx, createReq) if err != nil { @@ -435,10 +431,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq workspace.ListReposRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listReq.NextPageToken, "next-page-token", listReq.NextPageToken, `Token used to get the next page of results.`) cmd.Flags().StringVar(&listReq.PathPrefix, "path-prefix", listReq.PathPrefix, `Filters repos that have paths starting with the given path prefix.`) @@ -454,9 +448,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -465,14 +456,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.Repos.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/workspace/schemas/schemas.go b/cmd/workspace/schemas/schemas.go index fddf986de1..a09ae292b3 100755 --- a/cmd/workspace/schemas/schemas.go +++ b/cmd/workspace/schemas/schemas.go @@ -73,9 +73,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -89,10 +86,9 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { - createReq.Name = args[0] - createReq.CatalogName = args[1] } + createReq.Name = args[0] + createReq.CatalogName = args[1] response, err := w.Schemas.Create(ctx, createReq) if err != nil { diff --git a/cmd/workspace/secrets/secrets.go b/cmd/workspace/secrets/secrets.go index 5425da90c1..31e75052e5 100755 --- a/cmd/workspace/secrets/secrets.go +++ b/cmd/workspace/secrets/secrets.go @@ -80,9 +80,6 @@ func newCreateScope() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -96,9 +93,8 @@ func newCreateScope() *cobra.Command { if err != nil { return err } - } else { - createScopeReq.Scope = args[0] } + createScopeReq.Scope = args[0] err = w.Secrets.CreateScope(ctx, createScopeReq) if err != nil { @@ -138,10 +134,8 @@ func newDeleteAcl() *cobra.Command { cmd := &cobra.Command{} var deleteAclReq workspace.DeleteAcl - var deleteAclJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&deleteAclJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete-acl SCOPE PRINCIPAL" cmd.Short = `Delete an ACL.` @@ -158,9 +152,6 @@ func newDeleteAcl() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -169,15 +160,8 @@ func newDeleteAcl() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = deleteAclJson.Unmarshal(&deleteAclReq) - if err != nil { - return err - } - } else { - deleteAclReq.Scope = args[0] - deleteAclReq.Principal = args[1] - } + deleteAclReq.Scope = args[0] + deleteAclReq.Principal = args[1] err = w.Secrets.DeleteAcl(ctx, deleteAclReq) if err != nil { @@ -217,10 +201,8 @@ func newDeleteScope() *cobra.Command { cmd := &cobra.Command{} var deleteScopeReq workspace.DeleteScope - var deleteScopeJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&deleteScopeJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete-scope SCOPE" cmd.Short = `Delete a secret scope.` @@ -236,9 +218,6 @@ func newDeleteScope() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -247,14 +226,7 @@ func newDeleteScope() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = deleteScopeJson.Unmarshal(&deleteScopeReq) - if err != nil { - return err - } - } else { - deleteScopeReq.Scope = args[0] - } + deleteScopeReq.Scope = args[0] err = w.Secrets.DeleteScope(ctx, deleteScopeReq) if err != nil { @@ -294,10 +266,8 @@ func newDeleteSecret() *cobra.Command { cmd := &cobra.Command{} var deleteSecretReq workspace.DeleteSecret - var deleteSecretJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&deleteSecretJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete-secret SCOPE KEY" cmd.Short = `Delete a secret.` @@ -314,9 +284,6 @@ func newDeleteSecret() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -325,15 +292,8 @@ func newDeleteSecret() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = deleteSecretJson.Unmarshal(&deleteSecretReq) - if err != nil { - return err - } - } else { - deleteSecretReq.Scope = args[0] - deleteSecretReq.Key = args[1] - } + deleteSecretReq.Scope = args[0] + deleteSecretReq.Key = args[1] err = w.Secrets.DeleteSecret(ctx, deleteSecretReq) if err != nil { @@ -698,10 +658,8 @@ func newPutAcl() *cobra.Command { cmd := &cobra.Command{} var putAclReq workspace.PutAcl - var putAclJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&putAclJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "put-acl SCOPE PRINCIPAL PERMISSION" cmd.Short = `Create/update an ACL.` @@ -738,9 +696,6 @@ func newPutAcl() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -749,18 +704,11 @@ func newPutAcl() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = putAclJson.Unmarshal(&putAclReq) - if err != nil { - return err - } - } else { - putAclReq.Scope = args[0] - putAclReq.Principal = args[1] - _, err = fmt.Sscan(args[2], &putAclReq.Permission) - if err != nil { - return fmt.Errorf("invalid PERMISSION: %s", args[2]) - } + putAclReq.Scope = args[0] + putAclReq.Principal = args[1] + _, err = fmt.Sscan(args[2], &putAclReq.Permission) + if err != nil { + return fmt.Errorf("invalid PERMISSION: %s", args[2]) } err = w.Secrets.PutAcl(ctx, putAclReq) diff --git a/cmd/workspace/service-principals/service-principals.go b/cmd/workspace/service-principals/service-principals.go index baeec34993..e78e00620c 100755 --- a/cmd/workspace/service-principals/service-principals.go +++ b/cmd/workspace/service-principals/service-principals.go @@ -77,9 +77,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -93,7 +90,6 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { } response, err := w.ServicePrincipals.Create(ctx, createReq) @@ -281,10 +277,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq iam.ListServicePrincipalsRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listReq.Attributes, "attributes", listReq.Attributes, `Comma-separated list of attributes to return in response.`) cmd.Flags().IntVar(&listReq.Count, "count", listReq.Count, `Desired number of results per page.`) @@ -304,9 +298,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -315,14 +306,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.ServicePrincipals.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/workspace/settings/settings.go b/cmd/workspace/settings/settings.go index 71a682a47e..3ef9a7e01f 100755 --- a/cmd/workspace/settings/settings.go +++ b/cmd/workspace/settings/settings.go @@ -194,9 +194,6 @@ func newUpdateDefaultWorkspaceNamespace() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -210,7 +207,6 @@ func newUpdateDefaultWorkspaceNamespace() *cobra.Command { if err != nil { return err } - } else { } response, err := w.Settings.UpdateDefaultWorkspaceNamespace(ctx, updateDefaultWorkspaceNamespaceReq) diff --git a/cmd/workspace/shares/shares.go b/cmd/workspace/shares/shares.go index b542196d9f..02a7fd70ff 100755 --- a/cmd/workspace/shares/shares.go +++ b/cmd/workspace/shares/shares.go @@ -50,10 +50,8 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq sharing.CreateShare - var createJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.Comment, "comment", createReq.Comment, `User-provided free-form text description.`) @@ -69,9 +67,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -80,14 +75,7 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = createJson.Unmarshal(&createReq) - if err != nil { - return err - } - } else { - createReq.Name = args[0] - } + createReq.Name = args[0] response, err := w.Shares.Create(ctx, createReq) if err != nil { diff --git a/cmd/workspace/storage-credentials/storage-credentials.go b/cmd/workspace/storage-credentials/storage-credentials.go index fb0ae47515..47c1d78f14 100755 --- a/cmd/workspace/storage-credentials/storage-credentials.go +++ b/cmd/workspace/storage-credentials/storage-credentials.go @@ -83,9 +83,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -99,9 +96,8 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { - createReq.Name = args[0] } + createReq.Name = args[0] response, err := w.StorageCredentials.Create(ctx, createReq) if err != nil { @@ -471,9 +467,6 @@ func newValidate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -487,7 +480,6 @@ func newValidate() *cobra.Command { if err != nil { return err } - } else { } response, err := w.StorageCredentials.Validate(ctx, validateReq) diff --git a/cmd/workspace/token-management/token-management.go b/cmd/workspace/token-management/token-management.go index b934e26407..bb76dfe14a 100755 --- a/cmd/workspace/token-management/token-management.go +++ b/cmd/workspace/token-management/token-management.go @@ -50,10 +50,8 @@ func newCreateOboToken() *cobra.Command { cmd := &cobra.Command{} var createOboTokenReq settings.CreateOboTokenRequest - var createOboTokenJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&createOboTokenJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createOboTokenReq.Comment, "comment", createOboTokenReq.Comment, `Comment that describes the purpose of the token.`) @@ -67,9 +65,6 @@ func newCreateOboToken() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -78,17 +73,10 @@ func newCreateOboToken() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = createOboTokenJson.Unmarshal(&createOboTokenReq) - if err != nil { - return err - } - } else { - createOboTokenReq.ApplicationId = args[0] - _, err = fmt.Sscan(args[1], &createOboTokenReq.LifetimeSeconds) - if err != nil { - return fmt.Errorf("invalid LIFETIME_SECONDS: %s", args[1]) - } + createOboTokenReq.ApplicationId = args[0] + _, err = fmt.Sscan(args[1], &createOboTokenReq.LifetimeSeconds) + if err != nil { + return fmt.Errorf("invalid LIFETIME_SECONDS: %s", args[1]) } response, err := w.TokenManagement.CreateOboToken(ctx, createOboTokenReq) @@ -372,10 +360,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq settings.ListTokenManagementRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listReq.CreatedById, "created-by-id", listReq.CreatedById, `User ID of the user that created the token.`) cmd.Flags().StringVar(&listReq.CreatedByUsername, "created-by-username", listReq.CreatedByUsername, `Username of the user that created the token.`) @@ -390,9 +376,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -401,14 +384,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.TokenManagement.ListAll(ctx, listReq) if err != nil { return err @@ -465,9 +440,6 @@ func newSetPermissions() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -481,7 +453,6 @@ func newSetPermissions() *cobra.Command { if err != nil { return err } - } else { } response, err := w.TokenManagement.SetPermissions(ctx, setPermissionsReq) @@ -540,9 +511,6 @@ func newUpdatePermissions() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -556,7 +524,6 @@ func newUpdatePermissions() *cobra.Command { if err != nil { return err } - } else { } response, err := w.TokenManagement.UpdatePermissions(ctx, updatePermissionsReq) diff --git a/cmd/workspace/tokens/tokens.go b/cmd/workspace/tokens/tokens.go index eee64c976d..719d35b6a5 100755 --- a/cmd/workspace/tokens/tokens.go +++ b/cmd/workspace/tokens/tokens.go @@ -7,7 +7,6 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" - "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/settings" "github.com/spf13/cobra" ) @@ -49,10 +48,8 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq settings.CreateTokenRequest - var createJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.Comment, "comment", createReq.Comment, `Optional description to attach to the token.`) cmd.Flags().Int64Var(&createReq.LifetimeSeconds, "lifetime-seconds", createReq.LifetimeSeconds, `The lifetime of the token, in seconds.`) @@ -70,9 +67,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -81,14 +75,6 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = createJson.Unmarshal(&createReq) - if err != nil { - return err - } - } else { - } - response, err := w.Tokens.Create(ctx, createReq) if err != nil { return err @@ -127,10 +113,8 @@ func newDelete() *cobra.Command { cmd := &cobra.Command{} var deleteReq settings.RevokeTokenRequest - var deleteJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&deleteJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete TOKEN_ID" cmd.Short = `Revoke token.` @@ -148,31 +132,24 @@ func newDelete() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = deleteJson.Unmarshal(&deleteReq) + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No TOKEN_ID argument specified. Loading names for Tokens drop-down." + names, err := w.Tokens.TokenInfoCommentToTokenIdMap(ctx) + close(promptSpinner) if err != nil { - return err - } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No TOKEN_ID argument specified. Loading names for Tokens drop-down." - names, err := w.Tokens.TokenInfoCommentToTokenIdMap(ctx) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Tokens drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The ID of the token to be revoked") - if err != nil { - return err - } - args = append(args, id) + return fmt.Errorf("failed to load names for Tokens drop-down. Please manually specify required arguments. Original error: %w", err) } - if len(args) != 1 { - return fmt.Errorf("expected to have the id of the token to be revoked") + id, err := cmdio.Select(ctx, names, "The ID of the token to be revoked") + if err != nil { + return err } - deleteReq.TokenId = args[0] + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have the id of the token to be revoked") } + deleteReq.TokenId = args[0] err = w.Tokens.Delete(ctx, deleteReq) if err != nil { diff --git a/cmd/workspace/users/users.go b/cmd/workspace/users/users.go index 6fe4b4f617..ebf319fa5a 100755 --- a/cmd/workspace/users/users.go +++ b/cmd/workspace/users/users.go @@ -85,9 +85,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -101,7 +98,6 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { } response, err := w.Users.Create(ctx, createReq) @@ -386,10 +382,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq iam.ListUsersRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listReq.Attributes, "attributes", listReq.Attributes, `Comma-separated list of attributes to return in response.`) cmd.Flags().IntVar(&listReq.Count, "count", listReq.Count, `Desired number of results per page.`) @@ -409,9 +403,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -420,14 +411,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.Users.ListAll(ctx, listReq) if err != nil { return err @@ -569,9 +552,6 @@ func newSetPermissions() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -585,7 +565,6 @@ func newSetPermissions() *cobra.Command { if err != nil { return err } - } else { } response, err := w.Users.SetPermissions(ctx, setPermissionsReq) @@ -736,9 +715,6 @@ func newUpdatePermissions() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -752,7 +728,6 @@ func newUpdatePermissions() *cobra.Command { if err != nil { return err } - } else { } response, err := w.Users.UpdatePermissions(ctx, updatePermissionsReq) diff --git a/cmd/workspace/volumes/volumes.go b/cmd/workspace/volumes/volumes.go index 4dbfc5856c..30a5f18c3d 100755 --- a/cmd/workspace/volumes/volumes.go +++ b/cmd/workspace/volumes/volumes.go @@ -7,7 +7,6 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" - "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/catalog" "github.com/spf13/cobra" ) @@ -55,10 +54,8 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq catalog.CreateVolumeRequestContent - var createJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.Comment, "comment", createReq.Comment, `The comment attached to the volume.`) cmd.Flags().StringVar(&createReq.StorageLocation, "storage-location", createReq.StorageLocation, `The storage location on the cloud.`) @@ -90,9 +87,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(4) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -101,19 +95,12 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = createJson.Unmarshal(&createReq) - if err != nil { - return err - } - } else { - createReq.CatalogName = args[0] - createReq.SchemaName = args[1] - createReq.Name = args[2] - _, err = fmt.Sscan(args[3], &createReq.VolumeType) - if err != nil { - return fmt.Errorf("invalid VOLUME_TYPE: %s", args[3]) - } + createReq.CatalogName = args[0] + createReq.SchemaName = args[1] + createReq.Name = args[2] + _, err = fmt.Sscan(args[3], &createReq.VolumeType) + if err != nil { + return fmt.Errorf("invalid VOLUME_TYPE: %s", args[3]) } response, err := w.Volumes.Create(ctx, createReq) diff --git a/cmd/workspace/warehouses/warehouses.go b/cmd/workspace/warehouses/warehouses.go index c64e0e0b59..c7930e29cf 100755 --- a/cmd/workspace/warehouses/warehouses.go +++ b/cmd/workspace/warehouses/warehouses.go @@ -85,9 +85,6 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -101,7 +98,6 @@ func newCreate() *cobra.Command { if err != nil { return err } - } else { } wait, err := w.Warehouses.Create(ctx, createReq) @@ -627,10 +623,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq sql.ListWarehousesRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().IntVar(&listReq.RunAsUserId, "run-as-user-id", listReq.RunAsUserId, `Service Principal which will be used to fetch the list of warehouses.`) @@ -644,9 +638,6 @@ func newList() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -655,14 +646,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } else { - } - response, err := w.Warehouses.ListAll(ctx, listReq) if err != nil { return err @@ -811,9 +794,6 @@ func newSetWorkspaceWarehouseConfig() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -827,7 +807,6 @@ func newSetWorkspaceWarehouseConfig() *cobra.Command { if err != nil { return err } - } else { } err = w.Warehouses.SetWorkspaceWarehouseConfig(ctx, setWorkspaceWarehouseConfigReq) diff --git a/cmd/workspace/workspace-conf/workspace-conf.go b/cmd/workspace/workspace-conf/workspace-conf.go index d828f66ea4..687c31adc6 100755 --- a/cmd/workspace/workspace-conf/workspace-conf.go +++ b/cmd/workspace/workspace-conf/workspace-conf.go @@ -5,7 +5,6 @@ package workspace_conf import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" - "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/settings" "github.com/spf13/cobra" ) @@ -107,10 +106,8 @@ func newSetStatus() *cobra.Command { cmd := &cobra.Command{} var setStatusReq settings.WorkspaceConf - var setStatusJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&setStatusJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "set-status" cmd.Short = `Enable/disable features.` @@ -123,9 +120,6 @@ func newSetStatus() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(0) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -134,14 +128,6 @@ func newSetStatus() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = setStatusJson.Unmarshal(&setStatusReq) - if err != nil { - return err - } - } else { - } - err = w.WorkspaceConf.SetStatus(ctx, setStatusReq) if err != nil { return err diff --git a/cmd/workspace/workspace/workspace.go b/cmd/workspace/workspace/workspace.go index 2541c8e34b..e56b0d9850 100755 --- a/cmd/workspace/workspace/workspace.go +++ b/cmd/workspace/workspace/workspace.go @@ -52,10 +52,8 @@ func newDelete() *cobra.Command { cmd := &cobra.Command{} var deleteReq workspace.Delete - var deleteJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&deleteJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().BoolVar(&deleteReq.Recursive, "recursive", deleteReq.Recursive, `The flag that specifies whether to delete the object recursively.`) @@ -79,31 +77,24 @@ func newDelete() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = deleteJson.Unmarshal(&deleteReq) + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No PATH argument specified. Loading names for Workspace drop-down." + names, err := w.Workspace.ObjectInfoPathToObjectIdMap(ctx, workspace.ListWorkspaceRequest{}) + close(promptSpinner) if err != nil { - return err - } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No PATH argument specified. Loading names for Workspace drop-down." - names, err := w.Workspace.ObjectInfoPathToObjectIdMap(ctx, workspace.ListWorkspaceRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Workspace drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The absolute path of the notebook or directory") - if err != nil { - return err - } - args = append(args, id) + return fmt.Errorf("failed to load names for Workspace drop-down. Please manually specify required arguments. Original error: %w", err) } - if len(args) != 1 { - return fmt.Errorf("expected to have the absolute path of the notebook or directory") + id, err := cmdio.Select(ctx, names, "The absolute path of the notebook or directory") + if err != nil { + return err } - deleteReq.Path = args[0] + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have the absolute path of the notebook or directory") } + deleteReq.Path = args[0] err = w.Workspace.Delete(ctx, deleteReq) if err != nil { @@ -412,10 +403,8 @@ func newImport() *cobra.Command { cmd := &cobra.Command{} var importReq workspace.Import - var importJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&importJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&importReq.Content, "content", importReq.Content, `The base64-encoded content.`) cmd.Flags().Var(&importReq.Format, "format", `This specifies the format of the file to be imported.`) @@ -437,9 +426,6 @@ func newImport() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } return check(cmd, args) } @@ -448,14 +434,7 @@ func newImport() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = importJson.Unmarshal(&importReq) - if err != nil { - return err - } - } else { - importReq.Path = args[0] - } + importReq.Path = args[0] err = w.Workspace.Import(ctx, importReq) if err != nil { @@ -560,10 +539,8 @@ func newMkdirs() *cobra.Command { cmd := &cobra.Command{} var mkdirsReq workspace.Mkdirs - var mkdirsJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&mkdirsJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "mkdirs PATH" cmd.Short = `Create a directory.` @@ -583,31 +560,24 @@ func newMkdirs() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = mkdirsJson.Unmarshal(&mkdirsReq) + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No PATH argument specified. Loading names for Workspace drop-down." + names, err := w.Workspace.ObjectInfoPathToObjectIdMap(ctx, workspace.ListWorkspaceRequest{}) + close(promptSpinner) if err != nil { - return err - } - } else { - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No PATH argument specified. Loading names for Workspace drop-down." - names, err := w.Workspace.ObjectInfoPathToObjectIdMap(ctx, workspace.ListWorkspaceRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Workspace drop-down. Please manually specify required arguments. Original error: %w", err) - } - id, err := cmdio.Select(ctx, names, "The absolute path of the directory") - if err != nil { - return err - } - args = append(args, id) + return fmt.Errorf("failed to load names for Workspace drop-down. Please manually specify required arguments. Original error: %w", err) } - if len(args) != 1 { - return fmt.Errorf("expected to have the absolute path of the directory") + id, err := cmdio.Select(ctx, names, "The absolute path of the directory") + if err != nil { + return err } - mkdirsReq.Path = args[0] + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have the absolute path of the directory") } + mkdirsReq.Path = args[0] err = w.Workspace.Mkdirs(ctx, mkdirsReq) if err != nil { From bd470610d572e103b3c6c2abec7dced50e3a9ab0 Mon Sep 17 00:00:00 2001 From: Andrew Nester Date: Tue, 24 Oct 2023 15:04:37 +0200 Subject: [PATCH 2/4] fixes --- .codegen/service.go.tmpl | 10 +- cmd/account/log-delivery/log-delivery.go | 23 +- cmd/account/networks/networks.go | 7 +- .../o-auth-enrollment/o-auth-enrollment.go | 10 + cmd/account/private-access/private-access.go | 26 +- cmd/account/vpc-endpoints/vpc-endpoints.go | 7 +- cmd/account/workspaces/workspaces.go | 7 +- cmd/workspace/catalogs/catalogs.go | 14 +- .../cluster-policies/cluster-policies.go | 42 ++- cmd/workspace/clusters/clusters.go | 85 ++++- cmd/workspace/dashboards/dashboards.go | 3 + cmd/workspace/experiments/experiments.go | 257 +++++++++++-- .../external-locations/external-locations.go | 22 +- cmd/workspace/functions/functions.go | 8 + .../git-credentials/git-credentials.go | 24 +- .../global-init-scripts.go | 43 ++- .../instance-pools/instance-pools.go | 34 +- .../instance-profiles/instance-profiles.go | 46 ++- cmd/workspace/jobs/jobs.go | 33 ++ cmd/workspace/metastores/metastores.go | 84 ++++- .../model-registry/model-registry.go | 339 ++++++++++++++---- .../model-versions/model-versions.go | 9 + cmd/workspace/pipelines/pipelines.go | 17 - cmd/workspace/providers/providers.go | 32 +- cmd/workspace/query-history/query-history.go | 10 - .../query-visualizations.go | 3 + cmd/workspace/recipients/recipients.go | 38 +- .../registered-models/registered-models.go | 59 ++- cmd/workspace/repos/repos.go | 11 +- cmd/workspace/schemas/schemas.go | 11 +- cmd/workspace/secrets/secrets.go | 87 ++++- cmd/workspace/shares/shares.go | 22 +- .../storage-credentials.go | 7 +- cmd/workspace/tables/tables.go | 9 + .../token-management/token-management.go | 23 +- cmd/workspace/tokens/tokens.go | 18 + cmd/workspace/volumes/volumes.go | 40 ++- cmd/workspace/workspace/workspace.go | 31 +- 38 files changed, 1314 insertions(+), 237 deletions(-) diff --git a/.codegen/service.go.tmpl b/.codegen/service.go.tmpl index 508da8a016..631190b8d9 100644 --- a/.codegen/service.go.tmpl +++ b/.codegen/service.go.tmpl @@ -78,7 +78,7 @@ var {{.CamelName}}Overrides []func( func new{{.PascalName}}() *cobra.Command { cmd := &cobra.Command{} - {{- $hasRequiredRequestBodyFields := and .Request (gt 0 (len .Request.RequiredRequestBodyFields)) -}} + {{- $hasRequiredRequestBodyFields := and .Request .Request.HasRequiredRequestBodyFields -}} {{- if .Request}} @@ -187,6 +187,10 @@ func new{{.PascalName}}() *cobra.Command { {{$method := .}} {{- range $arg, $field := .Request.RequiredFields}} + {{- $optionalIfJsonIsUsed := and (not $hasIdPrompt) (and $field.IsJson $method.CanUseJson) }} + {{- if $optionalIfJsonIsUsed }} + if !cmd.Flags().Changed("json") { + {{- end }} {{if not $field.Entity.IsString -}} _, err = fmt.Sscan(args[{{$arg}}], &{{$method.CamelName}}Req.{{$field.PascalName}}) if err != nil { @@ -194,8 +198,12 @@ func new{{.PascalName}}() *cobra.Command { }{{else -}} {{$method.CamelName}}Req.{{$field.PascalName}} = args[{{$arg}}] {{- end -}} + {{- if $optionalIfJsonIsUsed }} + } + {{- end }} {{- end -}} {{- end}} + {{end}} {{if $wait -}} wait, err := {{if .Service.IsAccounts}}a{{else}}w{{end}}.{{.Service.PascalName}}.{{.PascalName}}(ctx{{if .Request}}, {{.CamelName}}Req{{end}}) diff --git a/cmd/account/log-delivery/log-delivery.go b/cmd/account/log-delivery/log-delivery.go index 0c7e314160..48ebe9e9bb 100755 --- a/cmd/account/log-delivery/log-delivery.go +++ b/cmd/account/log-delivery/log-delivery.go @@ -338,10 +338,12 @@ func newPatchStatus() *cobra.Command { cmd := &cobra.Command{} var patchStatusReq billing.UpdateLogDeliveryConfigurationStatusRequest + var patchStatusJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&patchStatusJson, "json", `either inline JSON string or @path/to/file.json with request body`) - cmd.Use = "patch-status STATUS LOG_DELIVERY_CONFIGURATION_ID" + cmd.Use = "patch-status LOG_DELIVERY_CONFIGURATION_ID STATUS" cmd.Short = `Enable or disable log delivery configuration.` cmd.Long = `Enable or disable log delivery configuration. @@ -355,6 +357,9 @@ func newPatchStatus() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(1) + } return check(cmd, args) } @@ -363,11 +368,19 @@ func newPatchStatus() *cobra.Command { ctx := cmd.Context() a := root.AccountClient(ctx) - _, err = fmt.Sscan(args[0], &patchStatusReq.Status) - if err != nil { - return fmt.Errorf("invalid STATUS: %s", args[0]) + if cmd.Flags().Changed("json") { + err = patchStatusJson.Unmarshal(&patchStatusReq) + if err != nil { + return err + } + } + patchStatusReq.LogDeliveryConfigurationId = args[0] + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[1], &patchStatusReq.Status) + if err != nil { + return fmt.Errorf("invalid STATUS: %s", args[1]) + } } - patchStatusReq.LogDeliveryConfigurationId = args[1] err = a.LogDelivery.PatchStatus(ctx, patchStatusReq) if err != nil { diff --git a/cmd/account/networks/networks.go b/cmd/account/networks/networks.go index 6357dd1936..74b3ffde97 100755 --- a/cmd/account/networks/networks.go +++ b/cmd/account/networks/networks.go @@ -72,6 +72,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -86,7 +89,9 @@ func newCreate() *cobra.Command { return err } } - createReq.NetworkName = args[0] + if !cmd.Flags().Changed("json") { + createReq.NetworkName = args[0] + } response, err := a.Networks.Create(ctx, createReq) if err != nil { diff --git a/cmd/account/o-auth-enrollment/o-auth-enrollment.go b/cmd/account/o-auth-enrollment/o-auth-enrollment.go index c2f82cd62c..7ba2e59af2 100755 --- a/cmd/account/o-auth-enrollment/o-auth-enrollment.go +++ b/cmd/account/o-auth-enrollment/o-auth-enrollment.go @@ -5,6 +5,7 @@ package o_auth_enrollment import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" + "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/oauth2" "github.com/spf13/cobra" ) @@ -49,8 +50,10 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq oauth2.CreateOAuthEnrollment + var createJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().BoolVar(&createReq.EnableAllPublishedApps, "enable-all-published-apps", createReq.EnableAllPublishedApps, `If true, enable OAuth for all the published applications in the account.`) @@ -80,6 +83,13 @@ func newCreate() *cobra.Command { ctx := cmd.Context() a := root.AccountClient(ctx) + if cmd.Flags().Changed("json") { + err = createJson.Unmarshal(&createReq) + if err != nil { + return err + } + } + err = a.OAuthEnrollment.Create(ctx, createReq) if err != nil { return err diff --git a/cmd/account/private-access/private-access.go b/cmd/account/private-access/private-access.go index c626bc9ee0..094c030b5f 100755 --- a/cmd/account/private-access/private-access.go +++ b/cmd/account/private-access/private-access.go @@ -81,6 +81,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -95,8 +98,12 @@ func newCreate() *cobra.Command { return err } } - createReq.PrivateAccessSettingsName = args[0] - createReq.Region = args[1] + if !cmd.Flags().Changed("json") { + createReq.PrivateAccessSettingsName = args[0] + } + if !cmd.Flags().Changed("json") { + createReq.Region = args[1] + } response, err := a.PrivateAccess.Create(ctx, createReq) if err != nil { @@ -354,7 +361,7 @@ func newReplace() *cobra.Command { cmd.Flags().Var(&replaceReq.PrivateAccessLevel, "private-access-level", `The private access level controls which VPC endpoints can connect to the UI or API of any workspace that attaches this private access settings object.`) cmd.Flags().BoolVar(&replaceReq.PublicAccessEnabled, "public-access-enabled", replaceReq.PublicAccessEnabled, `Determines if the workspace can be accessed over public internet.`) - cmd.Use = "replace PRIVATE_ACCESS_SETTINGS_NAME REGION PRIVATE_ACCESS_SETTINGS_ID" + cmd.Use = "replace PRIVATE_ACCESS_SETTINGS_ID PRIVATE_ACCESS_SETTINGS_NAME REGION" cmd.Short = `Replace private access settings.` cmd.Long = `Replace private access settings. @@ -384,6 +391,9 @@ func newReplace() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(1) + } return check(cmd, args) } @@ -398,9 +408,13 @@ func newReplace() *cobra.Command { return err } } - replaceReq.PrivateAccessSettingsName = args[0] - replaceReq.Region = args[1] - replaceReq.PrivateAccessSettingsId = args[2] + replaceReq.PrivateAccessSettingsId = args[0] + if !cmd.Flags().Changed("json") { + replaceReq.PrivateAccessSettingsName = args[1] + } + if !cmd.Flags().Changed("json") { + replaceReq.Region = args[2] + } err = a.PrivateAccess.Replace(ctx, replaceReq) if err != nil { diff --git a/cmd/account/vpc-endpoints/vpc-endpoints.go b/cmd/account/vpc-endpoints/vpc-endpoints.go index 20efa27d25..4cefe242b2 100755 --- a/cmd/account/vpc-endpoints/vpc-endpoints.go +++ b/cmd/account/vpc-endpoints/vpc-endpoints.go @@ -79,6 +79,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -93,7 +96,9 @@ func newCreate() *cobra.Command { return err } } - createReq.VpcEndpointName = args[0] + if !cmd.Flags().Changed("json") { + createReq.VpcEndpointName = args[0] + } response, err := a.VpcEndpoints.Create(ctx, createReq) if err != nil { diff --git a/cmd/account/workspaces/workspaces.go b/cmd/account/workspaces/workspaces.go index af1c207707..993e569ffc 100755 --- a/cmd/account/workspaces/workspaces.go +++ b/cmd/account/workspaces/workspaces.go @@ -100,6 +100,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -114,7 +117,9 @@ func newCreate() *cobra.Command { return err } } - createReq.WorkspaceName = args[0] + if !cmd.Flags().Changed("json") { + createReq.WorkspaceName = args[0] + } wait, err := a.Workspaces.Create(ctx, createReq) if err != nil { diff --git a/cmd/workspace/catalogs/catalogs.go b/cmd/workspace/catalogs/catalogs.go index cec03dc2f1..4d202415fe 100755 --- a/cmd/workspace/catalogs/catalogs.go +++ b/cmd/workspace/catalogs/catalogs.go @@ -77,6 +77,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -91,7 +94,9 @@ func newCreate() *cobra.Command { return err } } - createReq.Name = args[0] + if !cmd.Flags().Changed("json") { + createReq.Name = args[0] + } response, err := w.Catalogs.Create(ctx, createReq) if err != nil { @@ -333,6 +338,9 @@ func newUpdate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(1) + } return check(cmd, args) } @@ -347,7 +355,9 @@ func newUpdate() *cobra.Command { return err } } - updateReq.Name = args[0] + if !cmd.Flags().Changed("json") { + updateReq.Name = args[0] + } response, err := w.Catalogs.Update(ctx, updateReq) if err != nil { diff --git a/cmd/workspace/cluster-policies/cluster-policies.go b/cmd/workspace/cluster-policies/cluster-policies.go index f0743573fe..a5b53b6f14 100755 --- a/cmd/workspace/cluster-policies/cluster-policies.go +++ b/cmd/workspace/cluster-policies/cluster-policies.go @@ -71,8 +71,10 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq compute.CreatePolicy + var createJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.Definition, "definition", createReq.Definition, `Policy definition document expressed in Databricks Cluster Policy Definition Language.`) cmd.Flags().StringVar(&createReq.Description, "description", createReq.Description, `Additional human-readable description of the cluster policy.`) @@ -90,6 +92,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -98,7 +103,15 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - createReq.Name = args[0] + if cmd.Flags().Changed("json") { + err = createJson.Unmarshal(&createReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + createReq.Name = args[0] + } response, err := w.ClusterPolicies.Create(ctx, createReq) if err != nil { @@ -138,8 +151,10 @@ func newDelete() *cobra.Command { cmd := &cobra.Command{} var deleteReq compute.DeletePolicy + var deleteJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&deleteJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete POLICY_ID" cmd.Short = `Delete a cluster policy.` @@ -155,6 +170,12 @@ func newDelete() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = deleteJson.Unmarshal(&deleteReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No POLICY_ID argument specified. Loading names for Cluster Policies drop-down." @@ -212,8 +233,10 @@ func newEdit() *cobra.Command { cmd := &cobra.Command{} var editReq compute.EditPolicy + var editJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&editJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&editReq.Definition, "definition", editReq.Definition, `Policy definition document expressed in Databricks Cluster Policy Definition Language.`) cmd.Flags().StringVar(&editReq.Description, "description", editReq.Description, `Additional human-readable description of the cluster policy.`) @@ -232,6 +255,9 @@ func newEdit() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -240,8 +266,18 @@ func newEdit() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - editReq.PolicyId = args[0] - editReq.Name = args[1] + if cmd.Flags().Changed("json") { + err = editJson.Unmarshal(&editReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + editReq.PolicyId = args[0] + } + if !cmd.Flags().Changed("json") { + editReq.Name = args[1] + } err = w.ClusterPolicies.Edit(ctx, editReq) if err != nil { diff --git a/cmd/workspace/clusters/clusters.go b/cmd/workspace/clusters/clusters.go index 6a9fe8aa8f..3900d37525 100755 --- a/cmd/workspace/clusters/clusters.go +++ b/cmd/workspace/clusters/clusters.go @@ -75,8 +75,10 @@ func newChangeOwner() *cobra.Command { cmd := &cobra.Command{} var changeOwnerReq compute.ChangeClusterOwner + var changeOwnerJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&changeOwnerJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "change-owner CLUSTER_ID OWNER_USERNAME" cmd.Short = `Change cluster owner.` @@ -89,6 +91,9 @@ func newChangeOwner() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -97,8 +102,18 @@ func newChangeOwner() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - changeOwnerReq.ClusterId = args[0] - changeOwnerReq.OwnerUsername = args[1] + if cmd.Flags().Changed("json") { + err = changeOwnerJson.Unmarshal(&changeOwnerReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + changeOwnerReq.ClusterId = args[0] + } + if !cmd.Flags().Changed("json") { + changeOwnerReq.OwnerUsername = args[1] + } err = w.Clusters.ChangeOwner(ctx, changeOwnerReq) if err != nil { @@ -193,6 +208,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -207,7 +225,9 @@ func newCreate() *cobra.Command { return err } } - createReq.SparkVersion = args[0] + if !cmd.Flags().Changed("json") { + createReq.SparkVersion = args[0] + } wait, err := w.Clusters.Create(ctx, createReq) if err != nil { @@ -259,6 +279,7 @@ func newDelete() *cobra.Command { cmd := &cobra.Command{} var deleteReq compute.DeleteCluster + var deleteJson flags.JsonFlag var deleteSkipWait bool var deleteTimeout time.Duration @@ -266,6 +287,7 @@ func newDelete() *cobra.Command { cmd.Flags().BoolVar(&deleteSkipWait, "no-wait", deleteSkipWait, `do not wait to reach TERMINATED state`) cmd.Flags().DurationVar(&deleteTimeout, "timeout", 20*time.Minute, `maximum amount of time to reach TERMINATED state`) // TODO: short flags + cmd.Flags().Var(&deleteJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete CLUSTER_ID" cmd.Short = `Terminate cluster.` @@ -283,6 +305,12 @@ func newDelete() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = deleteJson.Unmarshal(&deleteReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." @@ -411,6 +439,9 @@ func newEdit() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -425,8 +456,12 @@ func newEdit() *cobra.Command { return err } } - editReq.ClusterId = args[0] - editReq.SparkVersion = args[1] + if !cmd.Flags().Changed("json") { + editReq.ClusterId = args[0] + } + if !cmd.Flags().Changed("json") { + editReq.SparkVersion = args[1] + } wait, err := w.Clusters.Edit(ctx, editReq) if err != nil { @@ -961,8 +996,10 @@ func newPermanentDelete() *cobra.Command { cmd := &cobra.Command{} var permanentDeleteReq compute.PermanentDeleteCluster + var permanentDeleteJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&permanentDeleteJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "permanent-delete CLUSTER_ID" cmd.Short = `Permanently delete cluster.` @@ -982,6 +1019,12 @@ func newPermanentDelete() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = permanentDeleteJson.Unmarshal(&permanentDeleteReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." @@ -1039,8 +1082,10 @@ func newPin() *cobra.Command { cmd := &cobra.Command{} var pinReq compute.PinCluster + var pinJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&pinJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "pin CLUSTER_ID" cmd.Short = `Pin cluster.` @@ -1057,6 +1102,12 @@ func newPin() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = pinJson.Unmarshal(&pinReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." @@ -1216,6 +1267,7 @@ func newRestart() *cobra.Command { cmd := &cobra.Command{} var restartReq compute.RestartCluster + var restartJson flags.JsonFlag var restartSkipWait bool var restartTimeout time.Duration @@ -1223,6 +1275,7 @@ func newRestart() *cobra.Command { cmd.Flags().BoolVar(&restartSkipWait, "no-wait", restartSkipWait, `do not wait to reach RUNNING state`) cmd.Flags().DurationVar(&restartTimeout, "timeout", 20*time.Minute, `maximum amount of time to reach RUNNING state`) // TODO: short flags + cmd.Flags().Var(&restartJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&restartReq.RestartUser, "restart-user", restartReq.RestartUser, `.`) @@ -1240,6 +1293,12 @@ func newRestart() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = restartJson.Unmarshal(&restartReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." @@ -1442,6 +1501,7 @@ func newStart() *cobra.Command { cmd := &cobra.Command{} var startReq compute.StartCluster + var startJson flags.JsonFlag var startSkipWait bool var startTimeout time.Duration @@ -1449,6 +1509,7 @@ func newStart() *cobra.Command { cmd.Flags().BoolVar(&startSkipWait, "no-wait", startSkipWait, `do not wait to reach RUNNING state`) cmd.Flags().DurationVar(&startTimeout, "timeout", 20*time.Minute, `maximum amount of time to reach RUNNING state`) // TODO: short flags + cmd.Flags().Var(&startJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "start CLUSTER_ID" cmd.Short = `Start terminated cluster.` @@ -1470,6 +1531,12 @@ func newStart() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = startJson.Unmarshal(&startReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." @@ -1539,8 +1606,10 @@ func newUnpin() *cobra.Command { cmd := &cobra.Command{} var unpinReq compute.UnpinCluster + var unpinJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&unpinJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "unpin CLUSTER_ID" cmd.Short = `Unpin cluster.` @@ -1557,6 +1626,12 @@ func newUnpin() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = unpinJson.Unmarshal(&unpinReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." diff --git a/cmd/workspace/dashboards/dashboards.go b/cmd/workspace/dashboards/dashboards.go index 9e3d91a735..745af7eb44 100755 --- a/cmd/workspace/dashboards/dashboards.go +++ b/cmd/workspace/dashboards/dashboards.go @@ -66,6 +66,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } diff --git a/cmd/workspace/experiments/experiments.go b/cmd/workspace/experiments/experiments.go index 45cf947fcd..ed807ae5df 100755 --- a/cmd/workspace/experiments/experiments.go +++ b/cmd/workspace/experiments/experiments.go @@ -79,6 +79,9 @@ func newCreateExperiment() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -93,7 +96,9 @@ func newCreateExperiment() *cobra.Command { return err } } - createExperimentReq.Name = args[0] + if !cmd.Flags().Changed("json") { + createExperimentReq.Name = args[0] + } response, err := w.Experiments.CreateExperiment(ctx, createExperimentReq) if err != nil { @@ -209,8 +214,10 @@ func newDeleteExperiment() *cobra.Command { cmd := &cobra.Command{} var deleteExperimentReq ml.DeleteExperiment + var deleteExperimentJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&deleteExperimentJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete-experiment EXPERIMENT_ID" cmd.Short = `Delete an experiment.` @@ -224,6 +231,9 @@ func newDeleteExperiment() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -232,7 +242,15 @@ func newDeleteExperiment() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - deleteExperimentReq.ExperimentId = args[0] + if cmd.Flags().Changed("json") { + err = deleteExperimentJson.Unmarshal(&deleteExperimentReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + deleteExperimentReq.ExperimentId = args[0] + } err = w.Experiments.DeleteExperiment(ctx, deleteExperimentReq) if err != nil { @@ -272,8 +290,10 @@ func newDeleteRun() *cobra.Command { cmd := &cobra.Command{} var deleteRunReq ml.DeleteRun + var deleteRunJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&deleteRunJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete-run RUN_ID" cmd.Short = `Delete a run.` @@ -285,6 +305,9 @@ func newDeleteRun() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -293,7 +316,15 @@ func newDeleteRun() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - deleteRunReq.RunId = args[0] + if cmd.Flags().Changed("json") { + err = deleteRunJson.Unmarshal(&deleteRunReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + deleteRunReq.RunId = args[0] + } err = w.Experiments.DeleteRun(ctx, deleteRunReq) if err != nil { @@ -333,8 +364,10 @@ func newDeleteRuns() *cobra.Command { cmd := &cobra.Command{} var deleteRunsReq ml.DeleteRuns + var deleteRunsJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&deleteRunsJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().IntVar(&deleteRunsReq.MaxRuns, "max-runs", deleteRunsReq.MaxRuns, `An optional positive integer indicating the maximum number of runs to delete.`) @@ -349,6 +382,9 @@ func newDeleteRuns() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -357,10 +393,20 @@ func newDeleteRuns() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - deleteRunsReq.ExperimentId = args[0] - _, err = fmt.Sscan(args[1], &deleteRunsReq.MaxTimestampMillis) - if err != nil { - return fmt.Errorf("invalid MAX_TIMESTAMP_MILLIS: %s", args[1]) + if cmd.Flags().Changed("json") { + err = deleteRunsJson.Unmarshal(&deleteRunsReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + deleteRunsReq.ExperimentId = args[0] + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[1], &deleteRunsReq.MaxTimestampMillis) + if err != nil { + return fmt.Errorf("invalid MAX_TIMESTAMP_MILLIS: %s", args[1]) + } } response, err := w.Experiments.DeleteRuns(ctx, deleteRunsReq) @@ -401,8 +447,10 @@ func newDeleteTag() *cobra.Command { cmd := &cobra.Command{} var deleteTagReq ml.DeleteTag + var deleteTagJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&deleteTagJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete-tag RUN_ID KEY" cmd.Short = `Delete a tag.` @@ -415,6 +463,9 @@ func newDeleteTag() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -423,8 +474,18 @@ func newDeleteTag() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - deleteTagReq.RunId = args[0] - deleteTagReq.Key = args[1] + if cmd.Flags().Changed("json") { + err = deleteTagJson.Unmarshal(&deleteTagReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + deleteTagReq.RunId = args[0] + } + if !cmd.Flags().Changed("json") { + deleteTagReq.Key = args[1] + } err = w.Experiments.DeleteTag(ctx, deleteTagReq) if err != nil { @@ -1160,8 +1221,10 @@ func newLogMetric() *cobra.Command { cmd := &cobra.Command{} var logMetricReq ml.LogMetric + var logMetricJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&logMetricJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&logMetricReq.RunId, "run-id", logMetricReq.RunId, `ID of the run under which to log the metric.`) cmd.Flags().StringVar(&logMetricReq.RunUuid, "run-uuid", logMetricReq.RunUuid, `[Deprecated, use run_id instead] ID of the run under which to log the metric.`) @@ -1179,6 +1242,9 @@ func newLogMetric() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -1187,14 +1253,26 @@ func newLogMetric() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - logMetricReq.Key = args[0] - _, err = fmt.Sscan(args[1], &logMetricReq.Value) - if err != nil { - return fmt.Errorf("invalid VALUE: %s", args[1]) + if cmd.Flags().Changed("json") { + err = logMetricJson.Unmarshal(&logMetricReq) + if err != nil { + return err + } } - _, err = fmt.Sscan(args[2], &logMetricReq.Timestamp) - if err != nil { - return fmt.Errorf("invalid TIMESTAMP: %s", args[2]) + if !cmd.Flags().Changed("json") { + logMetricReq.Key = args[0] + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[1], &logMetricReq.Value) + if err != nil { + return fmt.Errorf("invalid VALUE: %s", args[1]) + } + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[2], &logMetricReq.Timestamp) + if err != nil { + return fmt.Errorf("invalid TIMESTAMP: %s", args[2]) + } } err = w.Experiments.LogMetric(ctx, logMetricReq) @@ -1235,8 +1313,10 @@ func newLogModel() *cobra.Command { cmd := &cobra.Command{} var logModelReq ml.LogModel + var logModelJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&logModelJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&logModelReq.ModelJson, "model-json", logModelReq.ModelJson, `MLmodel file in json format.`) cmd.Flags().StringVar(&logModelReq.RunId, "run-id", logModelReq.RunId, `ID of the run to log under.`) @@ -1260,6 +1340,13 @@ func newLogModel() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = logModelJson.Unmarshal(&logModelReq) + if err != nil { + return err + } + } + err = w.Experiments.LogModel(ctx, logModelReq) if err != nil { return err @@ -1298,8 +1385,10 @@ func newLogParam() *cobra.Command { cmd := &cobra.Command{} var logParamReq ml.LogParam + var logParamJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&logParamJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&logParamReq.RunId, "run-id", logParamReq.RunId, `ID of the run under which to log the param.`) cmd.Flags().StringVar(&logParamReq.RunUuid, "run-uuid", logParamReq.RunUuid, `[Deprecated, use run_id instead] ID of the run under which to log the param.`) @@ -1317,6 +1406,9 @@ func newLogParam() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -1325,8 +1417,18 @@ func newLogParam() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - logParamReq.Key = args[0] - logParamReq.Value = args[1] + if cmd.Flags().Changed("json") { + err = logParamJson.Unmarshal(&logParamReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + logParamReq.Key = args[0] + } + if !cmd.Flags().Changed("json") { + logParamReq.Value = args[1] + } err = w.Experiments.LogParam(ctx, logParamReq) if err != nil { @@ -1366,8 +1468,10 @@ func newRestoreExperiment() *cobra.Command { cmd := &cobra.Command{} var restoreExperimentReq ml.RestoreExperiment + var restoreExperimentJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&restoreExperimentJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "restore-experiment EXPERIMENT_ID" cmd.Short = `Restores an experiment.` @@ -1384,6 +1488,9 @@ func newRestoreExperiment() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -1392,7 +1499,15 @@ func newRestoreExperiment() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - restoreExperimentReq.ExperimentId = args[0] + if cmd.Flags().Changed("json") { + err = restoreExperimentJson.Unmarshal(&restoreExperimentReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + restoreExperimentReq.ExperimentId = args[0] + } err = w.Experiments.RestoreExperiment(ctx, restoreExperimentReq) if err != nil { @@ -1432,8 +1547,10 @@ func newRestoreRun() *cobra.Command { cmd := &cobra.Command{} var restoreRunReq ml.RestoreRun + var restoreRunJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&restoreRunJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "restore-run RUN_ID" cmd.Short = `Restore a run.` @@ -1445,6 +1562,9 @@ func newRestoreRun() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -1453,7 +1573,15 @@ func newRestoreRun() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - restoreRunReq.RunId = args[0] + if cmd.Flags().Changed("json") { + err = restoreRunJson.Unmarshal(&restoreRunReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + restoreRunReq.RunId = args[0] + } err = w.Experiments.RestoreRun(ctx, restoreRunReq) if err != nil { @@ -1493,8 +1621,10 @@ func newRestoreRuns() *cobra.Command { cmd := &cobra.Command{} var restoreRunsReq ml.RestoreRuns + var restoreRunsJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&restoreRunsJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().IntVar(&restoreRunsReq.MaxRuns, "max-runs", restoreRunsReq.MaxRuns, `An optional positive integer indicating the maximum number of runs to restore.`) @@ -1509,6 +1639,9 @@ func newRestoreRuns() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -1517,10 +1650,20 @@ func newRestoreRuns() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - restoreRunsReq.ExperimentId = args[0] - _, err = fmt.Sscan(args[1], &restoreRunsReq.MinTimestampMillis) - if err != nil { - return fmt.Errorf("invalid MIN_TIMESTAMP_MILLIS: %s", args[1]) + if cmd.Flags().Changed("json") { + err = restoreRunsJson.Unmarshal(&restoreRunsReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + restoreRunsReq.ExperimentId = args[0] + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[1], &restoreRunsReq.MinTimestampMillis) + if err != nil { + return fmt.Errorf("invalid MIN_TIMESTAMP_MILLIS: %s", args[1]) + } } response, err := w.Experiments.RestoreRuns(ctx, restoreRunsReq) @@ -1712,8 +1855,10 @@ func newSetExperimentTag() *cobra.Command { cmd := &cobra.Command{} var setExperimentTagReq ml.SetExperimentTag + var setExperimentTagJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&setExperimentTagJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "set-experiment-tag EXPERIMENT_ID KEY VALUE" cmd.Short = `Set a tag.` @@ -1725,6 +1870,9 @@ func newSetExperimentTag() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -1733,9 +1881,21 @@ func newSetExperimentTag() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - setExperimentTagReq.ExperimentId = args[0] - setExperimentTagReq.Key = args[1] - setExperimentTagReq.Value = args[2] + if cmd.Flags().Changed("json") { + err = setExperimentTagJson.Unmarshal(&setExperimentTagReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + setExperimentTagReq.ExperimentId = args[0] + } + if !cmd.Flags().Changed("json") { + setExperimentTagReq.Key = args[1] + } + if !cmd.Flags().Changed("json") { + setExperimentTagReq.Value = args[2] + } err = w.Experiments.SetExperimentTag(ctx, setExperimentTagReq) if err != nil { @@ -1847,8 +2007,10 @@ func newSetTag() *cobra.Command { cmd := &cobra.Command{} var setTagReq ml.SetTag + var setTagJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&setTagJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&setTagReq.RunId, "run-id", setTagReq.RunId, `ID of the run under which to log the tag.`) cmd.Flags().StringVar(&setTagReq.RunUuid, "run-uuid", setTagReq.RunUuid, `[Deprecated, use run_id instead] ID of the run under which to log the tag.`) @@ -1864,6 +2026,9 @@ func newSetTag() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -1872,8 +2037,18 @@ func newSetTag() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - setTagReq.Key = args[0] - setTagReq.Value = args[1] + if cmd.Flags().Changed("json") { + err = setTagJson.Unmarshal(&setTagReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + setTagReq.Key = args[0] + } + if !cmd.Flags().Changed("json") { + setTagReq.Value = args[1] + } err = w.Experiments.SetTag(ctx, setTagReq) if err != nil { @@ -1913,8 +2088,10 @@ func newUpdateExperiment() *cobra.Command { cmd := &cobra.Command{} var updateExperimentReq ml.UpdateExperiment + var updateExperimentJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&updateExperimentJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&updateExperimentReq.NewName, "new-name", updateExperimentReq.NewName, `If provided, the experiment's name is changed to the new name.`) @@ -1928,6 +2105,9 @@ func newUpdateExperiment() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -1936,7 +2116,15 @@ func newUpdateExperiment() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - updateExperimentReq.ExperimentId = args[0] + if cmd.Flags().Changed("json") { + err = updateExperimentJson.Unmarshal(&updateExperimentReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + updateExperimentReq.ExperimentId = args[0] + } err = w.Experiments.UpdateExperiment(ctx, updateExperimentReq) if err != nil { @@ -2048,8 +2236,10 @@ func newUpdateRun() *cobra.Command { cmd := &cobra.Command{} var updateRunReq ml.UpdateRun + var updateRunJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&updateRunJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().Int64Var(&updateRunReq.EndTime, "end-time", updateRunReq.EndTime, `Unix timestamp in milliseconds of when the run ended.`) cmd.Flags().StringVar(&updateRunReq.RunId, "run-id", updateRunReq.RunId, `ID of the run to update.`) @@ -2074,6 +2264,13 @@ func newUpdateRun() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = updateRunJson.Unmarshal(&updateRunReq) + if err != nil { + return err + } + } + response, err := w.Experiments.UpdateRun(ctx, updateRunReq) if err != nil { return err diff --git a/cmd/workspace/external-locations/external-locations.go b/cmd/workspace/external-locations/external-locations.go index 2b9254f6b8..8f3627beef 100755 --- a/cmd/workspace/external-locations/external-locations.go +++ b/cmd/workspace/external-locations/external-locations.go @@ -81,6 +81,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -95,9 +98,15 @@ func newCreate() *cobra.Command { return err } } - createReq.Name = args[0] - createReq.Url = args[1] - createReq.CredentialName = args[2] + if !cmd.Flags().Changed("json") { + createReq.Name = args[0] + } + if !cmd.Flags().Changed("json") { + createReq.Url = args[1] + } + if !cmd.Flags().Changed("json") { + createReq.CredentialName = args[2] + } response, err := w.ExternalLocations.Create(ctx, createReq) if err != nil { @@ -342,6 +351,9 @@ func newUpdate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(1) + } return check(cmd, args) } @@ -356,7 +368,9 @@ func newUpdate() *cobra.Command { return err } } - updateReq.Name = args[0] + if !cmd.Flags().Changed("json") { + updateReq.Name = args[0] + } response, err := w.ExternalLocations.Update(ctx, updateReq) if err != nil { diff --git a/cmd/workspace/functions/functions.go b/cmd/workspace/functions/functions.go index 02c8531db6..911c6d14fb 100755 --- a/cmd/workspace/functions/functions.go +++ b/cmd/workspace/functions/functions.go @@ -355,8 +355,10 @@ func newUpdate() *cobra.Command { cmd := &cobra.Command{} var updateReq catalog.UpdateFunction + var updateJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&updateJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&updateReq.Owner, "owner", updateReq.Owner, `Username of current owner of function.`) @@ -380,6 +382,12 @@ func newUpdate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = updateJson.Unmarshal(&updateReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No NAME argument specified. Loading names for Functions drop-down." diff --git a/cmd/workspace/git-credentials/git-credentials.go b/cmd/workspace/git-credentials/git-credentials.go index 831b6e238f..81348155f4 100755 --- a/cmd/workspace/git-credentials/git-credentials.go +++ b/cmd/workspace/git-credentials/git-credentials.go @@ -7,6 +7,7 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" + "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/workspace" "github.com/spf13/cobra" ) @@ -52,8 +53,10 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq workspace.CreateCredentials + var createJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.GitUsername, "git-username", createReq.GitUsername, `Git username.`) cmd.Flags().StringVar(&createReq.PersonalAccessToken, "personal-access-token", createReq.PersonalAccessToken, `The personal access token used to authenticate to the corresponding Git provider.`) @@ -71,6 +74,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -79,7 +85,15 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - createReq.GitProvider = args[0] + if cmd.Flags().Changed("json") { + err = createJson.Unmarshal(&createReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + createReq.GitProvider = args[0] + } response, err := w.GitCredentials.Create(ctx, createReq) if err != nil { @@ -320,8 +334,10 @@ func newUpdate() *cobra.Command { cmd := &cobra.Command{} var updateReq workspace.UpdateCredentials + var updateJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&updateJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&updateReq.GitProvider, "git-provider", updateReq.GitProvider, `Git provider.`) cmd.Flags().StringVar(&updateReq.GitUsername, "git-username", updateReq.GitUsername, `Git username.`) @@ -340,6 +356,12 @@ func newUpdate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = updateJson.Unmarshal(&updateReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No CREDENTIAL_ID argument specified. Loading names for Git Credentials drop-down." diff --git a/cmd/workspace/global-init-scripts/global-init-scripts.go b/cmd/workspace/global-init-scripts/global-init-scripts.go index 39335d73b0..513b96371e 100755 --- a/cmd/workspace/global-init-scripts/global-init-scripts.go +++ b/cmd/workspace/global-init-scripts/global-init-scripts.go @@ -7,6 +7,7 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" + "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/compute" "github.com/spf13/cobra" ) @@ -55,8 +56,10 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq compute.GlobalInitScriptCreateRequest + var createJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().BoolVar(&createReq.Enabled, "enabled", createReq.Enabled, `Specifies whether the script is enabled.`) cmd.Flags().IntVar(&createReq.Position, "position", createReq.Position, `The position of a global init script, where 0 represents the first script to run, 1 is the second script to run, in ascending order.`) @@ -71,6 +74,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -79,8 +85,18 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - createReq.Name = args[0] - createReq.Script = args[1] + if cmd.Flags().Changed("json") { + err = createJson.Unmarshal(&createReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + createReq.Name = args[0] + } + if !cmd.Flags().Changed("json") { + createReq.Script = args[1] + } response, err := w.GlobalInitScripts.Create(ctx, createReq) if err != nil { @@ -317,13 +333,15 @@ func newUpdate() *cobra.Command { cmd := &cobra.Command{} var updateReq compute.GlobalInitScriptUpdateRequest + var updateJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&updateJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().BoolVar(&updateReq.Enabled, "enabled", updateReq.Enabled, `Specifies whether the script is enabled.`) cmd.Flags().IntVar(&updateReq.Position, "position", updateReq.Position, `The position of a script, where 0 represents the first script to run, 1 is the second script to run, in ascending order.`) - cmd.Use = "update NAME SCRIPT SCRIPT_ID" + cmd.Use = "update SCRIPT_ID NAME SCRIPT" cmd.Short = `Update init script.` cmd.Long = `Update init script. @@ -334,6 +352,9 @@ func newUpdate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(1) + } return check(cmd, args) } @@ -342,9 +363,19 @@ func newUpdate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - updateReq.Name = args[0] - updateReq.Script = args[1] - updateReq.ScriptId = args[2] + if cmd.Flags().Changed("json") { + err = updateJson.Unmarshal(&updateReq) + if err != nil { + return err + } + } + updateReq.ScriptId = args[0] + if !cmd.Flags().Changed("json") { + updateReq.Name = args[1] + } + if !cmd.Flags().Changed("json") { + updateReq.Script = args[2] + } err = w.GlobalInitScripts.Update(ctx, updateReq) if err != nil { diff --git a/cmd/workspace/instance-pools/instance-pools.go b/cmd/workspace/instance-pools/instance-pools.go index e220dba330..4af4e45b94 100755 --- a/cmd/workspace/instance-pools/instance-pools.go +++ b/cmd/workspace/instance-pools/instance-pools.go @@ -92,6 +92,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -106,8 +109,12 @@ func newCreate() *cobra.Command { return err } } - createReq.InstancePoolName = args[0] - createReq.NodeTypeId = args[1] + if !cmd.Flags().Changed("json") { + createReq.InstancePoolName = args[0] + } + if !cmd.Flags().Changed("json") { + createReq.NodeTypeId = args[1] + } response, err := w.InstancePools.Create(ctx, createReq) if err != nil { @@ -147,8 +154,10 @@ func newDelete() *cobra.Command { cmd := &cobra.Command{} var deleteReq compute.DeleteInstancePool + var deleteJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&deleteJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete INSTANCE_POOL_ID" cmd.Short = `Delete an instance pool.` @@ -164,6 +173,12 @@ func newDelete() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = deleteJson.Unmarshal(&deleteReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No INSTANCE_POOL_ID argument specified. Loading names for Instance Pools drop-down." @@ -241,6 +256,9 @@ func newEdit() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -255,9 +273,15 @@ func newEdit() *cobra.Command { return err } } - editReq.InstancePoolId = args[0] - editReq.InstancePoolName = args[1] - editReq.NodeTypeId = args[2] + if !cmd.Flags().Changed("json") { + editReq.InstancePoolId = args[0] + } + if !cmd.Flags().Changed("json") { + editReq.InstancePoolName = args[1] + } + if !cmd.Flags().Changed("json") { + editReq.NodeTypeId = args[2] + } err = w.InstancePools.Edit(ctx, editReq) if err != nil { diff --git a/cmd/workspace/instance-profiles/instance-profiles.go b/cmd/workspace/instance-profiles/instance-profiles.go index f42828bf4a..b3fdfc659a 100755 --- a/cmd/workspace/instance-profiles/instance-profiles.go +++ b/cmd/workspace/instance-profiles/instance-profiles.go @@ -5,6 +5,7 @@ package instance_profiles import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" + "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/compute" "github.com/spf13/cobra" ) @@ -50,8 +51,10 @@ func newAdd() *cobra.Command { cmd := &cobra.Command{} var addReq compute.AddInstanceProfile + var addJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&addJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&addReq.IamRoleArn, "iam-role-arn", addReq.IamRoleArn, `The AWS IAM role ARN of the role associated with the instance profile.`) cmd.Flags().BoolVar(&addReq.IsMetaInstanceProfile, "is-meta-instance-profile", addReq.IsMetaInstanceProfile, `Boolean flag indicating whether the instance profile should only be used in credential passthrough scenarios.`) @@ -68,6 +71,9 @@ func newAdd() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -76,7 +82,15 @@ func newAdd() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - addReq.InstanceProfileArn = args[0] + if cmd.Flags().Changed("json") { + err = addJson.Unmarshal(&addReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + addReq.InstanceProfileArn = args[0] + } err = w.InstanceProfiles.Add(ctx, addReq) if err != nil { @@ -116,8 +130,10 @@ func newEdit() *cobra.Command { cmd := &cobra.Command{} var editReq compute.InstanceProfile + var editJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&editJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&editReq.IamRoleArn, "iam-role-arn", editReq.IamRoleArn, `The AWS IAM role ARN of the role associated with the instance profile.`) cmd.Flags().BoolVar(&editReq.IsMetaInstanceProfile, "is-meta-instance-profile", editReq.IsMetaInstanceProfile, `Boolean flag indicating whether the instance profile should only be used in credential passthrough scenarios.`) @@ -146,6 +162,9 @@ func newEdit() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -154,7 +173,15 @@ func newEdit() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - editReq.InstanceProfileArn = args[0] + if cmd.Flags().Changed("json") { + err = editJson.Unmarshal(&editReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + editReq.InstanceProfileArn = args[0] + } err = w.InstanceProfiles.Edit(ctx, editReq) if err != nil { @@ -244,8 +271,10 @@ func newRemove() *cobra.Command { cmd := &cobra.Command{} var removeReq compute.RemoveInstanceProfile + var removeJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&removeJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "remove INSTANCE_PROFILE_ARN" cmd.Short = `Remove the instance profile.` @@ -260,6 +289,9 @@ func newRemove() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -268,7 +300,15 @@ func newRemove() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - removeReq.InstanceProfileArn = args[0] + if cmd.Flags().Changed("json") { + err = removeJson.Unmarshal(&removeReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + removeReq.InstanceProfileArn = args[0] + } err = w.InstanceProfiles.Remove(ctx, removeReq) if err != nil { diff --git a/cmd/workspace/jobs/jobs.go b/cmd/workspace/jobs/jobs.go index d8f1f27643..bcf034409f 100755 --- a/cmd/workspace/jobs/jobs.go +++ b/cmd/workspace/jobs/jobs.go @@ -66,8 +66,10 @@ func newCancelAllRuns() *cobra.Command { cmd := &cobra.Command{} var cancelAllRunsReq jobs.CancelAllRuns + var cancelAllRunsJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&cancelAllRunsJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().BoolVar(&cancelAllRunsReq.AllQueuedRuns, "all-queued-runs", cancelAllRunsReq.AllQueuedRuns, `Optional boolean parameter to cancel all queued runs.`) cmd.Flags().Int64Var(&cancelAllRunsReq.JobId, "job-id", cancelAllRunsReq.JobId, `The canonical identifier of the job to cancel all runs of.`) @@ -91,6 +93,13 @@ func newCancelAllRuns() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = cancelAllRunsJson.Unmarshal(&cancelAllRunsReq) + if err != nil { + return err + } + } + err = w.Jobs.CancelAllRuns(ctx, cancelAllRunsReq) if err != nil { return err @@ -129,6 +138,7 @@ func newCancelRun() *cobra.Command { cmd := &cobra.Command{} var cancelRunReq jobs.CancelRun + var cancelRunJson flags.JsonFlag var cancelRunSkipWait bool var cancelRunTimeout time.Duration @@ -136,6 +146,7 @@ func newCancelRun() *cobra.Command { cmd.Flags().BoolVar(&cancelRunSkipWait, "no-wait", cancelRunSkipWait, `do not wait to reach TERMINATED or SKIPPED state`) cmd.Flags().DurationVar(&cancelRunTimeout, "timeout", 20*time.Minute, `maximum amount of time to reach TERMINATED or SKIPPED state`) // TODO: short flags + cmd.Flags().Var(&cancelRunJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "cancel-run RUN_ID" cmd.Short = `Cancel a run.` @@ -151,6 +162,12 @@ func newCancelRun() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = cancelRunJson.Unmarshal(&cancelRunReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No RUN_ID argument specified. Loading names for Jobs drop-down." @@ -300,8 +317,10 @@ func newDelete() *cobra.Command { cmd := &cobra.Command{} var deleteReq jobs.DeleteJob + var deleteJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&deleteJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete JOB_ID" cmd.Short = `Delete a job.` @@ -316,6 +335,12 @@ func newDelete() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = deleteJson.Unmarshal(&deleteReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No JOB_ID argument specified. Loading names for Jobs drop-down." @@ -376,8 +401,10 @@ func newDeleteRun() *cobra.Command { cmd := &cobra.Command{} var deleteRunReq jobs.DeleteRun + var deleteRunJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&deleteRunJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete-run RUN_ID" cmd.Short = `Delete a job run.` @@ -392,6 +419,12 @@ func newDeleteRun() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = deleteRunJson.Unmarshal(&deleteRunReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No RUN_ID argument specified. Loading names for Jobs drop-down." diff --git a/cmd/workspace/metastores/metastores.go b/cmd/workspace/metastores/metastores.go index 8dcc36c073..92144ec7b1 100755 --- a/cmd/workspace/metastores/metastores.go +++ b/cmd/workspace/metastores/metastores.go @@ -7,6 +7,7 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" + "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/catalog" "github.com/spf13/cobra" ) @@ -59,10 +60,12 @@ func newAssign() *cobra.Command { cmd := &cobra.Command{} var assignReq catalog.CreateMetastoreAssignment + var assignJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&assignJson, "json", `either inline JSON string or @path/to/file.json with request body`) - cmd.Use = "assign METASTORE_ID DEFAULT_CATALOG_NAME WORKSPACE_ID" + cmd.Use = "assign WORKSPACE_ID METASTORE_ID DEFAULT_CATALOG_NAME" cmd.Short = `Create an assignment.` cmd.Long = `Create an assignment. @@ -74,6 +77,9 @@ func newAssign() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(1) + } return check(cmd, args) } @@ -82,11 +88,21 @@ func newAssign() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - assignReq.MetastoreId = args[0] - assignReq.DefaultCatalogName = args[1] - _, err = fmt.Sscan(args[2], &assignReq.WorkspaceId) + if cmd.Flags().Changed("json") { + err = assignJson.Unmarshal(&assignReq) + if err != nil { + return err + } + } + _, err = fmt.Sscan(args[0], &assignReq.WorkspaceId) if err != nil { - return fmt.Errorf("invalid WORKSPACE_ID: %s", args[2]) + return fmt.Errorf("invalid WORKSPACE_ID: %s", args[0]) + } + if !cmd.Flags().Changed("json") { + assignReq.MetastoreId = args[1] + } + if !cmd.Flags().Changed("json") { + assignReq.DefaultCatalogName = args[2] } err = w.Metastores.Assign(ctx, assignReq) @@ -127,8 +143,10 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq catalog.CreateMetastore + var createJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.Region, "region", createReq.Region, `Cloud region which the metastore serves (e.g., us-west-2, westus).`) @@ -142,6 +160,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -150,8 +171,18 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - createReq.Name = args[0] - createReq.StorageRoot = args[1] + if cmd.Flags().Changed("json") { + err = createJson.Unmarshal(&createReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + createReq.Name = args[0] + } + if !cmd.Flags().Changed("json") { + createReq.StorageRoot = args[1] + } response, err := w.Metastores.Create(ctx, createReq) if err != nil { @@ -314,8 +345,10 @@ func newEnableOptimization() *cobra.Command { cmd := &cobra.Command{} var enableOptimizationReq catalog.UpdatePredictiveOptimization + var enableOptimizationJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&enableOptimizationJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "enable-optimization METASTORE_ID ENABLE" cmd.Short = `Toggle predictive optimization on the metastore.` @@ -330,6 +363,9 @@ func newEnableOptimization() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -338,10 +374,20 @@ func newEnableOptimization() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - enableOptimizationReq.MetastoreId = args[0] - _, err = fmt.Sscan(args[1], &enableOptimizationReq.Enable) - if err != nil { - return fmt.Errorf("invalid ENABLE: %s", args[1]) + if cmd.Flags().Changed("json") { + err = enableOptimizationJson.Unmarshal(&enableOptimizationReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + enableOptimizationReq.MetastoreId = args[0] + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[1], &enableOptimizationReq.Enable) + if err != nil { + return fmt.Errorf("invalid ENABLE: %s", args[1]) + } } response, err := w.Metastores.EnableOptimization(ctx, enableOptimizationReq) @@ -620,8 +666,10 @@ func newUpdate() *cobra.Command { cmd := &cobra.Command{} var updateReq catalog.UpdateMetastore + var updateJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&updateJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&updateReq.DeltaSharingOrganizationName, "delta-sharing-organization-name", updateReq.DeltaSharingOrganizationName, `The organization name of a Delta Sharing entity, to be used in Databricks-to-Databricks Delta Sharing as the official name.`) cmd.Flags().Int64Var(&updateReq.DeltaSharingRecipientTokenLifetimeInSeconds, "delta-sharing-recipient-token-lifetime-in-seconds", updateReq.DeltaSharingRecipientTokenLifetimeInSeconds, `The lifetime of delta sharing recipient token in seconds.`) @@ -645,6 +693,12 @@ func newUpdate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = updateJson.Unmarshal(&updateReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No ID argument specified. Loading names for Metastores drop-down." @@ -702,8 +756,10 @@ func newUpdateAssignment() *cobra.Command { cmd := &cobra.Command{} var updateAssignmentReq catalog.UpdateMetastoreAssignment + var updateAssignmentJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&updateAssignmentJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&updateAssignmentReq.DefaultCatalogName, "default-catalog-name", updateAssignmentReq.DefaultCatalogName, `The name of the default catalog for the metastore.`) cmd.Flags().StringVar(&updateAssignmentReq.MetastoreId, "metastore-id", updateAssignmentReq.MetastoreId, `The unique ID of the metastore.`) @@ -724,6 +780,12 @@ func newUpdateAssignment() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = updateAssignmentJson.Unmarshal(&updateAssignmentReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No WORKSPACE_ID argument specified. Loading names for Metastores drop-down." diff --git a/cmd/workspace/model-registry/model-registry.go b/cmd/workspace/model-registry/model-registry.go index ab531078cd..8da9e62185 100755 --- a/cmd/workspace/model-registry/model-registry.go +++ b/cmd/workspace/model-registry/model-registry.go @@ -49,8 +49,10 @@ func newApproveTransitionRequest() *cobra.Command { cmd := &cobra.Command{} var approveTransitionRequestReq ml.ApproveTransitionRequest + var approveTransitionRequestJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&approveTransitionRequestJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&approveTransitionRequestReq.Comment, "comment", approveTransitionRequestReq.Comment, `User-provided comment on the action.`) @@ -64,6 +66,9 @@ func newApproveTransitionRequest() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(4) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -72,15 +77,29 @@ func newApproveTransitionRequest() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - approveTransitionRequestReq.Name = args[0] - approveTransitionRequestReq.Version = args[1] - _, err = fmt.Sscan(args[2], &approveTransitionRequestReq.Stage) - if err != nil { - return fmt.Errorf("invalid STAGE: %s", args[2]) + if cmd.Flags().Changed("json") { + err = approveTransitionRequestJson.Unmarshal(&approveTransitionRequestReq) + if err != nil { + return err + } } - _, err = fmt.Sscan(args[3], &approveTransitionRequestReq.ArchiveExistingVersions) - if err != nil { - return fmt.Errorf("invalid ARCHIVE_EXISTING_VERSIONS: %s", args[3]) + if !cmd.Flags().Changed("json") { + approveTransitionRequestReq.Name = args[0] + } + if !cmd.Flags().Changed("json") { + approveTransitionRequestReq.Version = args[1] + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[2], &approveTransitionRequestReq.Stage) + if err != nil { + return fmt.Errorf("invalid STAGE: %s", args[2]) + } + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[3], &approveTransitionRequestReq.ArchiveExistingVersions) + if err != nil { + return fmt.Errorf("invalid ARCHIVE_EXISTING_VERSIONS: %s", args[3]) + } } response, err := w.ModelRegistry.ApproveTransitionRequest(ctx, approveTransitionRequestReq) @@ -121,8 +140,10 @@ func newCreateComment() *cobra.Command { cmd := &cobra.Command{} var createCommentReq ml.CreateComment + var createCommentJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&createCommentJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "create-comment NAME VERSION COMMENT" cmd.Short = `Post a comment.` @@ -136,6 +157,9 @@ func newCreateComment() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -144,9 +168,21 @@ func newCreateComment() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - createCommentReq.Name = args[0] - createCommentReq.Version = args[1] - createCommentReq.Comment = args[2] + if cmd.Flags().Changed("json") { + err = createCommentJson.Unmarshal(&createCommentReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + createCommentReq.Name = args[0] + } + if !cmd.Flags().Changed("json") { + createCommentReq.Version = args[1] + } + if !cmd.Flags().Changed("json") { + createCommentReq.Comment = args[2] + } response, err := w.ModelRegistry.CreateComment(ctx, createCommentReq) if err != nil { @@ -207,6 +243,9 @@ func newCreateModel() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -221,7 +260,9 @@ func newCreateModel() *cobra.Command { return err } } - createModelReq.Name = args[0] + if !cmd.Flags().Changed("json") { + createModelReq.Name = args[0] + } response, err := w.ModelRegistry.CreateModel(ctx, createModelReq) if err != nil { @@ -281,6 +322,9 @@ func newCreateModelVersion() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -295,8 +339,12 @@ func newCreateModelVersion() *cobra.Command { return err } } - createModelVersionReq.Name = args[0] - createModelVersionReq.Source = args[1] + if !cmd.Flags().Changed("json") { + createModelVersionReq.Name = args[0] + } + if !cmd.Flags().Changed("json") { + createModelVersionReq.Source = args[1] + } response, err := w.ModelRegistry.CreateModelVersion(ctx, createModelVersionReq) if err != nil { @@ -336,8 +384,10 @@ func newCreateTransitionRequest() *cobra.Command { cmd := &cobra.Command{} var createTransitionRequestReq ml.CreateTransitionRequest + var createTransitionRequestJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&createTransitionRequestJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createTransitionRequestReq.Comment, "comment", createTransitionRequestReq.Comment, `User-provided comment on the action.`) @@ -351,6 +401,9 @@ func newCreateTransitionRequest() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -359,11 +412,23 @@ func newCreateTransitionRequest() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - createTransitionRequestReq.Name = args[0] - createTransitionRequestReq.Version = args[1] - _, err = fmt.Sscan(args[2], &createTransitionRequestReq.Stage) - if err != nil { - return fmt.Errorf("invalid STAGE: %s", args[2]) + if cmd.Flags().Changed("json") { + err = createTransitionRequestJson.Unmarshal(&createTransitionRequestReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + createTransitionRequestReq.Name = args[0] + } + if !cmd.Flags().Changed("json") { + createTransitionRequestReq.Version = args[1] + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[2], &createTransitionRequestReq.Stage) + if err != nil { + return fmt.Errorf("invalid STAGE: %s", args[2]) + } } response, err := w.ModelRegistry.CreateTransitionRequest(ctx, createTransitionRequestReq) @@ -935,6 +1000,9 @@ func newGetLatestVersions() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -949,7 +1017,9 @@ func newGetLatestVersions() *cobra.Command { return err } } - getLatestVersionsReq.Name = args[0] + if !cmd.Flags().Changed("json") { + getLatestVersionsReq.Name = args[0] + } response, err := w.ModelRegistry.GetLatestVersionsAll(ctx, getLatestVersionsReq) if err != nil { @@ -1426,10 +1496,8 @@ func newListWebhooks() *cobra.Command { cmd := &cobra.Command{} var listWebhooksReq ml.ListWebhooksRequest - var listWebhooksJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listWebhooksJson, "json", `either inline JSON string or @path/to/file.json with request body`) // TODO: array: events cmd.Flags().StringVar(&listWebhooksReq.ModelName, "model-name", listWebhooksReq.ModelName, `If not specified, all webhooks associated with the specified events are listed, regardless of their associated model.`) @@ -1455,13 +1523,6 @@ func newListWebhooks() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listWebhooksJson.Unmarshal(&listWebhooksReq) - if err != nil { - return err - } - } - response, err := w.ModelRegistry.ListWebhooksAll(ctx, listWebhooksReq) if err != nil { return err @@ -1500,8 +1561,10 @@ func newRejectTransitionRequest() *cobra.Command { cmd := &cobra.Command{} var rejectTransitionRequestReq ml.RejectTransitionRequest + var rejectTransitionRequestJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&rejectTransitionRequestJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&rejectTransitionRequestReq.Comment, "comment", rejectTransitionRequestReq.Comment, `User-provided comment on the action.`) @@ -1515,6 +1578,9 @@ func newRejectTransitionRequest() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -1523,11 +1589,23 @@ func newRejectTransitionRequest() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - rejectTransitionRequestReq.Name = args[0] - rejectTransitionRequestReq.Version = args[1] - _, err = fmt.Sscan(args[2], &rejectTransitionRequestReq.Stage) - if err != nil { - return fmt.Errorf("invalid STAGE: %s", args[2]) + if cmd.Flags().Changed("json") { + err = rejectTransitionRequestJson.Unmarshal(&rejectTransitionRequestReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + rejectTransitionRequestReq.Name = args[0] + } + if !cmd.Flags().Changed("json") { + rejectTransitionRequestReq.Version = args[1] + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[2], &rejectTransitionRequestReq.Stage) + if err != nil { + return fmt.Errorf("invalid STAGE: %s", args[2]) + } } response, err := w.ModelRegistry.RejectTransitionRequest(ctx, rejectTransitionRequestReq) @@ -1568,8 +1646,10 @@ func newRenameModel() *cobra.Command { cmd := &cobra.Command{} var renameModelReq ml.RenameModelRequest + var renameModelJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&renameModelJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&renameModelReq.NewName, "new-name", renameModelReq.NewName, `If provided, updates the name for this registered_model.`) @@ -1583,6 +1663,9 @@ func newRenameModel() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -1591,7 +1674,15 @@ func newRenameModel() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - renameModelReq.Name = args[0] + if cmd.Flags().Changed("json") { + err = renameModelJson.Unmarshal(&renameModelReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + renameModelReq.Name = args[0] + } response, err := w.ModelRegistry.RenameModel(ctx, renameModelReq) if err != nil { @@ -1631,10 +1722,8 @@ func newSearchModelVersions() *cobra.Command { cmd := &cobra.Command{} var searchModelVersionsReq ml.SearchModelVersionsRequest - var searchModelVersionsJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&searchModelVersionsJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&searchModelVersionsReq.Filter, "filter", searchModelVersionsReq.Filter, `String filter condition, like "name='my-model-name'".`) cmd.Flags().IntVar(&searchModelVersionsReq.MaxResults, "max-results", searchModelVersionsReq.MaxResults, `Maximum number of models desired.`) @@ -1659,13 +1748,6 @@ func newSearchModelVersions() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = searchModelVersionsJson.Unmarshal(&searchModelVersionsReq) - if err != nil { - return err - } - } - response, err := w.ModelRegistry.SearchModelVersionsAll(ctx, searchModelVersionsReq) if err != nil { return err @@ -1704,10 +1786,8 @@ func newSearchModels() *cobra.Command { cmd := &cobra.Command{} var searchModelsReq ml.SearchModelsRequest - var searchModelsJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&searchModelsJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&searchModelsReq.Filter, "filter", searchModelsReq.Filter, `String filter condition, like "name LIKE 'my-model-name'".`) cmd.Flags().IntVar(&searchModelsReq.MaxResults, "max-results", searchModelsReq.MaxResults, `Maximum number of models desired.`) @@ -1732,13 +1812,6 @@ func newSearchModels() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = searchModelsJson.Unmarshal(&searchModelsReq) - if err != nil { - return err - } - } - response, err := w.ModelRegistry.SearchModelsAll(ctx, searchModelsReq) if err != nil { return err @@ -1777,8 +1850,10 @@ func newSetModelTag() *cobra.Command { cmd := &cobra.Command{} var setModelTagReq ml.SetModelTagRequest + var setModelTagJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&setModelTagJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "set-model-tag NAME KEY VALUE" cmd.Short = `Set a tag.` @@ -1790,6 +1865,9 @@ func newSetModelTag() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -1798,9 +1876,21 @@ func newSetModelTag() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - setModelTagReq.Name = args[0] - setModelTagReq.Key = args[1] - setModelTagReq.Value = args[2] + if cmd.Flags().Changed("json") { + err = setModelTagJson.Unmarshal(&setModelTagReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + setModelTagReq.Name = args[0] + } + if !cmd.Flags().Changed("json") { + setModelTagReq.Key = args[1] + } + if !cmd.Flags().Changed("json") { + setModelTagReq.Value = args[2] + } err = w.ModelRegistry.SetModelTag(ctx, setModelTagReq) if err != nil { @@ -1840,8 +1930,10 @@ func newSetModelVersionTag() *cobra.Command { cmd := &cobra.Command{} var setModelVersionTagReq ml.SetModelVersionTagRequest + var setModelVersionTagJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&setModelVersionTagJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "set-model-version-tag NAME VERSION KEY VALUE" cmd.Short = `Set a version tag.` @@ -1853,6 +1945,9 @@ func newSetModelVersionTag() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(4) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -1861,10 +1956,24 @@ func newSetModelVersionTag() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - setModelVersionTagReq.Name = args[0] - setModelVersionTagReq.Version = args[1] - setModelVersionTagReq.Key = args[2] - setModelVersionTagReq.Value = args[3] + if cmd.Flags().Changed("json") { + err = setModelVersionTagJson.Unmarshal(&setModelVersionTagReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + setModelVersionTagReq.Name = args[0] + } + if !cmd.Flags().Changed("json") { + setModelVersionTagReq.Version = args[1] + } + if !cmd.Flags().Changed("json") { + setModelVersionTagReq.Key = args[2] + } + if !cmd.Flags().Changed("json") { + setModelVersionTagReq.Value = args[3] + } err = w.ModelRegistry.SetModelVersionTag(ctx, setModelVersionTagReq) if err != nil { @@ -1976,8 +2085,10 @@ func newTestRegistryWebhook() *cobra.Command { cmd := &cobra.Command{} var testRegistryWebhookReq ml.TestRegistryWebhookRequest + var testRegistryWebhookJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&testRegistryWebhookJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().Var(&testRegistryWebhookReq.Event, "event", `If event is specified, the test trigger uses the specified event.`) @@ -1993,6 +2104,9 @@ func newTestRegistryWebhook() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -2001,7 +2115,15 @@ func newTestRegistryWebhook() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - testRegistryWebhookReq.Id = args[0] + if cmd.Flags().Changed("json") { + err = testRegistryWebhookJson.Unmarshal(&testRegistryWebhookReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + testRegistryWebhookReq.Id = args[0] + } response, err := w.ModelRegistry.TestRegistryWebhook(ctx, testRegistryWebhookReq) if err != nil { @@ -2041,8 +2163,10 @@ func newTransitionStage() *cobra.Command { cmd := &cobra.Command{} var transitionStageReq ml.TransitionModelVersionStageDatabricks + var transitionStageJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&transitionStageJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&transitionStageReq.Comment, "comment", transitionStageReq.Comment, `User-provided comment on the action.`) @@ -2060,6 +2184,9 @@ func newTransitionStage() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(4) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -2068,15 +2195,29 @@ func newTransitionStage() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - transitionStageReq.Name = args[0] - transitionStageReq.Version = args[1] - _, err = fmt.Sscan(args[2], &transitionStageReq.Stage) - if err != nil { - return fmt.Errorf("invalid STAGE: %s", args[2]) + if cmd.Flags().Changed("json") { + err = transitionStageJson.Unmarshal(&transitionStageReq) + if err != nil { + return err + } } - _, err = fmt.Sscan(args[3], &transitionStageReq.ArchiveExistingVersions) - if err != nil { - return fmt.Errorf("invalid ARCHIVE_EXISTING_VERSIONS: %s", args[3]) + if !cmd.Flags().Changed("json") { + transitionStageReq.Name = args[0] + } + if !cmd.Flags().Changed("json") { + transitionStageReq.Version = args[1] + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[2], &transitionStageReq.Stage) + if err != nil { + return fmt.Errorf("invalid STAGE: %s", args[2]) + } + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[3], &transitionStageReq.ArchiveExistingVersions) + if err != nil { + return fmt.Errorf("invalid ARCHIVE_EXISTING_VERSIONS: %s", args[3]) + } } response, err := w.ModelRegistry.TransitionStage(ctx, transitionStageReq) @@ -2117,8 +2258,10 @@ func newUpdateComment() *cobra.Command { cmd := &cobra.Command{} var updateCommentReq ml.UpdateComment + var updateCommentJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&updateCommentJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "update-comment ID COMMENT" cmd.Short = `Update a comment.` @@ -2130,6 +2273,9 @@ func newUpdateComment() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -2138,8 +2284,18 @@ func newUpdateComment() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - updateCommentReq.Id = args[0] - updateCommentReq.Comment = args[1] + if cmd.Flags().Changed("json") { + err = updateCommentJson.Unmarshal(&updateCommentReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + updateCommentReq.Id = args[0] + } + if !cmd.Flags().Changed("json") { + updateCommentReq.Comment = args[1] + } response, err := w.ModelRegistry.UpdateComment(ctx, updateCommentReq) if err != nil { @@ -2179,8 +2335,10 @@ func newUpdateModel() *cobra.Command { cmd := &cobra.Command{} var updateModelReq ml.UpdateModelRequest + var updateModelJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&updateModelJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&updateModelReq.Description, "description", updateModelReq.Description, `If provided, updates the description for this registered_model.`) @@ -2194,6 +2352,9 @@ func newUpdateModel() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -2202,7 +2363,15 @@ func newUpdateModel() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - updateModelReq.Name = args[0] + if cmd.Flags().Changed("json") { + err = updateModelJson.Unmarshal(&updateModelReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + updateModelReq.Name = args[0] + } err = w.ModelRegistry.UpdateModel(ctx, updateModelReq) if err != nil { @@ -2242,8 +2411,10 @@ func newUpdateModelVersion() *cobra.Command { cmd := &cobra.Command{} var updateModelVersionReq ml.UpdateModelVersionRequest + var updateModelVersionJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&updateModelVersionJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&updateModelVersionReq.Description, "description", updateModelVersionReq.Description, `If provided, updates the description for this registered_model.`) @@ -2257,6 +2428,9 @@ func newUpdateModelVersion() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -2265,8 +2439,18 @@ func newUpdateModelVersion() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - updateModelVersionReq.Name = args[0] - updateModelVersionReq.Version = args[1] + if cmd.Flags().Changed("json") { + err = updateModelVersionJson.Unmarshal(&updateModelVersionReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + updateModelVersionReq.Name = args[0] + } + if !cmd.Flags().Changed("json") { + updateModelVersionReq.Version = args[1] + } err = w.ModelRegistry.UpdateModelVersion(ctx, updateModelVersionReq) if err != nil { @@ -2401,6 +2585,9 @@ func newUpdateWebhook() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -2415,7 +2602,9 @@ func newUpdateWebhook() *cobra.Command { return err } } - updateWebhookReq.Id = args[0] + if !cmd.Flags().Changed("json") { + updateWebhookReq.Id = args[0] + } err = w.ModelRegistry.UpdateWebhook(ctx, updateWebhookReq) if err != nil { diff --git a/cmd/workspace/model-versions/model-versions.go b/cmd/workspace/model-versions/model-versions.go index f62cddab07..67583a6a8b 100755 --- a/cmd/workspace/model-versions/model-versions.go +++ b/cmd/workspace/model-versions/model-versions.go @@ -7,6 +7,7 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" + "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/catalog" "github.com/spf13/cobra" ) @@ -336,8 +337,10 @@ func newUpdate() *cobra.Command { cmd := &cobra.Command{} var updateReq catalog.UpdateModelVersionRequest + var updateJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&updateJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&updateReq.Comment, "comment", updateReq.Comment, `The comment attached to the model version.`) @@ -366,6 +369,12 @@ func newUpdate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = updateJson.Unmarshal(&updateReq) + if err != nil { + return err + } + } updateReq.FullName = args[0] _, err = fmt.Sscan(args[1], &updateReq.Version) if err != nil { diff --git a/cmd/workspace/pipelines/pipelines.go b/cmd/workspace/pipelines/pipelines.go index 76a6b3e269..fddc548832 100755 --- a/cmd/workspace/pipelines/pipelines.go +++ b/cmd/workspace/pipelines/pipelines.go @@ -491,10 +491,8 @@ func newListPipelineEvents() *cobra.Command { cmd := &cobra.Command{} var listPipelineEventsReq pipelines.ListPipelineEventsRequest - var listPipelineEventsJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listPipelineEventsJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listPipelineEventsReq.Filter, "filter", listPipelineEventsReq.Filter, `Criteria to select a subset of results, expressed using a SQL-like syntax.`) cmd.Flags().IntVar(&listPipelineEventsReq.MaxResults, "max-results", listPipelineEventsReq.MaxResults, `Max number of entries to return in a single page.`) @@ -514,12 +512,6 @@ func newListPipelineEvents() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listPipelineEventsJson.Unmarshal(&listPipelineEventsReq) - if err != nil { - return err - } - } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No PIPELINE_ID argument specified. Loading names for Pipelines drop-down." @@ -577,10 +569,8 @@ func newListPipelines() *cobra.Command { cmd := &cobra.Command{} var listPipelinesReq pipelines.ListPipelinesRequest - var listPipelinesJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listPipelinesJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&listPipelinesReq.Filter, "filter", listPipelinesReq.Filter, `Select a subset of results based on the specified criteria.`) cmd.Flags().IntVar(&listPipelinesReq.MaxResults, "max-results", listPipelinesReq.MaxResults, `The maximum number of entries to return in a single page.`) @@ -605,13 +595,6 @@ func newListPipelines() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listPipelinesJson.Unmarshal(&listPipelinesReq) - if err != nil { - return err - } - } - response, err := w.Pipelines.ListPipelinesAll(ctx, listPipelinesReq) if err != nil { return err diff --git a/cmd/workspace/providers/providers.go b/cmd/workspace/providers/providers.go index e9b5b7e19d..69a1672537 100755 --- a/cmd/workspace/providers/providers.go +++ b/cmd/workspace/providers/providers.go @@ -7,6 +7,7 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" + "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/sharing" "github.com/spf13/cobra" ) @@ -49,8 +50,10 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq sharing.CreateProvider + var createJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.Comment, "comment", createReq.Comment, `Description about the provider.`) cmd.Flags().StringVar(&createReq.RecipientProfileStr, "recipient-profile-str", createReq.RecipientProfileStr, `This field is required when the __authentication_type__ is **TOKEN** or not provided.`) @@ -66,6 +69,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -74,10 +80,20 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - createReq.Name = args[0] - _, err = fmt.Sscan(args[1], &createReq.AuthenticationType) - if err != nil { - return fmt.Errorf("invalid AUTHENTICATION_TYPE: %s", args[1]) + if cmd.Flags().Changed("json") { + err = createJson.Unmarshal(&createReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + createReq.Name = args[0] + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[1], &createReq.AuthenticationType) + if err != nil { + return fmt.Errorf("invalid AUTHENTICATION_TYPE: %s", args[1]) + } } response, err := w.Providers.Create(ctx, createReq) @@ -406,8 +422,10 @@ func newUpdate() *cobra.Command { cmd := &cobra.Command{} var updateReq sharing.UpdateProvider + var updateJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&updateJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&updateReq.Comment, "comment", updateReq.Comment, `Description about the provider.`) cmd.Flags().StringVar(&updateReq.Name, "name", updateReq.Name, `The name of the Provider.`) @@ -430,6 +448,12 @@ func newUpdate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = updateJson.Unmarshal(&updateReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No NAME argument specified. Loading names for Providers drop-down." diff --git a/cmd/workspace/query-history/query-history.go b/cmd/workspace/query-history/query-history.go index 22914d44eb..337ab40333 100755 --- a/cmd/workspace/query-history/query-history.go +++ b/cmd/workspace/query-history/query-history.go @@ -5,7 +5,6 @@ package query_history import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" - "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/sql" "github.com/spf13/cobra" ) @@ -46,10 +45,8 @@ func newList() *cobra.Command { cmd := &cobra.Command{} var listReq sql.ListQueryHistoryRequest - var listJson flags.JsonFlag // TODO: short flags - cmd.Flags().Var(&listJson, "json", `either inline JSON string or @path/to/file.json with request body`) // TODO: complex arg: filter_by cmd.Flags().BoolVar(&listReq.IncludeMetrics, "include-metrics", listReq.IncludeMetrics, `Whether to include metrics about query.`) @@ -76,13 +73,6 @@ func newList() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - if cmd.Flags().Changed("json") { - err = listJson.Unmarshal(&listReq) - if err != nil { - return err - } - } - response, err := w.QueryHistory.ListAll(ctx, listReq) if err != nil { return err diff --git a/cmd/workspace/query-visualizations/query-visualizations.go b/cmd/workspace/query-visualizations/query-visualizations.go index 9f7c5ccb6b..91f5f8a861 100755 --- a/cmd/workspace/query-visualizations/query-visualizations.go +++ b/cmd/workspace/query-visualizations/query-visualizations.go @@ -188,6 +188,9 @@ func newUpdate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(1) + } return check(cmd, args) } diff --git a/cmd/workspace/recipients/recipients.go b/cmd/workspace/recipients/recipients.go index c948c87d4d..9169e5ff58 100755 --- a/cmd/workspace/recipients/recipients.go +++ b/cmd/workspace/recipients/recipients.go @@ -88,6 +88,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -102,10 +105,14 @@ func newCreate() *cobra.Command { return err } } - createReq.Name = args[0] - _, err = fmt.Sscan(args[1], &createReq.AuthenticationType) - if err != nil { - return fmt.Errorf("invalid AUTHENTICATION_TYPE: %s", args[1]) + if !cmd.Flags().Changed("json") { + createReq.Name = args[0] + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[1], &createReq.AuthenticationType) + if err != nil { + return fmt.Errorf("invalid AUTHENTICATION_TYPE: %s", args[1]) + } } response, err := w.Recipients.Create(ctx, createReq) @@ -359,10 +366,12 @@ func newRotateToken() *cobra.Command { cmd := &cobra.Command{} var rotateTokenReq sharing.RotateRecipientToken + var rotateTokenJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&rotateTokenJson, "json", `either inline JSON string or @path/to/file.json with request body`) - cmd.Use = "rotate-token EXISTING_TOKEN_EXPIRE_IN_SECONDS NAME" + cmd.Use = "rotate-token NAME EXISTING_TOKEN_EXPIRE_IN_SECONDS" cmd.Short = `Rotate a token.` cmd.Long = `Rotate a token. @@ -373,6 +382,9 @@ func newRotateToken() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(1) + } return check(cmd, args) } @@ -381,11 +393,19 @@ func newRotateToken() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - _, err = fmt.Sscan(args[0], &rotateTokenReq.ExistingTokenExpireInSeconds) - if err != nil { - return fmt.Errorf("invalid EXISTING_TOKEN_EXPIRE_IN_SECONDS: %s", args[0]) + if cmd.Flags().Changed("json") { + err = rotateTokenJson.Unmarshal(&rotateTokenReq) + if err != nil { + return err + } + } + rotateTokenReq.Name = args[0] + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[1], &rotateTokenReq.ExistingTokenExpireInSeconds) + if err != nil { + return fmt.Errorf("invalid EXISTING_TOKEN_EXPIRE_IN_SECONDS: %s", args[1]) + } } - rotateTokenReq.Name = args[1] response, err := w.Recipients.RotateToken(ctx, rotateTokenReq) if err != nil { diff --git a/cmd/workspace/registered-models/registered-models.go b/cmd/workspace/registered-models/registered-models.go index 1bcba85bad..4636c44f32 100755 --- a/cmd/workspace/registered-models/registered-models.go +++ b/cmd/workspace/registered-models/registered-models.go @@ -7,6 +7,7 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" + "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/catalog" "github.com/spf13/cobra" ) @@ -75,8 +76,10 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq catalog.CreateRegisteredModelRequest + var createJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.Comment, "comment", createReq.Comment, `The comment attached to the registered model.`) cmd.Flags().StringVar(&createReq.StorageLocation, "storage-location", createReq.StorageLocation, `The storage location on the cloud under which model version data files are stored.`) @@ -102,6 +105,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -110,9 +116,21 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - createReq.CatalogName = args[0] - createReq.SchemaName = args[1] - createReq.Name = args[2] + if cmd.Flags().Changed("json") { + err = createJson.Unmarshal(&createReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + createReq.CatalogName = args[0] + } + if !cmd.Flags().Changed("json") { + createReq.SchemaName = args[1] + } + if !cmd.Flags().Changed("json") { + createReq.Name = args[2] + } response, err := w.RegisteredModels.Create(ctx, createReq) if err != nil { @@ -451,8 +469,10 @@ func newSetAlias() *cobra.Command { cmd := &cobra.Command{} var setAliasReq catalog.SetRegisteredModelAliasRequest + var setAliasJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&setAliasJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "set-alias FULL_NAME ALIAS VERSION_NUM" cmd.Short = `Set a Registered Model Alias.` @@ -469,6 +489,9 @@ func newSetAlias() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(2) + } return check(cmd, args) } @@ -477,11 +500,23 @@ func newSetAlias() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - setAliasReq.FullName = args[0] - setAliasReq.Alias = args[1] - _, err = fmt.Sscan(args[2], &setAliasReq.VersionNum) - if err != nil { - return fmt.Errorf("invalid VERSION_NUM: %s", args[2]) + if cmd.Flags().Changed("json") { + err = setAliasJson.Unmarshal(&setAliasReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + setAliasReq.FullName = args[0] + } + if !cmd.Flags().Changed("json") { + setAliasReq.Alias = args[1] + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[2], &setAliasReq.VersionNum) + if err != nil { + return fmt.Errorf("invalid VERSION_NUM: %s", args[2]) + } } response, err := w.RegisteredModels.SetAlias(ctx, setAliasReq) @@ -522,8 +557,10 @@ func newUpdate() *cobra.Command { cmd := &cobra.Command{} var updateReq catalog.UpdateRegisteredModelRequest + var updateJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&updateJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&updateReq.Comment, "comment", updateReq.Comment, `The comment attached to the registered model.`) cmd.Flags().StringVar(&updateReq.Name, "name", updateReq.Name, `The name of the registered model.`) @@ -550,6 +587,12 @@ func newUpdate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = updateJson.Unmarshal(&updateReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No FULL_NAME argument specified. Loading names for Registered Models drop-down." diff --git a/cmd/workspace/repos/repos.go b/cmd/workspace/repos/repos.go index 8972d0653b..1a2a43b469 100755 --- a/cmd/workspace/repos/repos.go +++ b/cmd/workspace/repos/repos.go @@ -77,6 +77,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -91,8 +94,12 @@ func newCreate() *cobra.Command { return err } } - createReq.Url = args[0] - createReq.Provider = args[1] + if !cmd.Flags().Changed("json") { + createReq.Url = args[0] + } + if !cmd.Flags().Changed("json") { + createReq.Provider = args[1] + } response, err := w.Repos.Create(ctx, createReq) if err != nil { diff --git a/cmd/workspace/schemas/schemas.go b/cmd/workspace/schemas/schemas.go index a09ae292b3..70d8b633bf 100755 --- a/cmd/workspace/schemas/schemas.go +++ b/cmd/workspace/schemas/schemas.go @@ -73,6 +73,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -87,8 +90,12 @@ func newCreate() *cobra.Command { return err } } - createReq.Name = args[0] - createReq.CatalogName = args[1] + if !cmd.Flags().Changed("json") { + createReq.Name = args[0] + } + if !cmd.Flags().Changed("json") { + createReq.CatalogName = args[1] + } response, err := w.Schemas.Create(ctx, createReq) if err != nil { diff --git a/cmd/workspace/secrets/secrets.go b/cmd/workspace/secrets/secrets.go index 31e75052e5..9715d3901c 100755 --- a/cmd/workspace/secrets/secrets.go +++ b/cmd/workspace/secrets/secrets.go @@ -80,6 +80,9 @@ func newCreateScope() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -94,7 +97,9 @@ func newCreateScope() *cobra.Command { return err } } - createScopeReq.Scope = args[0] + if !cmd.Flags().Changed("json") { + createScopeReq.Scope = args[0] + } err = w.Secrets.CreateScope(ctx, createScopeReq) if err != nil { @@ -134,8 +139,10 @@ func newDeleteAcl() *cobra.Command { cmd := &cobra.Command{} var deleteAclReq workspace.DeleteAcl + var deleteAclJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&deleteAclJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete-acl SCOPE PRINCIPAL" cmd.Short = `Delete an ACL.` @@ -152,6 +159,9 @@ func newDeleteAcl() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -160,8 +170,18 @@ func newDeleteAcl() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - deleteAclReq.Scope = args[0] - deleteAclReq.Principal = args[1] + if cmd.Flags().Changed("json") { + err = deleteAclJson.Unmarshal(&deleteAclReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + deleteAclReq.Scope = args[0] + } + if !cmd.Flags().Changed("json") { + deleteAclReq.Principal = args[1] + } err = w.Secrets.DeleteAcl(ctx, deleteAclReq) if err != nil { @@ -201,8 +221,10 @@ func newDeleteScope() *cobra.Command { cmd := &cobra.Command{} var deleteScopeReq workspace.DeleteScope + var deleteScopeJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&deleteScopeJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete-scope SCOPE" cmd.Short = `Delete a secret scope.` @@ -218,6 +240,9 @@ func newDeleteScope() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -226,7 +251,15 @@ func newDeleteScope() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - deleteScopeReq.Scope = args[0] + if cmd.Flags().Changed("json") { + err = deleteScopeJson.Unmarshal(&deleteScopeReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + deleteScopeReq.Scope = args[0] + } err = w.Secrets.DeleteScope(ctx, deleteScopeReq) if err != nil { @@ -266,8 +299,10 @@ func newDeleteSecret() *cobra.Command { cmd := &cobra.Command{} var deleteSecretReq workspace.DeleteSecret + var deleteSecretJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&deleteSecretJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete-secret SCOPE KEY" cmd.Short = `Delete a secret.` @@ -284,6 +319,9 @@ func newDeleteSecret() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -292,8 +330,18 @@ func newDeleteSecret() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - deleteSecretReq.Scope = args[0] - deleteSecretReq.Key = args[1] + if cmd.Flags().Changed("json") { + err = deleteSecretJson.Unmarshal(&deleteSecretReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + deleteSecretReq.Scope = args[0] + } + if !cmd.Flags().Changed("json") { + deleteSecretReq.Key = args[1] + } err = w.Secrets.DeleteSecret(ctx, deleteSecretReq) if err != nil { @@ -658,8 +706,10 @@ func newPutAcl() *cobra.Command { cmd := &cobra.Command{} var putAclReq workspace.PutAcl + var putAclJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&putAclJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "put-acl SCOPE PRINCIPAL PERMISSION" cmd.Short = `Create/update an ACL.` @@ -696,6 +746,9 @@ func newPutAcl() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(3) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -704,11 +757,23 @@ func newPutAcl() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - putAclReq.Scope = args[0] - putAclReq.Principal = args[1] - _, err = fmt.Sscan(args[2], &putAclReq.Permission) - if err != nil { - return fmt.Errorf("invalid PERMISSION: %s", args[2]) + if cmd.Flags().Changed("json") { + err = putAclJson.Unmarshal(&putAclReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + putAclReq.Scope = args[0] + } + if !cmd.Flags().Changed("json") { + putAclReq.Principal = args[1] + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[2], &putAclReq.Permission) + if err != nil { + return fmt.Errorf("invalid PERMISSION: %s", args[2]) + } } err = w.Secrets.PutAcl(ctx, putAclReq) diff --git a/cmd/workspace/shares/shares.go b/cmd/workspace/shares/shares.go index 02a7fd70ff..4583da8ff8 100755 --- a/cmd/workspace/shares/shares.go +++ b/cmd/workspace/shares/shares.go @@ -50,8 +50,10 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq sharing.CreateShare + var createJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.Comment, "comment", createReq.Comment, `User-provided free-form text description.`) @@ -67,6 +69,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -75,7 +80,15 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - createReq.Name = args[0] + if cmd.Flags().Changed("json") { + err = createJson.Unmarshal(&createReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + createReq.Name = args[0] + } response, err := w.Shares.Create(ctx, createReq) if err != nil { @@ -386,6 +399,9 @@ func newUpdate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(1) + } return check(cmd, args) } @@ -400,7 +416,9 @@ func newUpdate() *cobra.Command { return err } } - updateReq.Name = args[0] + if !cmd.Flags().Changed("json") { + updateReq.Name = args[0] + } response, err := w.Shares.Update(ctx, updateReq) if err != nil { diff --git a/cmd/workspace/storage-credentials/storage-credentials.go b/cmd/workspace/storage-credentials/storage-credentials.go index 47c1d78f14..00c0c21563 100755 --- a/cmd/workspace/storage-credentials/storage-credentials.go +++ b/cmd/workspace/storage-credentials/storage-credentials.go @@ -83,6 +83,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -97,7 +100,9 @@ func newCreate() *cobra.Command { return err } } - createReq.Name = args[0] + if !cmd.Flags().Changed("json") { + createReq.Name = args[0] + } response, err := w.StorageCredentials.Create(ctx, createReq) if err != nil { diff --git a/cmd/workspace/tables/tables.go b/cmd/workspace/tables/tables.go index 53a153fcfe..a7375f971d 100755 --- a/cmd/workspace/tables/tables.go +++ b/cmd/workspace/tables/tables.go @@ -7,6 +7,7 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" + "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/catalog" "github.com/spf13/cobra" ) @@ -370,8 +371,10 @@ func newUpdate() *cobra.Command { cmd := &cobra.Command{} var updateReq catalog.UpdateTableRequest + var updateJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&updateJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&updateReq.Owner, "owner", updateReq.Owner, ``) @@ -395,6 +398,12 @@ func newUpdate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = updateJson.Unmarshal(&updateReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No FULL_NAME argument specified. Loading names for Tables drop-down." diff --git a/cmd/workspace/token-management/token-management.go b/cmd/workspace/token-management/token-management.go index bb76dfe14a..5d34a2c7d9 100755 --- a/cmd/workspace/token-management/token-management.go +++ b/cmd/workspace/token-management/token-management.go @@ -50,8 +50,10 @@ func newCreateOboToken() *cobra.Command { cmd := &cobra.Command{} var createOboTokenReq settings.CreateOboTokenRequest + var createOboTokenJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&createOboTokenJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createOboTokenReq.Comment, "comment", createOboTokenReq.Comment, `Comment that describes the purpose of the token.`) @@ -65,6 +67,9 @@ func newCreateOboToken() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(2) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -73,10 +78,20 @@ func newCreateOboToken() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - createOboTokenReq.ApplicationId = args[0] - _, err = fmt.Sscan(args[1], &createOboTokenReq.LifetimeSeconds) - if err != nil { - return fmt.Errorf("invalid LIFETIME_SECONDS: %s", args[1]) + if cmd.Flags().Changed("json") { + err = createOboTokenJson.Unmarshal(&createOboTokenReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + createOboTokenReq.ApplicationId = args[0] + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[1], &createOboTokenReq.LifetimeSeconds) + if err != nil { + return fmt.Errorf("invalid LIFETIME_SECONDS: %s", args[1]) + } } response, err := w.TokenManagement.CreateOboToken(ctx, createOboTokenReq) diff --git a/cmd/workspace/tokens/tokens.go b/cmd/workspace/tokens/tokens.go index 719d35b6a5..5140738757 100755 --- a/cmd/workspace/tokens/tokens.go +++ b/cmd/workspace/tokens/tokens.go @@ -7,6 +7,7 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" + "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/settings" "github.com/spf13/cobra" ) @@ -48,8 +49,10 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq settings.CreateTokenRequest + var createJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.Comment, "comment", createReq.Comment, `Optional description to attach to the token.`) cmd.Flags().Int64Var(&createReq.LifetimeSeconds, "lifetime-seconds", createReq.LifetimeSeconds, `The lifetime of the token, in seconds.`) @@ -75,6 +78,13 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = createJson.Unmarshal(&createReq) + if err != nil { + return err + } + } + response, err := w.Tokens.Create(ctx, createReq) if err != nil { return err @@ -113,8 +123,10 @@ func newDelete() *cobra.Command { cmd := &cobra.Command{} var deleteReq settings.RevokeTokenRequest + var deleteJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&deleteJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "delete TOKEN_ID" cmd.Short = `Revoke token.` @@ -132,6 +144,12 @@ func newDelete() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = deleteJson.Unmarshal(&deleteReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No TOKEN_ID argument specified. Loading names for Tokens drop-down." diff --git a/cmd/workspace/volumes/volumes.go b/cmd/workspace/volumes/volumes.go index 30a5f18c3d..d443cea9c0 100755 --- a/cmd/workspace/volumes/volumes.go +++ b/cmd/workspace/volumes/volumes.go @@ -7,6 +7,7 @@ import ( "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" + "github.com/databricks/cli/libs/flags" "github.com/databricks/databricks-sdk-go/service/catalog" "github.com/spf13/cobra" ) @@ -54,8 +55,10 @@ func newCreate() *cobra.Command { cmd := &cobra.Command{} var createReq catalog.CreateVolumeRequestContent + var createJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createReq.Comment, "comment", createReq.Comment, `The comment attached to the volume.`) cmd.Flags().StringVar(&createReq.StorageLocation, "storage-location", createReq.StorageLocation, `The storage location on the cloud.`) @@ -87,6 +90,9 @@ func newCreate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(4) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -95,12 +101,26 @@ func newCreate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - createReq.CatalogName = args[0] - createReq.SchemaName = args[1] - createReq.Name = args[2] - _, err = fmt.Sscan(args[3], &createReq.VolumeType) - if err != nil { - return fmt.Errorf("invalid VOLUME_TYPE: %s", args[3]) + if cmd.Flags().Changed("json") { + err = createJson.Unmarshal(&createReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + createReq.CatalogName = args[0] + } + if !cmd.Flags().Changed("json") { + createReq.SchemaName = args[1] + } + if !cmd.Flags().Changed("json") { + createReq.Name = args[2] + } + if !cmd.Flags().Changed("json") { + _, err = fmt.Sscan(args[3], &createReq.VolumeType) + if err != nil { + return fmt.Errorf("invalid VOLUME_TYPE: %s", args[3]) + } } response, err := w.Volumes.Create(ctx, createReq) @@ -371,8 +391,10 @@ func newUpdate() *cobra.Command { cmd := &cobra.Command{} var updateReq catalog.UpdateVolumeRequestContent + var updateJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&updateJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&updateReq.Comment, "comment", updateReq.Comment, `The comment attached to the volume.`) cmd.Flags().StringVar(&updateReq.Name, "name", updateReq.Name, `The name of the volume.`) @@ -398,6 +420,12 @@ func newUpdate() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = updateJson.Unmarshal(&updateReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No FULL_NAME_ARG argument specified. Loading names for Volumes drop-down." diff --git a/cmd/workspace/workspace/workspace.go b/cmd/workspace/workspace/workspace.go index e56b0d9850..9969f5034b 100755 --- a/cmd/workspace/workspace/workspace.go +++ b/cmd/workspace/workspace/workspace.go @@ -52,8 +52,10 @@ func newDelete() *cobra.Command { cmd := &cobra.Command{} var deleteReq workspace.Delete + var deleteJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&deleteJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().BoolVar(&deleteReq.Recursive, "recursive", deleteReq.Recursive, `The flag that specifies whether to delete the object recursively.`) @@ -77,6 +79,12 @@ func newDelete() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = deleteJson.Unmarshal(&deleteReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No PATH argument specified. Loading names for Workspace drop-down." @@ -403,8 +411,10 @@ func newImport() *cobra.Command { cmd := &cobra.Command{} var importReq workspace.Import + var importJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&importJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&importReq.Content, "content", importReq.Content, `The base64-encoded content.`) cmd.Flags().Var(&importReq.Format, "format", `This specifies the format of the file to be imported.`) @@ -426,6 +436,9 @@ func newImport() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) + if cmd.Flags().Changed("json") { + check = cobra.ExactArgs(0) + } return check(cmd, args) } @@ -434,7 +447,15 @@ func newImport() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) - importReq.Path = args[0] + if cmd.Flags().Changed("json") { + err = importJson.Unmarshal(&importReq) + if err != nil { + return err + } + } + if !cmd.Flags().Changed("json") { + importReq.Path = args[0] + } err = w.Workspace.Import(ctx, importReq) if err != nil { @@ -539,8 +560,10 @@ func newMkdirs() *cobra.Command { cmd := &cobra.Command{} var mkdirsReq workspace.Mkdirs + var mkdirsJson flags.JsonFlag // TODO: short flags + cmd.Flags().Var(&mkdirsJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "mkdirs PATH" cmd.Short = `Create a directory.` @@ -560,6 +583,12 @@ func newMkdirs() *cobra.Command { ctx := cmd.Context() w := root.WorkspaceClient(ctx) + if cmd.Flags().Changed("json") { + err = mkdirsJson.Unmarshal(&mkdirsReq) + if err != nil { + return err + } + } if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) promptSpinner <- "No PATH argument specified. Loading names for Workspace drop-down." From 98c5f2219bd4361392a9460b1d09a7ef16c9c21a Mon Sep 17 00:00:00 2001 From: Andrew Nester Date: Tue, 24 Oct 2023 16:03:27 +0200 Subject: [PATCH 3/4] fixed prompting logic --- .codegen/service.go.tmpl | 14 +- cmd/workspace/catalogs/catalogs.go | 7 +- .../cluster-policies/cluster-policies.go | 33 +-- cmd/workspace/clusters/clusters.go | 264 +++++++++--------- .../external-locations/external-locations.go | 7 +- .../instance-pools/instance-pools.go | 33 +-- cmd/workspace/jobs/jobs.go | 222 ++++++++------- .../query-visualizations.go | 3 - .../registered-models/registered-models.go | 8 +- cmd/workspace/shares/shares.go | 7 +- cmd/workspace/tokens/tokens.go | 33 +-- cmd/workspace/workspace/workspace.go | 66 ++--- 12 files changed, 350 insertions(+), 347 deletions(-) diff --git a/.codegen/service.go.tmpl b/.codegen/service.go.tmpl index 631190b8d9..9380526377 100644 --- a/.codegen/service.go.tmpl +++ b/.codegen/service.go.tmpl @@ -78,8 +78,6 @@ var {{.CamelName}}Overrides []func( func new{{.PascalName}}() *cobra.Command { cmd := &cobra.Command{} - {{- $hasRequiredRequestBodyFields := and .Request .Request.HasRequiredRequestBodyFields -}} - {{- if .Request}} var {{.CamelName}}Req {{.Service.Package.Name}}.{{.Request.PascalName}} @@ -126,6 +124,8 @@ func new{{.PascalName}}() *cobra.Command { {{- $hasIdPrompt := and (not $noPrompt) (and $hasSinglePosArg $serviceHasNamedIdMap) -}} {{- $wait := and .Wait (and (not .IsCrudRead) (not (eq .SnakeName "get_run"))) -}} {{- $hasRequiredArgs := and (not $hasIdPrompt) $hasPosArgs -}} + {{- $hasSingleRequiredRequestBodyFieldWithPrompt := and (and $hasIdPrompt .Request) (eq 1 (len .Request.RequiredRequestBodyFields)) -}} + cmd.Use = "{{.KebabName}}{{if $hasPosArgs}}{{range .Request.RequiredFields}} {{.ConstantName}}{{end}}{{end}}" {{- if .Description }} @@ -142,7 +142,7 @@ func new{{.PascalName}}() *cobra.Command { {{if $hasRequiredArgs }} cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs({{len .Request.RequiredFields}}) - {{- if and .CanUseJson $hasRequiredRequestBodyFields }} + {{- if and .CanUseJson .Request.HasRequiredRequestBodyFields }} if cmd.Flags().Changed("json") { check = cobra.ExactArgs({{len .Request.RequiredPathFields}}) } @@ -165,6 +165,8 @@ func new{{.PascalName}}() *cobra.Command { return fmt.Errorf("please provide command input in JSON format by specifying the --json flag") }{{- end}} {{- if (not .MustUseJson) }} + {{- if and .CanUseJson $hasSingleRequiredRequestBodyFieldWithPrompt }} else { + {{- end}} {{- if $hasIdPrompt}} if len(args) == 0 { promptSpinner := cmdio.Spinner(ctx) @@ -187,7 +189,7 @@ func new{{.PascalName}}() *cobra.Command { {{$method := .}} {{- range $arg, $field := .Request.RequiredFields}} - {{- $optionalIfJsonIsUsed := and (not $hasIdPrompt) (and $field.IsJson $method.CanUseJson) }} + {{- $optionalIfJsonIsUsed := and (not $hasIdPrompt) (and $field.IsRequestBodyField $method.CanUseJson) }} {{- if $optionalIfJsonIsUsed }} if !cmd.Flags().Changed("json") { {{- end }} @@ -202,8 +204,12 @@ func new{{.PascalName}}() *cobra.Command { } {{- end }} {{- end -}} + + {{- if and .CanUseJson $hasSingleRequiredRequestBodyFieldWithPrompt }} + } {{- end}} + {{- end}} {{end}} {{if $wait -}} wait, err := {{if .Service.IsAccounts}}a{{else}}w{{end}}.{{.Service.PascalName}}.{{.PascalName}}(ctx{{if .Request}}, {{.CamelName}}Req{{end}}) diff --git a/cmd/workspace/catalogs/catalogs.go b/cmd/workspace/catalogs/catalogs.go index 4d202415fe..d1b5445299 100755 --- a/cmd/workspace/catalogs/catalogs.go +++ b/cmd/workspace/catalogs/catalogs.go @@ -338,9 +338,6 @@ func newUpdate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(1) - } return check(cmd, args) } @@ -355,9 +352,7 @@ func newUpdate() *cobra.Command { return err } } - if !cmd.Flags().Changed("json") { - updateReq.Name = args[0] - } + updateReq.Name = args[0] response, err := w.Catalogs.Update(ctx, updateReq) if err != nil { diff --git a/cmd/workspace/cluster-policies/cluster-policies.go b/cmd/workspace/cluster-policies/cluster-policies.go index a5b53b6f14..0bd7b4a9f8 100755 --- a/cmd/workspace/cluster-policies/cluster-policies.go +++ b/cmd/workspace/cluster-policies/cluster-policies.go @@ -175,25 +175,26 @@ func newDelete() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No POLICY_ID argument specified. Loading names for Cluster Policies drop-down." - names, err := w.ClusterPolicies.PolicyNameToPolicyIdMap(ctx, compute.ListClusterPoliciesRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Cluster Policies drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No POLICY_ID argument specified. Loading names for Cluster Policies drop-down." + names, err := w.ClusterPolicies.PolicyNameToPolicyIdMap(ctx, compute.ListClusterPoliciesRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Cluster Policies drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The ID of the policy to delete") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "The ID of the policy to delete") - if err != nil { - return err + if len(args) != 1 { + return fmt.Errorf("expected to have the id of the policy to delete") } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the id of the policy to delete") + deleteReq.PolicyId = args[0] } - deleteReq.PolicyId = args[0] err = w.ClusterPolicies.Delete(ctx, deleteReq) if err != nil { diff --git a/cmd/workspace/clusters/clusters.go b/cmd/workspace/clusters/clusters.go index 3900d37525..e4fb6e0abb 100755 --- a/cmd/workspace/clusters/clusters.go +++ b/cmd/workspace/clusters/clusters.go @@ -310,25 +310,26 @@ func newDelete() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The cluster to be terminated") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "The cluster to be terminated") - if err != nil { - return err + if len(args) != 1 { + return fmt.Errorf("expected to have the cluster to be terminated") } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the cluster to be terminated") + deleteReq.ClusterId = args[0] } - deleteReq.ClusterId = args[0] wait, err := w.Clusters.Delete(ctx, deleteReq) if err != nil { @@ -545,25 +546,26 @@ func newEvents() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The ID of the cluster to retrieve events about") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "The ID of the cluster to retrieve events about") - if err != nil { - return err + if len(args) != 1 { + return fmt.Errorf("expected to have the id of the cluster to retrieve events about") } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the id of the cluster to retrieve events about") + eventsReq.ClusterId = args[0] } - eventsReq.ClusterId = args[0] response, err := w.Clusters.EventsAll(ctx, eventsReq) if err != nil { @@ -1024,25 +1026,26 @@ func newPermanentDelete() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The cluster to be deleted") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "The cluster to be deleted") - if err != nil { - return err + if len(args) != 1 { + return fmt.Errorf("expected to have the cluster to be deleted") } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the cluster to be deleted") + permanentDeleteReq.ClusterId = args[0] } - permanentDeleteReq.ClusterId = args[0] err = w.Clusters.PermanentDelete(ctx, permanentDeleteReq) if err != nil { @@ -1107,25 +1110,26 @@ func newPin() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "") - if err != nil { - return err + if len(args) != 1 { + return fmt.Errorf("expected to have ") } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have ") + pinReq.ClusterId = args[0] } - pinReq.ClusterId = args[0] err = w.Clusters.Pin(ctx, pinReq) if err != nil { @@ -1197,25 +1201,26 @@ func newResize() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The cluster to be resized") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "The cluster to be resized") - if err != nil { - return err + if len(args) != 1 { + return fmt.Errorf("expected to have the cluster to be resized") } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the cluster to be resized") + resizeReq.ClusterId = args[0] } - resizeReq.ClusterId = args[0] wait, err := w.Clusters.Resize(ctx, resizeReq) if err != nil { @@ -1298,25 +1303,26 @@ func newRestart() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The cluster to be started") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "The cluster to be started") - if err != nil { - return err + if len(args) != 1 { + return fmt.Errorf("expected to have the cluster to be started") } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the cluster to be started") + restartReq.ClusterId = args[0] } - restartReq.ClusterId = args[0] wait, err := w.Clusters.Restart(ctx, restartReq) if err != nil { @@ -1536,25 +1542,26 @@ func newStart() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The cluster to be started") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "The cluster to be started") - if err != nil { - return err + if len(args) != 1 { + return fmt.Errorf("expected to have the cluster to be started") } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the cluster to be started") + startReq.ClusterId = args[0] } - startReq.ClusterId = args[0] wait, err := w.Clusters.Start(ctx, startReq) if err != nil { @@ -1631,25 +1638,26 @@ func newUnpin() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." - names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No CLUSTER_ID argument specified. Loading names for Clusters drop-down." + names, err := w.Clusters.ClusterDetailsClusterNameToClusterIdMap(ctx, compute.ListClustersRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Clusters drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "") - if err != nil { - return err + if len(args) != 1 { + return fmt.Errorf("expected to have ") } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have ") + unpinReq.ClusterId = args[0] } - unpinReq.ClusterId = args[0] err = w.Clusters.Unpin(ctx, unpinReq) if err != nil { diff --git a/cmd/workspace/external-locations/external-locations.go b/cmd/workspace/external-locations/external-locations.go index 8f3627beef..d510d2a977 100755 --- a/cmd/workspace/external-locations/external-locations.go +++ b/cmd/workspace/external-locations/external-locations.go @@ -351,9 +351,6 @@ func newUpdate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(1) - } return check(cmd, args) } @@ -368,9 +365,7 @@ func newUpdate() *cobra.Command { return err } } - if !cmd.Flags().Changed("json") { - updateReq.Name = args[0] - } + updateReq.Name = args[0] response, err := w.ExternalLocations.Update(ctx, updateReq) if err != nil { diff --git a/cmd/workspace/instance-pools/instance-pools.go b/cmd/workspace/instance-pools/instance-pools.go index 4af4e45b94..1109b921f4 100755 --- a/cmd/workspace/instance-pools/instance-pools.go +++ b/cmd/workspace/instance-pools/instance-pools.go @@ -178,25 +178,26 @@ func newDelete() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No INSTANCE_POOL_ID argument specified. Loading names for Instance Pools drop-down." - names, err := w.InstancePools.InstancePoolAndStatsInstancePoolNameToInstancePoolIdMap(ctx) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Instance Pools drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No INSTANCE_POOL_ID argument specified. Loading names for Instance Pools drop-down." + names, err := w.InstancePools.InstancePoolAndStatsInstancePoolNameToInstancePoolIdMap(ctx) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Instance Pools drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The instance pool to be terminated") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "The instance pool to be terminated") - if err != nil { - return err + if len(args) != 1 { + return fmt.Errorf("expected to have the instance pool to be terminated") } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the instance pool to be terminated") + deleteReq.InstancePoolId = args[0] } - deleteReq.InstancePoolId = args[0] err = w.InstancePools.Delete(ctx, deleteReq) if err != nil { diff --git a/cmd/workspace/jobs/jobs.go b/cmd/workspace/jobs/jobs.go index bcf034409f..1223b696b3 100755 --- a/cmd/workspace/jobs/jobs.go +++ b/cmd/workspace/jobs/jobs.go @@ -167,27 +167,28 @@ func newCancelRun() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No RUN_ID argument specified. Loading names for Jobs drop-down." - names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No RUN_ID argument specified. Loading names for Jobs drop-down." + names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "This field is required") + if err != nil { + return err + } + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have this field is required") } - id, err := cmdio.Select(ctx, names, "This field is required") + _, err = fmt.Sscan(args[0], &cancelRunReq.RunId) if err != nil { - return err + return fmt.Errorf("invalid RUN_ID: %s", args[0]) } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have this field is required") - } - _, err = fmt.Sscan(args[0], &cancelRunReq.RunId) - if err != nil { - return fmt.Errorf("invalid RUN_ID: %s", args[0]) } wait, err := w.Jobs.CancelRun(ctx, cancelRunReq) @@ -340,27 +341,28 @@ func newDelete() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No JOB_ID argument specified. Loading names for Jobs drop-down." - names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No JOB_ID argument specified. Loading names for Jobs drop-down." + names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The canonical identifier of the job to delete") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "The canonical identifier of the job to delete") + if len(args) != 1 { + return fmt.Errorf("expected to have the canonical identifier of the job to delete") + } + _, err = fmt.Sscan(args[0], &deleteReq.JobId) if err != nil { - return err + return fmt.Errorf("invalid JOB_ID: %s", args[0]) } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the canonical identifier of the job to delete") - } - _, err = fmt.Sscan(args[0], &deleteReq.JobId) - if err != nil { - return fmt.Errorf("invalid JOB_ID: %s", args[0]) } err = w.Jobs.Delete(ctx, deleteReq) @@ -424,27 +426,28 @@ func newDeleteRun() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No RUN_ID argument specified. Loading names for Jobs drop-down." - names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No RUN_ID argument specified. Loading names for Jobs drop-down." + names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The canonical identifier of the run for which to retrieve the metadata") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "The canonical identifier of the run for which to retrieve the metadata") + if len(args) != 1 { + return fmt.Errorf("expected to have the canonical identifier of the run for which to retrieve the metadata") + } + _, err = fmt.Sscan(args[0], &deleteRunReq.RunId) if err != nil { - return err + return fmt.Errorf("invalid RUN_ID: %s", args[0]) } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the canonical identifier of the run for which to retrieve the metadata") - } - _, err = fmt.Sscan(args[0], &deleteRunReq.RunId) - if err != nil { - return fmt.Errorf("invalid RUN_ID: %s", args[0]) } err = w.Jobs.DeleteRun(ctx, deleteRunReq) @@ -1133,27 +1136,28 @@ func newRepairRun() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No RUN_ID argument specified. Loading names for Jobs drop-down." - names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No RUN_ID argument specified. Loading names for Jobs drop-down." + names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The job run ID of the run to repair") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "The job run ID of the run to repair") + if len(args) != 1 { + return fmt.Errorf("expected to have the job run id of the run to repair") + } + _, err = fmt.Sscan(args[0], &repairRunReq.RunId) if err != nil { - return err + return fmt.Errorf("invalid RUN_ID: %s", args[0]) } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the job run id of the run to repair") - } - _, err = fmt.Sscan(args[0], &repairRunReq.RunId) - if err != nil { - return fmt.Errorf("invalid RUN_ID: %s", args[0]) } wait, err := w.Jobs.RepairRun(ctx, repairRunReq) @@ -1319,27 +1323,28 @@ func newRunNow() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No JOB_ID argument specified. Loading names for Jobs drop-down." - names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No JOB_ID argument specified. Loading names for Jobs drop-down." + names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The ID of the job to be executed") + if err != nil { + return err + } + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have the id of the job to be executed") } - id, err := cmdio.Select(ctx, names, "The ID of the job to be executed") + _, err = fmt.Sscan(args[0], &runNowReq.JobId) if err != nil { - return err + return fmt.Errorf("invalid JOB_ID: %s", args[0]) } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the id of the job to be executed") - } - _, err = fmt.Sscan(args[0], &runNowReq.JobId) - if err != nil { - return fmt.Errorf("invalid JOB_ID: %s", args[0]) } wait, err := w.Jobs.RunNow(ctx, runNowReq) @@ -1617,27 +1622,28 @@ func newUpdate() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No JOB_ID argument specified. Loading names for Jobs drop-down." - names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No JOB_ID argument specified. Loading names for Jobs drop-down." + names, err := w.Jobs.BaseJobSettingsNameToJobIdMap(ctx, jobs.ListJobsRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Jobs drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The canonical identifier of the job to update") + if err != nil { + return err + } + args = append(args, id) + } + if len(args) != 1 { + return fmt.Errorf("expected to have the canonical identifier of the job to update") } - id, err := cmdio.Select(ctx, names, "The canonical identifier of the job to update") + _, err = fmt.Sscan(args[0], &updateReq.JobId) if err != nil { - return err + return fmt.Errorf("invalid JOB_ID: %s", args[0]) } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the canonical identifier of the job to update") - } - _, err = fmt.Sscan(args[0], &updateReq.JobId) - if err != nil { - return fmt.Errorf("invalid JOB_ID: %s", args[0]) } err = w.Jobs.Update(ctx, updateReq) diff --git a/cmd/workspace/query-visualizations/query-visualizations.go b/cmd/workspace/query-visualizations/query-visualizations.go index 91f5f8a861..9f7c5ccb6b 100755 --- a/cmd/workspace/query-visualizations/query-visualizations.go +++ b/cmd/workspace/query-visualizations/query-visualizations.go @@ -188,9 +188,6 @@ func newUpdate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(1) - } return check(cmd, args) } diff --git a/cmd/workspace/registered-models/registered-models.go b/cmd/workspace/registered-models/registered-models.go index 4636c44f32..64f40e1733 100755 --- a/cmd/workspace/registered-models/registered-models.go +++ b/cmd/workspace/registered-models/registered-models.go @@ -506,12 +506,8 @@ func newSetAlias() *cobra.Command { return err } } - if !cmd.Flags().Changed("json") { - setAliasReq.FullName = args[0] - } - if !cmd.Flags().Changed("json") { - setAliasReq.Alias = args[1] - } + setAliasReq.FullName = args[0] + setAliasReq.Alias = args[1] if !cmd.Flags().Changed("json") { _, err = fmt.Sscan(args[2], &setAliasReq.VersionNum) if err != nil { diff --git a/cmd/workspace/shares/shares.go b/cmd/workspace/shares/shares.go index 4583da8ff8..c8cab3b7f6 100755 --- a/cmd/workspace/shares/shares.go +++ b/cmd/workspace/shares/shares.go @@ -399,9 +399,6 @@ func newUpdate() *cobra.Command { cmd.Args = func(cmd *cobra.Command, args []string) error { check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(1) - } return check(cmd, args) } @@ -416,9 +413,7 @@ func newUpdate() *cobra.Command { return err } } - if !cmd.Flags().Changed("json") { - updateReq.Name = args[0] - } + updateReq.Name = args[0] response, err := w.Shares.Update(ctx, updateReq) if err != nil { diff --git a/cmd/workspace/tokens/tokens.go b/cmd/workspace/tokens/tokens.go index 5140738757..dad790c5e1 100755 --- a/cmd/workspace/tokens/tokens.go +++ b/cmd/workspace/tokens/tokens.go @@ -149,25 +149,26 @@ func newDelete() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No TOKEN_ID argument specified. Loading names for Tokens drop-down." - names, err := w.Tokens.TokenInfoCommentToTokenIdMap(ctx) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Tokens drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No TOKEN_ID argument specified. Loading names for Tokens drop-down." + names, err := w.Tokens.TokenInfoCommentToTokenIdMap(ctx) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Tokens drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The ID of the token to be revoked") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "The ID of the token to be revoked") - if err != nil { - return err + if len(args) != 1 { + return fmt.Errorf("expected to have the id of the token to be revoked") } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the id of the token to be revoked") + deleteReq.TokenId = args[0] } - deleteReq.TokenId = args[0] err = w.Tokens.Delete(ctx, deleteReq) if err != nil { diff --git a/cmd/workspace/workspace/workspace.go b/cmd/workspace/workspace/workspace.go index 9969f5034b..4af888ac26 100755 --- a/cmd/workspace/workspace/workspace.go +++ b/cmd/workspace/workspace/workspace.go @@ -84,25 +84,26 @@ func newDelete() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No PATH argument specified. Loading names for Workspace drop-down." - names, err := w.Workspace.ObjectInfoPathToObjectIdMap(ctx, workspace.ListWorkspaceRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Workspace drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No PATH argument specified. Loading names for Workspace drop-down." + names, err := w.Workspace.ObjectInfoPathToObjectIdMap(ctx, workspace.ListWorkspaceRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Workspace drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The absolute path of the notebook or directory") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "The absolute path of the notebook or directory") - if err != nil { - return err + if len(args) != 1 { + return fmt.Errorf("expected to have the absolute path of the notebook or directory") } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the absolute path of the notebook or directory") + deleteReq.Path = args[0] } - deleteReq.Path = args[0] err = w.Workspace.Delete(ctx, deleteReq) if err != nil { @@ -588,25 +589,26 @@ func newMkdirs() *cobra.Command { if err != nil { return err } - } - if len(args) == 0 { - promptSpinner := cmdio.Spinner(ctx) - promptSpinner <- "No PATH argument specified. Loading names for Workspace drop-down." - names, err := w.Workspace.ObjectInfoPathToObjectIdMap(ctx, workspace.ListWorkspaceRequest{}) - close(promptSpinner) - if err != nil { - return fmt.Errorf("failed to load names for Workspace drop-down. Please manually specify required arguments. Original error: %w", err) + } else { + if len(args) == 0 { + promptSpinner := cmdio.Spinner(ctx) + promptSpinner <- "No PATH argument specified. Loading names for Workspace drop-down." + names, err := w.Workspace.ObjectInfoPathToObjectIdMap(ctx, workspace.ListWorkspaceRequest{}) + close(promptSpinner) + if err != nil { + return fmt.Errorf("failed to load names for Workspace drop-down. Please manually specify required arguments. Original error: %w", err) + } + id, err := cmdio.Select(ctx, names, "The absolute path of the directory") + if err != nil { + return err + } + args = append(args, id) } - id, err := cmdio.Select(ctx, names, "The absolute path of the directory") - if err != nil { - return err + if len(args) != 1 { + return fmt.Errorf("expected to have the absolute path of the directory") } - args = append(args, id) - } - if len(args) != 1 { - return fmt.Errorf("expected to have the absolute path of the directory") + mkdirsReq.Path = args[0] } - mkdirsReq.Path = args[0] err = w.Workspace.Mkdirs(ctx, mkdirsReq) if err != nil { From bf20fb024c048f728daf6ec33221dceab0217cf9 Mon Sep 17 00:00:00 2001 From: Andrew Nester Date: Tue, 24 Oct 2023 17:07:52 +0200 Subject: [PATCH 4/4] no pos args if mustusejson --- .codegen/service.go.tmpl | 4 ++-- cmd/workspace/dashboards/dashboards.go | 10 +--------- cmd/workspace/jobs/jobs.go | 5 ----- cmd/workspace/pipelines/pipelines.go | 5 ----- cmd/workspace/queries/queries.go | 5 ----- .../query-visualizations/query-visualizations.go | 7 +------ 6 files changed, 4 insertions(+), 32 deletions(-) diff --git a/.codegen/service.go.tmpl b/.codegen/service.go.tmpl index 9380526377..27b9a7540d 100644 --- a/.codegen/service.go.tmpl +++ b/.codegen/service.go.tmpl @@ -118,12 +118,12 @@ func new{{.PascalName}}() *cobra.Command { {{- $fullCommandName := (print $serviceName " " .KebabName) -}} {{- $noPrompt := or .IsCrudCreate (in $excludeFromPrompts $fullCommandName) }} - {{- $hasPosArgs := and .Request (or .Request.IsAllRequiredFieldsPrimitive (eq .PascalName "RunNow")) -}} + {{- $hasPosArgs := and (not .MustUseJson) (and .Request (or .Request.IsAllRequiredFieldsPrimitive (eq .PascalName "RunNow"))) -}} {{- $hasSinglePosArg := and $hasPosArgs (eq 1 (len .Request.RequiredFields)) -}} {{- $serviceHasNamedIdMap := and (and .Service.List .Service.List.NamedIdMap) (not (eq .PascalName "List")) -}} {{- $hasIdPrompt := and (not $noPrompt) (and $hasSinglePosArg $serviceHasNamedIdMap) -}} {{- $wait := and .Wait (and (not .IsCrudRead) (not (eq .SnakeName "get_run"))) -}} - {{- $hasRequiredArgs := and (not $hasIdPrompt) $hasPosArgs -}} + {{- $hasRequiredArgs := and (not $hasIdPrompt) $hasPosArgs -}} {{- $hasSingleRequiredRequestBodyFieldWithPrompt := and (and $hasIdPrompt .Request) (eq 1 (len .Request.RequiredRequestBodyFields)) -}} diff --git a/cmd/workspace/dashboards/dashboards.go b/cmd/workspace/dashboards/dashboards.go index 745af7eb44..8823ef534e 100755 --- a/cmd/workspace/dashboards/dashboards.go +++ b/cmd/workspace/dashboards/dashboards.go @@ -58,20 +58,12 @@ func newCreate() *cobra.Command { // TODO: short flags cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) - cmd.Use = "create NAME" + cmd.Use = "create" cmd.Short = `Create a dashboard object.` cmd.Long = `Create a dashboard object.` cmd.Annotations = make(map[string]string) - cmd.Args = func(cmd *cobra.Command, args []string) error { - check := cobra.ExactArgs(1) - if cmd.Flags().Changed("json") { - check = cobra.ExactArgs(0) - } - return check(cmd, args) - } - cmd.PreRunE = root.MustWorkspaceClient cmd.RunE = func(cmd *cobra.Command, args []string) (err error) { ctx := cmd.Context() diff --git a/cmd/workspace/jobs/jobs.go b/cmd/workspace/jobs/jobs.go index 1223b696b3..7759539e1b 100755 --- a/cmd/workspace/jobs/jobs.go +++ b/cmd/workspace/jobs/jobs.go @@ -261,11 +261,6 @@ func newCreate() *cobra.Command { cmd.Annotations = make(map[string]string) - cmd.Args = func(cmd *cobra.Command, args []string) error { - check := cobra.ExactArgs(0) - return check(cmd, args) - } - cmd.PreRunE = root.MustWorkspaceClient cmd.RunE = func(cmd *cobra.Command, args []string) (err error) { ctx := cmd.Context() diff --git a/cmd/workspace/pipelines/pipelines.go b/cmd/workspace/pipelines/pipelines.go index fddc548832..dd37090572 100755 --- a/cmd/workspace/pipelines/pipelines.go +++ b/cmd/workspace/pipelines/pipelines.go @@ -76,11 +76,6 @@ func newCreate() *cobra.Command { cmd.Annotations = make(map[string]string) - cmd.Args = func(cmd *cobra.Command, args []string) error { - check := cobra.ExactArgs(0) - return check(cmd, args) - } - cmd.PreRunE = root.MustWorkspaceClient cmd.RunE = func(cmd *cobra.Command, args []string) (err error) { ctx := cmd.Context() diff --git a/cmd/workspace/queries/queries.go b/cmd/workspace/queries/queries.go index c15d61ac1d..6ac80000fc 100755 --- a/cmd/workspace/queries/queries.go +++ b/cmd/workspace/queries/queries.go @@ -72,11 +72,6 @@ func newCreate() *cobra.Command { cmd.Annotations = make(map[string]string) - cmd.Args = func(cmd *cobra.Command, args []string) error { - check := cobra.ExactArgs(0) - return check(cmd, args) - } - cmd.PreRunE = root.MustWorkspaceClient cmd.RunE = func(cmd *cobra.Command, args []string) (err error) { ctx := cmd.Context() diff --git a/cmd/workspace/query-visualizations/query-visualizations.go b/cmd/workspace/query-visualizations/query-visualizations.go index 9f7c5ccb6b..1163008407 100755 --- a/cmd/workspace/query-visualizations/query-visualizations.go +++ b/cmd/workspace/query-visualizations/query-visualizations.go @@ -180,17 +180,12 @@ func newUpdate() *cobra.Command { // TODO: short flags cmd.Flags().Var(&updateJson, "json", `either inline JSON string or @path/to/file.json with request body`) - cmd.Use = "update ID" + cmd.Use = "update" cmd.Short = `Edit existing visualization.` cmd.Long = `Edit existing visualization.` cmd.Annotations = make(map[string]string) - cmd.Args = func(cmd *cobra.Command, args []string) error { - check := cobra.ExactArgs(1) - return check(cmd, args) - } - cmd.PreRunE = root.MustWorkspaceClient cmd.RunE = func(cmd *cobra.Command, args []string) (err error) { ctx := cmd.Context()