Update to Go SDK v0.9.0 (#396)

## Changes

See https://github.com/databricks/databricks-sdk-go/releases/tag/v0.9.0.

## Tests

Ran integration tests manually.
This commit is contained in:
Pieter Noordhuis 2023-05-22 19:27:22 +00:00 committed by GitHub
parent d86a1f0847
commit 46df551816
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 534 additions and 162 deletions

2
.gitattributes vendored
View File

@ -13,6 +13,7 @@ cmd/account/networks/networks.go linguist-generated=true
cmd/account/o-auth-enrollment/o-auth-enrollment.go linguist-generated=true cmd/account/o-auth-enrollment/o-auth-enrollment.go linguist-generated=true
cmd/account/private-access/private-access.go linguist-generated=true cmd/account/private-access/private-access.go linguist-generated=true
cmd/account/published-app-integration/published-app-integration.go linguist-generated=true cmd/account/published-app-integration/published-app-integration.go linguist-generated=true
cmd/account/service-principal-secrets/service-principal-secrets.go linguist-generated=true
cmd/account/service-principals/service-principals.go linguist-generated=true cmd/account/service-principals/service-principals.go linguist-generated=true
cmd/account/storage-credentials/storage-credentials.go linguist-generated=true cmd/account/storage-credentials/storage-credentials.go linguist-generated=true
cmd/account/storage/storage.go linguist-generated=true cmd/account/storage/storage.go linguist-generated=true
@ -64,5 +65,6 @@ cmd/workspace/tokens/tokens.go linguist-generated=true
cmd/workspace/users/users.go linguist-generated=true cmd/workspace/users/users.go linguist-generated=true
cmd/workspace/volumes/volumes.go linguist-generated=true cmd/workspace/volumes/volumes.go linguist-generated=true
cmd/workspace/warehouses/warehouses.go linguist-generated=true cmd/workspace/warehouses/warehouses.go linguist-generated=true
cmd/workspace/workspace-bindings/workspace-bindings.go linguist-generated=true
cmd/workspace/workspace-conf/workspace-conf.go linguist-generated=true cmd/workspace/workspace-conf/workspace-conf.go linguist-generated=true
cmd/workspace/workspace/workspace.go linguist-generated=true cmd/workspace/workspace/workspace.go linguist-generated=true

2
cmd/account/cmd.go generated
View File

@ -20,6 +20,7 @@ import (
o_auth_enrollment "github.com/databricks/cli/cmd/account/o-auth-enrollment" o_auth_enrollment "github.com/databricks/cli/cmd/account/o-auth-enrollment"
private_access "github.com/databricks/cli/cmd/account/private-access" private_access "github.com/databricks/cli/cmd/account/private-access"
published_app_integration "github.com/databricks/cli/cmd/account/published-app-integration" published_app_integration "github.com/databricks/cli/cmd/account/published-app-integration"
service_principal_secrets "github.com/databricks/cli/cmd/account/service-principal-secrets"
account_service_principals "github.com/databricks/cli/cmd/account/service-principals" account_service_principals "github.com/databricks/cli/cmd/account/service-principals"
storage "github.com/databricks/cli/cmd/account/storage" storage "github.com/databricks/cli/cmd/account/storage"
account_storage_credentials "github.com/databricks/cli/cmd/account/storage-credentials" account_storage_credentials "github.com/databricks/cli/cmd/account/storage-credentials"
@ -51,6 +52,7 @@ func init() {
accountCmd.AddCommand(o_auth_enrollment.Cmd) accountCmd.AddCommand(o_auth_enrollment.Cmd)
accountCmd.AddCommand(private_access.Cmd) accountCmd.AddCommand(private_access.Cmd)
accountCmd.AddCommand(published_app_integration.Cmd) accountCmd.AddCommand(published_app_integration.Cmd)
accountCmd.AddCommand(service_principal_secrets.Cmd)
accountCmd.AddCommand(account_service_principals.Cmd) accountCmd.AddCommand(account_service_principals.Cmd)
accountCmd.AddCommand(storage.Cmd) accountCmd.AddCommand(storage.Cmd)
accountCmd.AddCommand(account_storage_credentials.Cmd) accountCmd.AddCommand(account_storage_credentials.Cmd)

View File

@ -46,7 +46,8 @@ var createCmd = &cobra.Command{
Create Custom OAuth App Integration. Create Custom OAuth App Integration.
You can retrieve the custom oauth app integration via :method:get.`, You can retrieve the custom oauth app integration via
:method:CustomAppIntegration/get.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustAccountClient, PreRunE: root.MustAccountClient,
@ -87,7 +88,7 @@ var deleteCmd = &cobra.Command{
Long: `Delete Custom OAuth App Integration. Long: `Delete Custom OAuth App Integration.
Delete an existing Custom OAuth App Integration. You can retrieve the custom Delete an existing Custom OAuth App Integration. You can retrieve the custom
oauth app integration via :method:get.`, oauth app integration via :method:CustomAppIntegration/get.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
@ -151,7 +152,7 @@ var listCmd = &cobra.Command{
Long: `Get custom oauth app integrations. Long: `Get custom oauth app integrations.
Get the list of custom oauth app integrations for the specified Databricks Get the list of custom oauth app integrations for the specified Databricks
Account`, account`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustAccountClient, PreRunE: root.MustAccountClient,
@ -187,7 +188,7 @@ var updateCmd = &cobra.Command{
Long: `Updates Custom OAuth App Integration. Long: `Updates Custom OAuth App Integration.
Updates an existing custom OAuth App Integration. You can retrieve the custom Updates an existing custom OAuth App Integration. You can retrieve the custom
oauth app integration via :method:get.`, oauth app integration via :method:CustomAppIntegration/get.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustAccountClient, PreRunE: root.MustAccountClient,

View File

@ -43,6 +43,9 @@ func init() {
// TODO: short flags // TODO: short flags
createCmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) createCmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`)
// TODO: complex arg: aws_key_info
// TODO: complex arg: gcp_key_info
} }
var createCmd = &cobra.Command{ var createCmd = &cobra.Command{
@ -61,7 +64,8 @@ var createCmd = &cobra.Command{
EBS volume data. EBS volume data.
**Important**: Customer-managed keys are supported only for some deployment **Important**: Customer-managed keys are supported only for some deployment
types, subscription types, and AWS regions. types, subscription types, and AWS regions that currently support creation of
Databricks workspaces.
This operation is available only if your account is on the E2 version of the This operation is available only if your account is on the E2 version of the
platform or on a select custom plan that allows multiple workspaces per platform or on a select custom plan that allows multiple workspaces per
@ -76,13 +80,9 @@ var createCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
_, err = fmt.Sscan(args[0], &createReq.AwsKeyInfo) _, err = fmt.Sscan(args[0], &createReq.UseCases)
if err != nil { if err != nil {
return fmt.Errorf("invalid AWS_KEY_INFO: %s", args[0]) return fmt.Errorf("invalid USE_CASES: %s", args[0])
}
_, err = fmt.Sscan(args[1], &createReq.UseCases)
if err != nil {
return fmt.Errorf("invalid USE_CASES: %s", args[1])
} }
response, err := a.EncryptionKeys.Create(ctx, createReq) response, err := a.EncryptionKeys.Create(ctx, createReq)
@ -112,24 +112,11 @@ var deleteCmd = &cobra.Command{
delete a configuration that is associated with a running workspace.`, delete a configuration that is associated with a running workspace.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(1),
PreRunE: root.MustAccountClient, PreRunE: root.MustAccountClient,
RunE: func(cmd *cobra.Command, args []string) (err error) { RunE: func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context() ctx := cmd.Context()
a := root.AccountClient(ctx) a := root.AccountClient(ctx)
if len(args) == 0 {
names, err := a.EncryptionKeys.CustomerManagedKeyAwsKeyInfoKeyArnToCustomerManagedKeyIdMap(ctx)
if err != nil {
return err
}
id, err := cmdio.Select(ctx, names, "Databricks encryption key configuration ID")
if err != nil {
return err
}
args = append(args, id)
}
if len(args) != 1 {
return fmt.Errorf("expected to have databricks encryption key configuration id")
}
deleteReq.CustomerManagedKeyId = args[0] deleteReq.CustomerManagedKeyId = args[0]
err = a.EncryptionKeys.Delete(ctx, deleteReq) err = a.EncryptionKeys.Delete(ctx, deleteReq)
@ -169,27 +156,14 @@ var getCmd = &cobra.Command{
types, subscription types, and AWS regions. types, subscription types, and AWS regions.
This operation is available only if your account is on the E2 version of the This operation is available only if your account is on the E2 version of the
platform.`, platform.",`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(1),
PreRunE: root.MustAccountClient, PreRunE: root.MustAccountClient,
RunE: func(cmd *cobra.Command, args []string) (err error) { RunE: func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context() ctx := cmd.Context()
a := root.AccountClient(ctx) a := root.AccountClient(ctx)
if len(args) == 0 {
names, err := a.EncryptionKeys.CustomerManagedKeyAwsKeyInfoKeyArnToCustomerManagedKeyIdMap(ctx)
if err != nil {
return err
}
id, err := cmdio.Select(ctx, names, "Databricks encryption key configuration ID")
if err != nil {
return err
}
args = append(args, id)
}
if len(args) != 1 {
return fmt.Errorf("expected to have databricks encryption key configuration id")
}
getReq.CustomerManagedKeyId = args[0] getReq.CustomerManagedKeyId = args[0]
response, err := a.EncryptionKeys.Get(ctx, getReq) response, err := a.EncryptionKeys.Get(ctx, getReq)

View File

@ -14,13 +14,13 @@ import (
var Cmd = &cobra.Command{ var Cmd = &cobra.Command{
Use: "groups", Use: "groups",
Short: `Groups simplify identity management, making it easier to assign access to Databricks Account, data, and other securable objects.`, Short: `Groups simplify identity management, making it easier to assign access to Databricks account, data, and other securable objects.`,
Long: `Groups simplify identity management, making it easier to assign access to Long: `Groups simplify identity management, making it easier to assign access to
Databricks Account, data, and other securable objects. Databricks account, data, and other securable objects.
It is best practice to assign access to workspaces and access-control policies It is best practice to assign access to workspaces and access-control policies
in Unity Catalog to groups, instead of to users individually. All Databricks in Unity Catalog to groups, instead of to users individually. All Databricks
Account identities can be assigned as members of groups, and members inherit account identities can be assigned as members of groups, and members inherit
permissions that are assigned to their group.`, permissions that are assigned to their group.`,
} }
@ -49,7 +49,7 @@ var createCmd = &cobra.Command{
Short: `Create a new group.`, Short: `Create a new group.`,
Long: `Create a new group. Long: `Create a new group.
Creates a group in the Databricks Account with a unique name, using the Creates a group in the Databricks account with a unique name, using the
supplied group details.`, supplied group details.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
@ -86,7 +86,7 @@ var deleteCmd = &cobra.Command{
Short: `Delete a group.`, Short: `Delete a group.`,
Long: `Delete a group. Long: `Delete a group.
Deletes a group from the Databricks Account.`, Deletes a group from the Databricks account.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustAccountClient, PreRunE: root.MustAccountClient,
@ -98,7 +98,7 @@ var deleteCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
id, err := cmdio.Select(ctx, names, "Unique ID for a group in the Databricks Account") id, err := cmdio.Select(ctx, names, "Unique ID for a group in the Databricks account")
if err != nil { if err != nil {
return err return err
} }
@ -132,7 +132,7 @@ var getCmd = &cobra.Command{
Short: `Get group details.`, Short: `Get group details.`,
Long: `Get group details. Long: `Get group details.
Gets the information for a specific group in the Databricks Account.`, Gets the information for a specific group in the Databricks account.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustAccountClient, PreRunE: root.MustAccountClient,
@ -144,7 +144,7 @@ var getCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
id, err := cmdio.Select(ctx, names, "Unique ID for a group in the Databricks Account") id, err := cmdio.Select(ctx, names, "Unique ID for a group in the Databricks account")
if err != nil { if err != nil {
return err return err
} }
@ -186,7 +186,7 @@ var listCmd = &cobra.Command{
Short: `List group details.`, Short: `List group details.`,
Long: `List group details. Long: `List group details.
Gets all details of the groups associated with the Databricks Account.`, Gets all details of the groups associated with the Databricks account.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(0), Args: cobra.ExactArgs(0),

View File

@ -67,8 +67,7 @@ var deleteCmd = &cobra.Command{
Short: `Delete a metastore.`, Short: `Delete a metastore.`,
Long: `Delete a metastore. Long: `Delete a metastore.
Deletes a Databricks Unity Catalog metastore for an account, both specified by Deletes a Unity Catalog metastore for an account, both specified by ID.`,
ID.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
@ -101,8 +100,7 @@ var getCmd = &cobra.Command{
Short: `Get a metastore.`, Short: `Get a metastore.`,
Long: `Get a metastore. Long: `Get a metastore.
Gets a Databricks Unity Catalog metastore from an account, both specified by Gets a Unity Catalog metastore from an account, both specified by ID.`,
ID.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),

View File

@ -44,7 +44,7 @@ var createCmd = &cobra.Command{
The enrollment is executed asynchronously, so the API will return 204 The enrollment is executed asynchronously, so the API will return 204
immediately. The actual enrollment take a few minutes, you can check the immediately. The actual enrollment take a few minutes, you can check the
status via API :method:get.`, status via API :method:OAuthEnrollment/get.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(0), Args: cobra.ExactArgs(0),

View File

@ -44,7 +44,8 @@ var createCmd = &cobra.Command{
Create Published OAuth App Integration. Create Published OAuth App Integration.
You can retrieve the published oauth app integration via :method:get.`, You can retrieve the published oauth app integration via
:method:PublishedAppIntegration/get.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustAccountClient, PreRunE: root.MustAccountClient,
@ -80,7 +81,7 @@ var deleteCmd = &cobra.Command{
Long: `Delete Published OAuth App Integration. Long: `Delete Published OAuth App Integration.
Delete an existing Published OAuth App Integration. You can retrieve the Delete an existing Published OAuth App Integration. You can retrieve the
published oauth app integration via :method:get.`, published oauth app integration via :method:PublishedAppIntegration/get.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
@ -144,7 +145,7 @@ var listCmd = &cobra.Command{
Long: `Get published oauth app integrations. Long: `Get published oauth app integrations.
Get the list of published oauth app integrations for the specified Databricks Get the list of published oauth app integrations for the specified Databricks
Account`, account`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustAccountClient, PreRunE: root.MustAccountClient,
@ -179,7 +180,7 @@ var updateCmd = &cobra.Command{
Long: `Updates Published OAuth App Integration. Long: `Updates Published OAuth App Integration.
Updates an existing published OAuth App Integration. You can retrieve the Updates an existing published OAuth App Integration. You can retrieve the
published oauth app integration via :method:get.`, published oauth app integration via :method:PublishedAppIntegration/get.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustAccountClient, PreRunE: root.MustAccountClient,

View File

@ -0,0 +1,143 @@
// Code generated from OpenAPI specs by Databricks SDK Generator. DO NOT EDIT.
package service_principal_secrets
import (
"fmt"
"github.com/databricks/cli/cmd/root"
"github.com/databricks/cli/libs/cmdio"
"github.com/databricks/databricks-sdk-go/service/oauth2"
"github.com/spf13/cobra"
)
var Cmd = &cobra.Command{
Use: "service-principal-secrets",
Short: `These APIs enable administrators to manage service principal secrets.`,
Long: `These APIs enable administrators to manage service principal secrets.
You can use the generated secrets to obtain OAuth access tokens for a service
principal, which can then be used to access Databricks Accounts and Workspace
APIs. For more information, see [Authentication using OAuth tokens for service
principals],
In addition, the generated secrets can be used to configure the Databricks
Terraform Provider to authenticate with the service principal. For more
information, see [Databricks Terraform Provider].
[Authentication using OAuth tokens for service principals]: https://docs.databricks.com/dev-tools/authentication-oauth.html
[Databricks Terraform Provider]: https://github.com/databricks/terraform-provider-databricks/blob/master/docs/index.md#authenticating-with-service-principal`,
}
// start create command
var createReq oauth2.CreateServicePrincipalSecretRequest
func init() {
Cmd.AddCommand(createCmd)
// TODO: short flags
}
var createCmd = &cobra.Command{
Use: "create SERVICE_PRINCIPAL_ID",
Short: `Create service principal secret.`,
Long: `Create service principal secret.
Create a secret for the given service principal.`,
Annotations: map[string]string{},
Args: cobra.ExactArgs(1),
PreRunE: root.MustAccountClient,
RunE: func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context()
a := root.AccountClient(ctx)
_, err = fmt.Sscan(args[0], &createReq.ServicePrincipalId)
if err != nil {
return fmt.Errorf("invalid SERVICE_PRINCIPAL_ID: %s", args[0])
}
response, err := a.ServicePrincipalSecrets.Create(ctx, createReq)
if err != nil {
return err
}
return cmdio.Render(ctx, response)
},
}
// start delete command
var deleteReq oauth2.DeleteServicePrincipalSecretRequest
func init() {
Cmd.AddCommand(deleteCmd)
// TODO: short flags
}
var deleteCmd = &cobra.Command{
Use: "delete SERVICE_PRINCIPAL_ID SECRET_ID",
Short: `Delete service principal secret.`,
Long: `Delete service principal secret.
Delete a secret from the given service principal.`,
Annotations: map[string]string{},
Args: cobra.ExactArgs(2),
PreRunE: root.MustAccountClient,
RunE: func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context()
a := root.AccountClient(ctx)
_, err = fmt.Sscan(args[0], &deleteReq.ServicePrincipalId)
if err != nil {
return fmt.Errorf("invalid SERVICE_PRINCIPAL_ID: %s", args[0])
}
deleteReq.SecretId = args[1]
err = a.ServicePrincipalSecrets.Delete(ctx, deleteReq)
if err != nil {
return err
}
return nil
},
}
// start list command
var listReq oauth2.ListServicePrincipalSecretsRequest
func init() {
Cmd.AddCommand(listCmd)
// TODO: short flags
}
var listCmd = &cobra.Command{
Use: "list SERVICE_PRINCIPAL_ID",
Short: `List service principal secrets.`,
Long: `List service principal secrets.
List all secrets associated with the given service principal. This operation
only returns information about the secrets themselves and does not include the
secret values.`,
Annotations: map[string]string{},
Args: cobra.ExactArgs(1),
PreRunE: root.MustAccountClient,
RunE: func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context()
a := root.AccountClient(ctx)
_, err = fmt.Sscan(args[0], &listReq.ServicePrincipalId)
if err != nil {
return fmt.Errorf("invalid SERVICE_PRINCIPAL_ID: %s", args[0])
}
response, err := a.ServicePrincipalSecrets.ListAll(ctx, listReq)
if err != nil {
return err
}
return cmdio.Render(ctx, response)
},
}
// end service ServicePrincipalSecrets

View File

@ -49,7 +49,7 @@ var createCmd = &cobra.Command{
Short: `Create a service principal.`, Short: `Create a service principal.`,
Long: `Create a service principal. Long: `Create a service principal.
Creates a new service principal in the Databricks Account.`, Creates a new service principal in the Databricks account.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustAccountClient, PreRunE: root.MustAccountClient,
@ -85,7 +85,7 @@ var deleteCmd = &cobra.Command{
Short: `Delete a service principal.`, Short: `Delete a service principal.`,
Long: `Delete a service principal. Long: `Delete a service principal.
Delete a single service principal in the Databricks Account.`, Delete a single service principal in the Databricks account.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustAccountClient, PreRunE: root.MustAccountClient,
@ -97,7 +97,7 @@ var deleteCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
id, err := cmdio.Select(ctx, names, "Unique ID for a service principal in the Databricks Account") id, err := cmdio.Select(ctx, names, "Unique ID for a service principal in the Databricks account")
if err != nil { if err != nil {
return err return err
} }
@ -132,7 +132,7 @@ var getCmd = &cobra.Command{
Long: `Get service principal details. Long: `Get service principal details.
Gets the details for a single service principal define in the Databricks Gets the details for a single service principal define in the Databricks
Account.`, account.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustAccountClient, PreRunE: root.MustAccountClient,
@ -144,7 +144,7 @@ var getCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
id, err := cmdio.Select(ctx, names, "Unique ID for a service principal in the Databricks Account") id, err := cmdio.Select(ctx, names, "Unique ID for a service principal in the Databricks account")
if err != nil { if err != nil {
return err return err
} }
@ -186,7 +186,7 @@ var listCmd = &cobra.Command{
Short: `List service principals.`, Short: `List service principals.`,
Long: `List service principals. Long: `List service principals.
Gets the set of service principals associated with a Databricks Account.`, Gets the set of service principals associated with a Databricks account.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(0), Args: cobra.ExactArgs(0),
@ -223,7 +223,7 @@ var patchCmd = &cobra.Command{
Long: `Update service principal details. Long: `Update service principal details.
Partially updates the details of a single service principal in the Databricks Partially updates the details of a single service principal in the Databricks
Account.`, account.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustAccountClient, PreRunE: root.MustAccountClient,

View File

@ -68,6 +68,41 @@ var createCmd = &cobra.Command{
}, },
} }
// start delete command
var deleteReq catalog.DeleteAccountStorageCredentialRequest
func init() {
Cmd.AddCommand(deleteCmd)
// TODO: short flags
}
var deleteCmd = &cobra.Command{
Use: "delete METASTORE_ID NAME",
Short: `Delete a storage credential.`,
Long: `Delete a storage credential.
Deletes a storage credential from the metastore. The caller must be an owner
of the storage credential.`,
Annotations: map[string]string{},
Args: cobra.ExactArgs(2),
PreRunE: root.MustAccountClient,
RunE: func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context()
a := root.AccountClient(ctx)
deleteReq.MetastoreId = args[0]
deleteReq.Name = args[1]
err = a.StorageCredentials.Delete(ctx, deleteReq)
if err != nil {
return err
}
return nil
},
}
// start get command // start get command
var getReq catalog.GetAccountStorageCredentialRequest var getReq catalog.GetAccountStorageCredentialRequest
@ -138,4 +173,55 @@ var listCmd = &cobra.Command{
}, },
} }
// start update command
var updateReq catalog.UpdateStorageCredential
var updateJson flags.JsonFlag
func init() {
Cmd.AddCommand(updateCmd)
// TODO: short flags
updateCmd.Flags().Var(&updateJson, "json", `either inline JSON string or @path/to/file.json with request body`)
// TODO: complex arg: aws_iam_role
// TODO: complex arg: azure_service_principal
updateCmd.Flags().StringVar(&updateReq.Comment, "comment", updateReq.Comment, `Comment associated with the credential.`)
updateCmd.Flags().BoolVar(&updateReq.Force, "force", updateReq.Force, `Force update even if there are dependent external locations or external tables.`)
// TODO: complex arg: gcp_service_account_key
updateCmd.Flags().StringVar(&updateReq.Name, "name", updateReq.Name, `The credential name.`)
updateCmd.Flags().StringVar(&updateReq.Owner, "owner", updateReq.Owner, `Username of current owner of credential.`)
updateCmd.Flags().BoolVar(&updateReq.ReadOnly, "read-only", updateReq.ReadOnly, `Whether the storage credential is only usable for read operations.`)
updateCmd.Flags().BoolVar(&updateReq.SkipValidation, "skip-validation", updateReq.SkipValidation, `Supplying true to this argument skips validation of the updated credential.`)
}
var updateCmd = &cobra.Command{
Use: "update",
Short: `Updates a storage credential.`,
Long: `Updates a storage credential.
Updates a storage credential on the metastore. The caller must be the owner of
the storage credential. If the caller is a metastore admin, only the __owner__
credential can be changed.`,
Annotations: map[string]string{},
PreRunE: root.MustAccountClient,
RunE: func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context()
a := root.AccountClient(ctx)
err = updateJson.Unmarshal(&updateReq)
if err != nil {
return err
}
updateReq.MetastoreId = args[0]
updateReq.Name = args[1]
response, err := a.StorageCredentials.Update(ctx, updateReq)
if err != nil {
return err
}
return cmdio.Render(ctx, response)
},
}
// end service AccountStorageCredentials // end service AccountStorageCredentials

View File

@ -18,13 +18,13 @@ var Cmd = &cobra.Command{
Long: `User identities recognized by Databricks and represented by email addresses. Long: `User identities recognized by Databricks and represented by email addresses.
Databricks recommends using SCIM provisioning to sync users and groups Databricks recommends using SCIM provisioning to sync users and groups
automatically from your identity provider to your Databricks Account. SCIM automatically from your identity provider to your Databricks account. SCIM
streamlines onboarding a new employee or team by using your identity provider streamlines onboarding a new employee or team by using your identity provider
to create users and groups in Databricks Account and give them the proper to create users and groups in Databricks account and give them the proper
level of access. When a user leaves your organization or no longer needs level of access. When a user leaves your organization or no longer needs
access to Databricks Account, admins can terminate the user in your identity access to Databricks account, admins can terminate the user in your identity
provider and that users account will also be removed from Databricks provider and that users account will also be removed from Databricks
Account. This ensures a consistent offboarding process and prevents account. This ensures a consistent offboarding process and prevents
unauthorized users from accessing sensitive data.`, unauthorized users from accessing sensitive data.`,
} }
@ -56,7 +56,7 @@ var createCmd = &cobra.Command{
Short: `Create a new user.`, Short: `Create a new user.`,
Long: `Create a new user. Long: `Create a new user.
Creates a new user in the Databricks Account. This new user will also be added Creates a new user in the Databricks account. This new user will also be added
to the Databricks account.`, to the Databricks account.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
@ -93,7 +93,7 @@ var deleteCmd = &cobra.Command{
Short: `Delete a user.`, Short: `Delete a user.`,
Long: `Delete a user. Long: `Delete a user.
Deletes a user. Deleting a user from a Databricks Account also removes objects Deletes a user. Deleting a user from a Databricks account also removes objects
associated with the user.`, associated with the user.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
@ -106,7 +106,7 @@ var deleteCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
id, err := cmdio.Select(ctx, names, "Unique ID for a user in the Databricks Account") id, err := cmdio.Select(ctx, names, "Unique ID for a user in the Databricks account")
if err != nil { if err != nil {
return err return err
} }
@ -140,7 +140,7 @@ var getCmd = &cobra.Command{
Short: `Get user details.`, Short: `Get user details.`,
Long: `Get user details. Long: `Get user details.
Gets information for a specific user in Databricks Account.`, Gets information for a specific user in Databricks account.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustAccountClient, PreRunE: root.MustAccountClient,
@ -152,7 +152,7 @@ var getCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
id, err := cmdio.Select(ctx, names, "Unique ID for a user in the Databricks Account") id, err := cmdio.Select(ctx, names, "Unique ID for a user in the Databricks account")
if err != nil { if err != nil {
return err return err
} }
@ -194,7 +194,7 @@ var listCmd = &cobra.Command{
Short: `List users.`, Short: `List users.`,
Long: `List users. Long: `List users.
Gets details for all the users associated with a Databricks Account.`, Gets details for all the users associated with a Databricks account.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(0), Args: cobra.ExactArgs(0),

View File

@ -111,8 +111,8 @@ var listCmd = &cobra.Command{
Short: `Get permission assignments.`, Short: `Get permission assignments.`,
Long: `Get permission assignments. Long: `Get permission assignments.
Get the permission assignments for the specified Databricks Account and Get the permission assignments for the specified Databricks account and
Databricks Workspace.`, Databricks workspace.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),

View File

@ -18,7 +18,8 @@ var Cmd = &cobra.Command{
Long: `The alerts API can be used to perform CRUD operations on alerts. An alert is a Long: `The alerts API can be used to perform CRUD operations on alerts. An alert is a
Databricks SQL object that periodically runs a query, evaluates a condition of Databricks SQL object that periodically runs a query, evaluates a condition of
its result, and notifies one or more users and/or notification destinations if its result, and notifies one or more users and/or notification destinations if
the condition was met.`, the condition was met. Alerts can be scheduled using the sql_task type of
the Jobs API, e.g. :method:jobs/create.`,
} }
// start create command // start create command

View File

@ -181,6 +181,7 @@ func init() {
updateCmd.Flags().Var(&updateJson, "json", `either inline JSON string or @path/to/file.json with request body`) updateCmd.Flags().Var(&updateJson, "json", `either inline JSON string or @path/to/file.json with request body`)
updateCmd.Flags().StringVar(&updateReq.Comment, "comment", updateReq.Comment, `User-provided free-form text description.`) updateCmd.Flags().StringVar(&updateReq.Comment, "comment", updateReq.Comment, `User-provided free-form text description.`)
updateCmd.Flags().Var(&updateReq.IsolationMode, "isolation-mode", `Whether the current securable is accessible from all workspaces or a specific set of workspaces.`)
updateCmd.Flags().StringVar(&updateReq.Name, "name", updateReq.Name, `Name of catalog.`) updateCmd.Flags().StringVar(&updateReq.Name, "name", updateReq.Name, `Name of catalog.`)
updateCmd.Flags().StringVar(&updateReq.Owner, "owner", updateReq.Owner, `Username of current owner of catalog.`) updateCmd.Flags().StringVar(&updateReq.Owner, "owner", updateReq.Owner, `Username of current owner of catalog.`)
// TODO: map via StringToStringVar: properties // TODO: map via StringToStringVar: properties

View File

@ -110,6 +110,7 @@ func init() {
createCmd.Flags().BoolVar(&createReq.EnableElasticDisk, "enable-elastic-disk", createReq.EnableElasticDisk, `Autoscaling Local Storage: when enabled, this cluster will dynamically acquire additional disk space when its Spark workers are running low on disk space.`) createCmd.Flags().BoolVar(&createReq.EnableElasticDisk, "enable-elastic-disk", createReq.EnableElasticDisk, `Autoscaling Local Storage: when enabled, this cluster will dynamically acquire additional disk space when its Spark workers are running low on disk space.`)
createCmd.Flags().BoolVar(&createReq.EnableLocalDiskEncryption, "enable-local-disk-encryption", createReq.EnableLocalDiskEncryption, `Whether to enable LUKS on cluster VMs' local disks.`) createCmd.Flags().BoolVar(&createReq.EnableLocalDiskEncryption, "enable-local-disk-encryption", createReq.EnableLocalDiskEncryption, `Whether to enable LUKS on cluster VMs' local disks.`)
// TODO: complex arg: gcp_attributes // TODO: complex arg: gcp_attributes
// TODO: array: init_scripts
createCmd.Flags().StringVar(&createReq.InstancePoolId, "instance-pool-id", createReq.InstancePoolId, `The optional ID of the instance pool to which the cluster belongs.`) createCmd.Flags().StringVar(&createReq.InstancePoolId, "instance-pool-id", createReq.InstancePoolId, `The optional ID of the instance pool to which the cluster belongs.`)
createCmd.Flags().StringVar(&createReq.NodeTypeId, "node-type-id", createReq.NodeTypeId, `This field encodes, through a single value, the resources available to each of the Spark nodes in this cluster.`) createCmd.Flags().StringVar(&createReq.NodeTypeId, "node-type-id", createReq.NodeTypeId, `This field encodes, through a single value, the resources available to each of the Spark nodes in this cluster.`)
createCmd.Flags().IntVar(&createReq.NumWorkers, "num-workers", createReq.NumWorkers, `Number of worker nodes that this cluster should have.`) createCmd.Flags().IntVar(&createReq.NumWorkers, "num-workers", createReq.NumWorkers, `Number of worker nodes that this cluster should have.`)
@ -278,6 +279,7 @@ func init() {
editCmd.Flags().BoolVar(&editReq.EnableElasticDisk, "enable-elastic-disk", editReq.EnableElasticDisk, `Autoscaling Local Storage: when enabled, this cluster will dynamically acquire additional disk space when its Spark workers are running low on disk space.`) editCmd.Flags().BoolVar(&editReq.EnableElasticDisk, "enable-elastic-disk", editReq.EnableElasticDisk, `Autoscaling Local Storage: when enabled, this cluster will dynamically acquire additional disk space when its Spark workers are running low on disk space.`)
editCmd.Flags().BoolVar(&editReq.EnableLocalDiskEncryption, "enable-local-disk-encryption", editReq.EnableLocalDiskEncryption, `Whether to enable LUKS on cluster VMs' local disks.`) editCmd.Flags().BoolVar(&editReq.EnableLocalDiskEncryption, "enable-local-disk-encryption", editReq.EnableLocalDiskEncryption, `Whether to enable LUKS on cluster VMs' local disks.`)
// TODO: complex arg: gcp_attributes // TODO: complex arg: gcp_attributes
// TODO: array: init_scripts
editCmd.Flags().StringVar(&editReq.InstancePoolId, "instance-pool-id", editReq.InstancePoolId, `The optional ID of the instance pool to which the cluster belongs.`) editCmd.Flags().StringVar(&editReq.InstancePoolId, "instance-pool-id", editReq.InstancePoolId, `The optional ID of the instance pool to which the cluster belongs.`)
editCmd.Flags().StringVar(&editReq.NodeTypeId, "node-type-id", editReq.NodeTypeId, `This field encodes, through a single value, the resources available to each of the Spark nodes in this cluster.`) editCmd.Flags().StringVar(&editReq.NodeTypeId, "node-type-id", editReq.NodeTypeId, `This field encodes, through a single value, the resources available to each of the Spark nodes in this cluster.`)
editCmd.Flags().IntVar(&editReq.NumWorkers, "num-workers", editReq.NumWorkers, `Number of worker nodes that this cluster should have.`) editCmd.Flags().IntVar(&editReq.NumWorkers, "num-workers", editReq.NumWorkers, `Number of worker nodes that this cluster should have.`)
@ -413,7 +415,7 @@ var getCmd = &cobra.Command{
Short: `Get cluster info.`, Short: `Get cluster info.`,
Long: `Get cluster info. Long: `Get cluster info.
"Retrieves the information for a cluster given its identifier. Clusters can be Retrieves the information for a cluster given its identifier. Clusters can be
described while they are running, or up to 60 days after they are terminated.`, described while they are running, or up to 60 days after they are terminated.`,
Annotations: map[string]string{}, Annotations: map[string]string{},

2
cmd/workspace/cmd.go generated
View File

@ -49,6 +49,7 @@ import (
volumes "github.com/databricks/cli/cmd/workspace/volumes" volumes "github.com/databricks/cli/cmd/workspace/volumes"
warehouses "github.com/databricks/cli/cmd/workspace/warehouses" warehouses "github.com/databricks/cli/cmd/workspace/warehouses"
workspace "github.com/databricks/cli/cmd/workspace/workspace" workspace "github.com/databricks/cli/cmd/workspace/workspace"
workspace_bindings "github.com/databricks/cli/cmd/workspace/workspace-bindings"
workspace_conf "github.com/databricks/cli/cmd/workspace/workspace-conf" workspace_conf "github.com/databricks/cli/cmd/workspace/workspace-conf"
) )
@ -98,5 +99,6 @@ func init() {
root.RootCmd.AddCommand(volumes.Cmd) root.RootCmd.AddCommand(volumes.Cmd)
root.RootCmd.AddCommand(warehouses.Cmd) root.RootCmd.AddCommand(warehouses.Cmd)
root.RootCmd.AddCommand(workspace.Cmd) root.RootCmd.AddCommand(workspace.Cmd)
root.RootCmd.AddCommand(workspace_bindings.Cmd)
root.RootCmd.AddCommand(workspace_conf.Cmd) root.RootCmd.AddCommand(workspace_conf.Cmd)
} }

View File

@ -19,7 +19,8 @@ var Cmd = &cobra.Command{
it can be useful to use dashboard objects to look-up a collection of related it can be useful to use dashboard objects to look-up a collection of related
query IDs. The API can also be used to duplicate multiple dashboards at once query IDs. The API can also be used to duplicate multiple dashboards at once
since you can get a dashboard definition with a GET request and then POST it since you can get a dashboard definition with a GET request and then POST it
to create a new one.`, to create a new one. Dashboards can be scheduled using the sql_task type of
the Jobs API, e.g. :method:jobs/create.`,
} }
// start create command // start create command
@ -32,13 +33,10 @@ func init() {
// TODO: short flags // TODO: short flags
createCmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`) createCmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`)
createCmd.Flags().BoolVar(&createReq.DashboardFiltersEnabled, "dashboard-filters-enabled", createReq.DashboardFiltersEnabled, `In the web application, query filters that share a name are coupled to a single selection box if this value is true.`) createCmd.Flags().BoolVar(&createReq.IsFavorite, "is-favorite", createReq.IsFavorite, `Indicates whether this query object should appear in the current user's favorites list.`)
createCmd.Flags().BoolVar(&createReq.IsDraft, "is-draft", createReq.IsDraft, `Draft dashboards only appear in list views for their owners.`)
createCmd.Flags().BoolVar(&createReq.IsTrashed, "is-trashed", createReq.IsTrashed, `Indicates whether the dashboard is trashed.`)
createCmd.Flags().StringVar(&createReq.Name, "name", createReq.Name, `The title of this dashboard that appears in list views and at the top of the dashboard page.`) createCmd.Flags().StringVar(&createReq.Name, "name", createReq.Name, `The title of this dashboard that appears in list views and at the top of the dashboard page.`)
createCmd.Flags().StringVar(&createReq.Parent, "parent", createReq.Parent, `The identifier of the workspace folder containing the dashboard.`) createCmd.Flags().StringVar(&createReq.Parent, "parent", createReq.Parent, `The identifier of the workspace folder containing the dashboard.`)
// TODO: array: tags // TODO: array: tags
// TODO: array: widgets
} }

View File

@ -225,7 +225,7 @@ var getByNameCmd = &cobra.Command{
Short: `Get metadata.`, Short: `Get metadata.`,
Long: `Get metadata. Long: `Get metadata.
"Gets metadata for an experiment. Gets metadata for an experiment.
This endpoint will return deleted experiments, but prefers the active This endpoint will return deleted experiments, but prefers the active
experiment if an active and deleted experiment share the same name. If experiment if an active and deleted experiment share the same name. If
@ -233,7 +233,7 @@ var getByNameCmd = &cobra.Command{
them. them.
Throws RESOURCE_DOES_NOT_EXIST if no experiment with the specified name Throws RESOURCE_DOES_NOT_EXIST if no experiment with the specified name
exists.S`, exists.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
@ -339,7 +339,7 @@ var getRunCmd = &cobra.Command{
Short: `Get a run.`, Short: `Get a run.`,
Long: `Get a run. Long: `Get a run.
"Gets the metadata, metrics, params, and tags for a run. In the case where Gets the metadata, metrics, params, and tags for a run. In the case where
multiple metrics with the same key are logged for a run, return only the value multiple metrics with the same key are logged for a run, return only the value
with the latest timestamp. with the latest timestamp.
@ -514,6 +514,47 @@ var logBatchCmd = &cobra.Command{
}, },
} }
// start log-inputs command
var logInputsReq ml.LogInputs
var logInputsJson flags.JsonFlag
func init() {
Cmd.AddCommand(logInputsCmd)
// TODO: short flags
logInputsCmd.Flags().Var(&logInputsJson, "json", `either inline JSON string or @path/to/file.json with request body`)
// TODO: array: datasets
logInputsCmd.Flags().StringVar(&logInputsReq.RunId, "run-id", logInputsReq.RunId, `ID of the run to log under.`)
}
var logInputsCmd = &cobra.Command{
Use: "log-inputs",
Short: `Log inputs to a run.`,
Long: `Log inputs to a run.
**NOTE:** Experimental: This API may change or be removed in a future release
without warning.`,
Annotations: map[string]string{},
PreRunE: root.MustWorkspaceClient,
RunE: func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context()
w := root.WorkspaceClient(ctx)
err = logInputsJson.Unmarshal(&logInputsReq)
if err != nil {
return err
}
err = w.Experiments.LogInputs(ctx, logInputsReq)
if err != nil {
return err
}
return nil
},
}
// start log-metric command // start log-metric command
var logMetricReq ml.LogMetric var logMetricReq ml.LogMetric
@ -652,12 +693,12 @@ var restoreExperimentCmd = &cobra.Command{
Short: `Restores an experiment.`, Short: `Restores an experiment.`,
Long: `Restores an experiment. Long: `Restores an experiment.
"Restore an experiment marked for deletion. This also restores associated Restore an experiment marked for deletion. This also restores associated
metadata, runs, metrics, params, and tags. If experiment uses FileStore, metadata, runs, metrics, params, and tags. If experiment uses FileStore,
underlying artifacts associated with experiment are also restored. underlying artifacts associated with experiment are also restored.
Throws RESOURCE_DOES_NOT_EXIST if experiment was never created or was Throws RESOURCE_DOES_NOT_EXIST if experiment was never created or was
permanently deleted.",`, permanently deleted.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),

View File

@ -166,7 +166,7 @@ var listCmd = &cobra.Command{
Short: `Get init scripts.`, Short: `Get init scripts.`,
Long: `Get init scripts. Long: `Get init scripts.
"Get a list of all global init scripts for this workspace. This returns all Get a list of all global init scripts for this workspace. This returns all
properties for each script but **not** the script contents. To retrieve the properties for each script but **not** the script contents. To retrieve the
contents of a script, use the [get a global init contents of a script, use the [get a global init
script](#operation/get-script) operation.`, script](#operation/get-script) operation.`,

View File

@ -14,13 +14,13 @@ import (
var Cmd = &cobra.Command{ var Cmd = &cobra.Command{
Use: "groups", Use: "groups",
Short: `Groups simplify identity management, making it easier to assign access to Databricks Workspace, data, and other securable objects.`, Short: `Groups simplify identity management, making it easier to assign access to Databricks workspace, data, and other securable objects.`,
Long: `Groups simplify identity management, making it easier to assign access to Long: `Groups simplify identity management, making it easier to assign access to
Databricks Workspace, data, and other securable objects. Databricks workspace, data, and other securable objects.
It is best practice to assign access to workspaces and access-control policies It is best practice to assign access to workspaces and access-control policies
in Unity Catalog to groups, instead of to users individually. All Databricks in Unity Catalog to groups, instead of to users individually. All Databricks
Workspace identities can be assigned as members of groups, and members inherit workspace identities can be assigned as members of groups, and members inherit
permissions that are assigned to their group.`, permissions that are assigned to their group.`,
} }
@ -49,7 +49,7 @@ var createCmd = &cobra.Command{
Short: `Create a new group.`, Short: `Create a new group.`,
Long: `Create a new group. Long: `Create a new group.
Creates a group in the Databricks Workspace with a unique name, using the Creates a group in the Databricks workspace with a unique name, using the
supplied group details.`, supplied group details.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
@ -86,7 +86,7 @@ var deleteCmd = &cobra.Command{
Short: `Delete a group.`, Short: `Delete a group.`,
Long: `Delete a group. Long: `Delete a group.
Deletes a group from the Databricks Workspace.`, Deletes a group from the Databricks workspace.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustWorkspaceClient, PreRunE: root.MustWorkspaceClient,
@ -98,7 +98,7 @@ var deleteCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
id, err := cmdio.Select(ctx, names, "Unique ID for a group in the Databricks Workspace") id, err := cmdio.Select(ctx, names, "Unique ID for a group in the Databricks workspace")
if err != nil { if err != nil {
return err return err
} }
@ -132,7 +132,7 @@ var getCmd = &cobra.Command{
Short: `Get group details.`, Short: `Get group details.`,
Long: `Get group details. Long: `Get group details.
Gets the information for a specific group in the Databricks Workspace.`, Gets the information for a specific group in the Databricks workspace.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustWorkspaceClient, PreRunE: root.MustWorkspaceClient,
@ -144,7 +144,7 @@ var getCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
id, err := cmdio.Select(ctx, names, "Unique ID for a group in the Databricks Workspace") id, err := cmdio.Select(ctx, names, "Unique ID for a group in the Databricks workspace")
if err != nil { if err != nil {
return err return err
} }
@ -186,7 +186,7 @@ var listCmd = &cobra.Command{
Short: `List group details.`, Short: `List group details.`,
Long: `List group details. Long: `List group details.
Gets all details of the groups associated with the Databricks Workspace.`, Gets all details of the groups associated with the Databricks workspace.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(0), Args: cobra.ExactArgs(0),

View File

@ -29,10 +29,11 @@ var Cmd = &cobra.Command{
Spark submit, and Java applications. Spark submit, and Java applications.
You should never hard code secrets or store them in plain text. Use the You should never hard code secrets or store them in plain text. Use the
:service:secrets to manage secrets in the [Databricks CLI]. Use the [Secrets [Secrets CLI] to manage secrets in the [Databricks CLI]. Use the [Secrets
utility] to reference secrets in notebooks and jobs. utility] to reference secrets in notebooks and jobs.
[Databricks CLI]: https://docs.databricks.com/dev-tools/cli/index.html [Databricks CLI]: https://docs.databricks.com/dev-tools/cli/index.html
[Secrets CLI]: https://docs.databricks.com/dev-tools/cli/secrets-cli.html
[Secrets utility]: https://docs.databricks.com/dev-tools/databricks-utils.html#dbutils-secrets`, [Secrets utility]: https://docs.databricks.com/dev-tools/databricks-utils.html#dbutils-secrets`,
} }
@ -184,6 +185,7 @@ func init() {
// TODO: array: job_clusters // TODO: array: job_clusters
createCmd.Flags().IntVar(&createReq.MaxConcurrentRuns, "max-concurrent-runs", createReq.MaxConcurrentRuns, `An optional maximum allowed number of concurrent runs of the job.`) createCmd.Flags().IntVar(&createReq.MaxConcurrentRuns, "max-concurrent-runs", createReq.MaxConcurrentRuns, `An optional maximum allowed number of concurrent runs of the job.`)
createCmd.Flags().StringVar(&createReq.Name, "name", createReq.Name, `An optional name for the job.`) createCmd.Flags().StringVar(&createReq.Name, "name", createReq.Name, `An optional name for the job.`)
// TODO: complex arg: notification_settings
// TODO: complex arg: schedule // TODO: complex arg: schedule
// TODO: map via StringToStringVar: tags // TODO: map via StringToStringVar: tags
// TODO: array: tasks // TODO: array: tasks
@ -852,6 +854,7 @@ func init() {
// TODO: array: access_control_list // TODO: array: access_control_list
// TODO: complex arg: git_source // TODO: complex arg: git_source
submitCmd.Flags().StringVar(&submitReq.IdempotencyToken, "idempotency-token", submitReq.IdempotencyToken, `An optional token that can be used to guarantee the idempotency of job run requests.`) submitCmd.Flags().StringVar(&submitReq.IdempotencyToken, "idempotency-token", submitReq.IdempotencyToken, `An optional token that can be used to guarantee the idempotency of job run requests.`)
// TODO: complex arg: notification_settings
submitCmd.Flags().StringVar(&submitReq.RunName, "run-name", submitReq.RunName, `An optional name for the run.`) submitCmd.Flags().StringVar(&submitReq.RunName, "run-name", submitReq.RunName, `An optional name for the run.`)
// TODO: array: tasks // TODO: array: tasks
submitCmd.Flags().IntVar(&submitReq.TimeoutSeconds, "timeout-seconds", submitReq.TimeoutSeconds, `An optional timeout applied to each run of this job.`) submitCmd.Flags().IntVar(&submitReq.TimeoutSeconds, "timeout-seconds", submitReq.TimeoutSeconds, `An optional timeout applied to each run of this job.`)
@ -928,8 +931,8 @@ func init() {
var updateCmd = &cobra.Command{ var updateCmd = &cobra.Command{
Use: "update", Use: "update",
Short: `Partially updates a job.`, Short: `Partially update a job.`,
Long: `Partially updates a job. Long: `Partially update a job.
Add, update, or remove specific settings of an existing job. Use the ResetJob Add, update, or remove specific settings of an existing job. Use the ResetJob
to overwrite all job settings.`, to overwrite all job settings.`,

View File

@ -470,7 +470,10 @@ var deleteTransitionRequestCmd = &cobra.Command{
w := root.WorkspaceClient(ctx) w := root.WorkspaceClient(ctx)
deleteTransitionRequestReq.Name = args[0] deleteTransitionRequestReq.Name = args[0]
deleteTransitionRequestReq.Version = args[1] deleteTransitionRequestReq.Version = args[1]
deleteTransitionRequestReq.Stage = args[2] _, err = fmt.Sscan(args[2], &deleteTransitionRequestReq.Stage)
if err != nil {
return fmt.Errorf("invalid STAGE: %s", args[2])
}
deleteTransitionRequestReq.Creator = args[3] deleteTransitionRequestReq.Creator = args[3]
err = w.ModelRegistry.DeleteTransitionRequest(ctx, deleteTransitionRequestReq) err = w.ModelRegistry.DeleteTransitionRequest(ctx, deleteTransitionRequestReq)
@ -572,8 +575,8 @@ var getModelCmd = &cobra.Command{
Short: `Get model.`, Short: `Get model.`,
Long: `Get model. Long: `Get model.
Get the details of a model. This is a Databricks Workspace version of the Get the details of a model. This is a Databricks workspace version of the
[MLflow endpoint] that also returns the model's Databricks Workspace ID and [MLflow endpoint] that also returns the model's Databricks workspace ID and
the permission level of the requesting user on the model. the permission level of the requesting user on the model.
[MLflow endpoint]: https://www.mlflow.org/docs/latest/rest-api.html#get-registeredmodel`, [MLflow endpoint]: https://www.mlflow.org/docs/latest/rest-api.html#get-registeredmodel`,
@ -1059,7 +1062,7 @@ var transitionStageCmd = &cobra.Command{
Short: `Transition a stage.`, Short: `Transition a stage.`,
Long: `Transition a stage. Long: `Transition a stage.
Transition a model version's stage. This is a Databricks Workspace version of Transition a model version's stage. This is a Databricks workspace version of
the [MLflow endpoint] that also accepts a comment associated with the the [MLflow endpoint] that also accepts a comment associated with the
transition to be recorded.", transition to be recorded.",

View File

@ -57,6 +57,7 @@ func init() {
// TODO: array: libraries // TODO: array: libraries
createCmd.Flags().StringVar(&createReq.Name, "name", createReq.Name, `Friendly identifier for this pipeline.`) createCmd.Flags().StringVar(&createReq.Name, "name", createReq.Name, `Friendly identifier for this pipeline.`)
createCmd.Flags().BoolVar(&createReq.Photon, "photon", createReq.Photon, `Whether Photon is enabled for this pipeline.`) createCmd.Flags().BoolVar(&createReq.Photon, "photon", createReq.Photon, `Whether Photon is enabled for this pipeline.`)
createCmd.Flags().BoolVar(&createReq.Serverless, "serverless", createReq.Serverless, `Whether serverless compute is enabled for this pipeline.`)
createCmd.Flags().StringVar(&createReq.Storage, "storage", createReq.Storage, `DBFS root directory for storing checkpoints and tables.`) createCmd.Flags().StringVar(&createReq.Storage, "storage", createReq.Storage, `DBFS root directory for storing checkpoints and tables.`)
createCmd.Flags().StringVar(&createReq.Target, "target", createReq.Target, `Target schema (database) to add tables in this pipeline to.`) createCmd.Flags().StringVar(&createReq.Target, "target", createReq.Target, `Target schema (database) to add tables in this pipeline to.`)
// TODO: complex arg: trigger // TODO: complex arg: trigger
@ -560,6 +561,7 @@ func init() {
updateCmd.Flags().StringVar(&updateReq.Name, "name", updateReq.Name, `Friendly identifier for this pipeline.`) updateCmd.Flags().StringVar(&updateReq.Name, "name", updateReq.Name, `Friendly identifier for this pipeline.`)
updateCmd.Flags().BoolVar(&updateReq.Photon, "photon", updateReq.Photon, `Whether Photon is enabled for this pipeline.`) updateCmd.Flags().BoolVar(&updateReq.Photon, "photon", updateReq.Photon, `Whether Photon is enabled for this pipeline.`)
updateCmd.Flags().StringVar(&updateReq.PipelineId, "pipeline-id", updateReq.PipelineId, `Unique identifier for this pipeline.`) updateCmd.Flags().StringVar(&updateReq.PipelineId, "pipeline-id", updateReq.PipelineId, `Unique identifier for this pipeline.`)
updateCmd.Flags().BoolVar(&updateReq.Serverless, "serverless", updateReq.Serverless, `Whether serverless compute is enabled for this pipeline.`)
updateCmd.Flags().StringVar(&updateReq.Storage, "storage", updateReq.Storage, `DBFS root directory for storing checkpoints and tables.`) updateCmd.Flags().StringVar(&updateReq.Storage, "storage", updateReq.Storage, `DBFS root directory for storing checkpoints and tables.`)
updateCmd.Flags().StringVar(&updateReq.Target, "target", updateReq.Target, `Target schema (database) to add tables in this pipeline to.`) updateCmd.Flags().StringVar(&updateReq.Target, "target", updateReq.Target, `Target schema (database) to add tables in this pipeline to.`)
// TODO: complex arg: trigger // TODO: complex arg: trigger

View File

@ -17,7 +17,8 @@ var Cmd = &cobra.Command{
Short: `These endpoints are used for CRUD operations on query definitions.`, Short: `These endpoints are used for CRUD operations on query definitions.`,
Long: `These endpoints are used for CRUD operations on query definitions. Query Long: `These endpoints are used for CRUD operations on query definitions. Query
definitions include the target SQL warehouse, query text, name, description, definitions include the target SQL warehouse, query text, name, description,
tags, parameters, and visualizations.`, tags, parameters, and visualizations. Queries can be scheduled using the
sql_task type of the Jobs API, e.g. :method:jobs/create.`,
} }
// start create command // start create command

View File

@ -32,7 +32,7 @@ func init() {
// TODO: any: data_recipient_global_metastore_id // TODO: any: data_recipient_global_metastore_id
// TODO: complex arg: ip_access_list // TODO: complex arg: ip_access_list
createCmd.Flags().StringVar(&createReq.Owner, "owner", createReq.Owner, `Username of the recipient owner.`) createCmd.Flags().StringVar(&createReq.Owner, "owner", createReq.Owner, `Username of the recipient owner.`)
// TODO: any: properties_kvpairs // TODO: complex arg: properties_kvpairs
createCmd.Flags().StringVar(&createReq.SharingCode, "sharing-code", createReq.SharingCode, `The one-time sharing code provided by the data recipient.`) createCmd.Flags().StringVar(&createReq.SharingCode, "sharing-code", createReq.SharingCode, `The one-time sharing code provided by the data recipient.`)
} }
@ -300,7 +300,7 @@ func init() {
// TODO: complex arg: ip_access_list // TODO: complex arg: ip_access_list
updateCmd.Flags().StringVar(&updateReq.Name, "name", updateReq.Name, `Name of Recipient.`) updateCmd.Flags().StringVar(&updateReq.Name, "name", updateReq.Name, `Name of Recipient.`)
updateCmd.Flags().StringVar(&updateReq.Owner, "owner", updateReq.Owner, `Username of the recipient owner.`) updateCmd.Flags().StringVar(&updateReq.Owner, "owner", updateReq.Owner, `Username of the recipient owner.`)
// TODO: any: properties_kvpairs // TODO: complex arg: properties_kvpairs
} }

View File

@ -49,7 +49,7 @@ var createCmd = &cobra.Command{
Short: `Create a service principal.`, Short: `Create a service principal.`,
Long: `Create a service principal. Long: `Create a service principal.
Creates a new service principal in the Databricks Workspace.`, Creates a new service principal in the Databricks workspace.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustWorkspaceClient, PreRunE: root.MustWorkspaceClient,
@ -85,7 +85,7 @@ var deleteCmd = &cobra.Command{
Short: `Delete a service principal.`, Short: `Delete a service principal.`,
Long: `Delete a service principal. Long: `Delete a service principal.
Delete a single service principal in the Databricks Workspace.`, Delete a single service principal in the Databricks workspace.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustWorkspaceClient, PreRunE: root.MustWorkspaceClient,
@ -97,7 +97,7 @@ var deleteCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
id, err := cmdio.Select(ctx, names, "Unique ID for a service principal in the Databricks Workspace") id, err := cmdio.Select(ctx, names, "Unique ID for a service principal in the Databricks workspace")
if err != nil { if err != nil {
return err return err
} }
@ -132,7 +132,7 @@ var getCmd = &cobra.Command{
Long: `Get service principal details. Long: `Get service principal details.
Gets the details for a single service principal define in the Databricks Gets the details for a single service principal define in the Databricks
Workspace.`, workspace.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustWorkspaceClient, PreRunE: root.MustWorkspaceClient,
@ -144,7 +144,7 @@ var getCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
id, err := cmdio.Select(ctx, names, "Unique ID for a service principal in the Databricks Workspace") id, err := cmdio.Select(ctx, names, "Unique ID for a service principal in the Databricks workspace")
if err != nil { if err != nil {
return err return err
} }
@ -186,7 +186,7 @@ var listCmd = &cobra.Command{
Short: `List service principals.`, Short: `List service principals.`,
Long: `List service principals. Long: `List service principals.
Gets the set of service principals associated with a Databricks Workspace.`, Gets the set of service principals associated with a Databricks workspace.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(0), Args: cobra.ExactArgs(0),
@ -223,7 +223,7 @@ var patchCmd = &cobra.Command{
Long: `Update service principal details. Long: `Update service principal details.
Partially updates the details of a single service principal in the Databricks Partially updates the details of a single service principal in the Databricks
Workspace.`, workspace.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustWorkspaceClient, PreRunE: root.MustWorkspaceClient,

View File

@ -202,7 +202,7 @@ var listCmd = &cobra.Command{
RunE: func(cmd *cobra.Command, args []string) (err error) { RunE: func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context() ctx := cmd.Context()
w := root.WorkspaceClient(ctx) w := root.WorkspaceClient(ctx)
response, err := w.StorageCredentials.List(ctx) response, err := w.StorageCredentials.ListAll(ctx)
if err != nil { if err != nil {
return err return err
} }
@ -250,7 +250,8 @@ var updateCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
updateReq.Name = args[0] updateReq.MetastoreId = args[0]
updateReq.Name = args[1]
response, err := w.StorageCredentials.Update(ctx, updateReq) response, err := w.StorageCredentials.Update(ctx, updateReq)
if err != nil { if err != nil {

View File

@ -81,7 +81,7 @@ var deleteCmd = &cobra.Command{
ctx := cmd.Context() ctx := cmd.Context()
w := root.WorkspaceClient(ctx) w := root.WorkspaceClient(ctx)
if len(args) == 0 { if len(args) == 0 {
names, err := w.TokenManagement.PublicTokenInfoCommentToTokenIdMap(ctx, settings.ListTokenManagementRequest{}) names, err := w.TokenManagement.TokenInfoCommentToTokenIdMap(ctx, settings.ListTokenManagementRequest{})
if err != nil { if err != nil {
return err return err
} }
@ -127,7 +127,7 @@ var getCmd = &cobra.Command{
ctx := cmd.Context() ctx := cmd.Context()
w := root.WorkspaceClient(ctx) w := root.WorkspaceClient(ctx)
if len(args) == 0 { if len(args) == 0 {
names, err := w.TokenManagement.PublicTokenInfoCommentToTokenIdMap(ctx, settings.ListTokenManagementRequest{}) names, err := w.TokenManagement.TokenInfoCommentToTokenIdMap(ctx, settings.ListTokenManagementRequest{})
if err != nil { if err != nil {
return err return err
} }

View File

@ -82,7 +82,7 @@ var deleteCmd = &cobra.Command{
ctx := cmd.Context() ctx := cmd.Context()
w := root.WorkspaceClient(ctx) w := root.WorkspaceClient(ctx)
if len(args) == 0 { if len(args) == 0 {
names, err := w.Tokens.PublicTokenInfoCommentToTokenIdMap(ctx) names, err := w.Tokens.TokenInfoCommentToTokenIdMap(ctx)
if err != nil { if err != nil {
return err return err
} }

View File

@ -18,13 +18,13 @@ var Cmd = &cobra.Command{
Long: `User identities recognized by Databricks and represented by email addresses. Long: `User identities recognized by Databricks and represented by email addresses.
Databricks recommends using SCIM provisioning to sync users and groups Databricks recommends using SCIM provisioning to sync users and groups
automatically from your identity provider to your Databricks Workspace. SCIM automatically from your identity provider to your Databricks workspace. SCIM
streamlines onboarding a new employee or team by using your identity provider streamlines onboarding a new employee or team by using your identity provider
to create users and groups in Databricks Workspace and give them the proper to create users and groups in Databricks workspace and give them the proper
level of access. When a user leaves your organization or no longer needs level of access. When a user leaves your organization or no longer needs
access to Databricks Workspace, admins can terminate the user in your identity access to Databricks workspace, admins can terminate the user in your identity
provider and that users account will also be removed from Databricks provider and that users account will also be removed from Databricks
Workspace. This ensures a consistent offboarding process and prevents workspace. This ensures a consistent offboarding process and prevents
unauthorized users from accessing sensitive data.`, unauthorized users from accessing sensitive data.`,
} }
@ -56,7 +56,7 @@ var createCmd = &cobra.Command{
Short: `Create a new user.`, Short: `Create a new user.`,
Long: `Create a new user. Long: `Create a new user.
Creates a new user in the Databricks Workspace. This new user will also be Creates a new user in the Databricks workspace. This new user will also be
added to the Databricks account.`, added to the Databricks account.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
@ -93,7 +93,7 @@ var deleteCmd = &cobra.Command{
Short: `Delete a user.`, Short: `Delete a user.`,
Long: `Delete a user. Long: `Delete a user.
Deletes a user. Deleting a user from a Databricks Workspace also removes Deletes a user. Deleting a user from a Databricks workspace also removes
objects associated with the user.`, objects associated with the user.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
@ -106,7 +106,7 @@ var deleteCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
id, err := cmdio.Select(ctx, names, "Unique ID for a user in the Databricks Workspace") id, err := cmdio.Select(ctx, names, "Unique ID for a user in the Databricks workspace")
if err != nil { if err != nil {
return err return err
} }
@ -140,7 +140,7 @@ var getCmd = &cobra.Command{
Short: `Get user details.`, Short: `Get user details.`,
Long: `Get user details. Long: `Get user details.
Gets information for a specific user in Databricks Workspace.`, Gets information for a specific user in Databricks workspace.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
PreRunE: root.MustWorkspaceClient, PreRunE: root.MustWorkspaceClient,
@ -152,7 +152,7 @@ var getCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
id, err := cmdio.Select(ctx, names, "Unique ID for a user in the Databricks Workspace") id, err := cmdio.Select(ctx, names, "Unique ID for a user in the Databricks workspace")
if err != nil { if err != nil {
return err return err
} }
@ -194,7 +194,7 @@ var listCmd = &cobra.Command{
Short: `List users.`, Short: `List users.`,
Long: `List users. Long: `List users.
Gets details for all the users associated with a Databricks Workspace.`, Gets details for all the users associated with a Databricks workspace.`,
Annotations: map[string]string{}, Annotations: map[string]string{},
Args: cobra.ExactArgs(0), Args: cobra.ExactArgs(0),

View File

@ -391,7 +391,6 @@ func init() {
setWorkspaceWarehouseConfigCmd.Flags().StringVar(&setWorkspaceWarehouseConfigReq.GoogleServiceAccount, "google-service-account", setWorkspaceWarehouseConfigReq.GoogleServiceAccount, `GCP only: Google Service Account used to pass to cluster to access Google Cloud Storage.`) setWorkspaceWarehouseConfigCmd.Flags().StringVar(&setWorkspaceWarehouseConfigReq.GoogleServiceAccount, "google-service-account", setWorkspaceWarehouseConfigReq.GoogleServiceAccount, `GCP only: Google Service Account used to pass to cluster to access Google Cloud Storage.`)
setWorkspaceWarehouseConfigCmd.Flags().StringVar(&setWorkspaceWarehouseConfigReq.InstanceProfileArn, "instance-profile-arn", setWorkspaceWarehouseConfigReq.InstanceProfileArn, `AWS Only: Instance profile used to pass IAM role to the cluster.`) setWorkspaceWarehouseConfigCmd.Flags().StringVar(&setWorkspaceWarehouseConfigReq.InstanceProfileArn, "instance-profile-arn", setWorkspaceWarehouseConfigReq.InstanceProfileArn, `AWS Only: Instance profile used to pass IAM role to the cluster.`)
setWorkspaceWarehouseConfigCmd.Flags().Var(&setWorkspaceWarehouseConfigReq.SecurityPolicy, "security-policy", `Security policy for warehouses.`) setWorkspaceWarehouseConfigCmd.Flags().Var(&setWorkspaceWarehouseConfigReq.SecurityPolicy, "security-policy", `Security policy for warehouses.`)
setWorkspaceWarehouseConfigCmd.Flags().BoolVar(&setWorkspaceWarehouseConfigReq.ServerlessAgreement, "serverless-agreement", setWorkspaceWarehouseConfigReq.ServerlessAgreement, `Internal.`)
// TODO: complex arg: sql_configuration_parameters // TODO: complex arg: sql_configuration_parameters
} }

View File

@ -0,0 +1,100 @@
// Code generated from OpenAPI specs by Databricks SDK Generator. DO NOT EDIT.
package workspace_bindings
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"
)
var Cmd = &cobra.Command{
Use: "workspace-bindings",
Short: `A catalog in Databricks can be configured as __OPEN__ or __ISOLATED__.`,
Long: `A catalog in Databricks can be configured as __OPEN__ or __ISOLATED__. An
__OPEN__ catalog can be accessed from any workspace, while an __ISOLATED__
catalog can only be access from a configured list of workspaces.
A catalog's workspace bindings can be configured by a metastore admin or the
owner of the catalog.`,
}
// start get command
var getReq catalog.GetWorkspaceBindingRequest
func init() {
Cmd.AddCommand(getCmd)
// TODO: short flags
}
var getCmd = &cobra.Command{
Use: "get NAME",
Short: `Get catalog workspace bindings.`,
Long: `Get catalog workspace bindings.
Gets workspace bindings of the catalog. The caller must be a metastore admin
or an owner of the catalog.`,
Annotations: map[string]string{},
Args: cobra.ExactArgs(1),
PreRunE: root.MustWorkspaceClient,
RunE: func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context()
w := root.WorkspaceClient(ctx)
getReq.Name = args[0]
response, err := w.WorkspaceBindings.Get(ctx, getReq)
if err != nil {
return err
}
return cmdio.Render(ctx, response)
},
}
// start update command
var updateReq catalog.UpdateWorkspaceBindings
var updateJson flags.JsonFlag
func init() {
Cmd.AddCommand(updateCmd)
// TODO: short flags
updateCmd.Flags().Var(&updateJson, "json", `either inline JSON string or @path/to/file.json with request body`)
// TODO: array: assign_workspaces
// TODO: array: unassign_workspaces
}
var updateCmd = &cobra.Command{
Use: "update",
Short: `Update catalog workspace bindings.`,
Long: `Update catalog workspace bindings.
Updates workspace bindings of the catalog. The caller must be a metastore
admin or an owner of the catalog.`,
Annotations: map[string]string{},
PreRunE: root.MustWorkspaceClient,
RunE: func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context()
w := root.WorkspaceClient(ctx)
err = updateJson.Unmarshal(&updateReq)
if err != nil {
return err
}
updateReq.Name = args[0]
response, err := w.WorkspaceBindings.Update(ctx, updateReq)
if err != nil {
return err
}
return cmdio.Render(ctx, response)
},
}
// end service WorkspaceBindings

18
go.mod
View File

@ -4,7 +4,7 @@ go 1.18
require ( require (
github.com/briandowns/spinner v1.23.0 // Apache 2.0 github.com/briandowns/spinner v1.23.0 // Apache 2.0
github.com/databricks/databricks-sdk-go v0.8.0 // Apache 2.0 github.com/databricks/databricks-sdk-go v0.9.0 // Apache 2.0
github.com/fatih/color v1.15.0 // MIT github.com/fatih/color v1.15.0 // MIT
github.com/ghodss/yaml v1.0.0 // MIT + NOTICE github.com/ghodss/yaml v1.0.0 // MIT + NOTICE
github.com/google/uuid v1.3.0 // BSD-3-Clause github.com/google/uuid v1.3.0 // BSD-3-Clause
@ -20,13 +20,13 @@ require (
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // MIT github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // MIT
github.com/spf13/cobra v1.7.0 // Apache 2.0 github.com/spf13/cobra v1.7.0 // Apache 2.0
github.com/spf13/pflag v1.0.5 // BSD-3-Clause github.com/spf13/pflag v1.0.5 // BSD-3-Clause
github.com/stretchr/testify v1.8.2 // MIT github.com/stretchr/testify v1.8.3 // MIT
github.com/whilp/git-urls v1.0.0 // MIT github.com/whilp/git-urls v1.0.0 // MIT
golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0
golang.org/x/mod v0.10.0 golang.org/x/mod v0.10.0
golang.org/x/oauth2 v0.7.0 golang.org/x/oauth2 v0.8.0
golang.org/x/sync v0.2.0 golang.org/x/sync v0.2.0
golang.org/x/term v0.7.0 golang.org/x/term v0.8.0
golang.org/x/text v0.9.0 golang.org/x/text v0.9.0
gopkg.in/ini.v1 v1.67.0 // Apache 2.0 gopkg.in/ini.v1 v1.67.0 // Apache 2.0
) )
@ -40,7 +40,7 @@ require (
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
github.com/golang/protobuf v1.5.3 // indirect github.com/golang/protobuf v1.5.3 // indirect
github.com/google/go-querystring v1.1.0 // indirect github.com/google/go-querystring v1.1.0 // indirect
github.com/google/s2a-go v0.1.0 // indirect github.com/google/s2a-go v0.1.3 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect
@ -49,12 +49,12 @@ require (
github.com/zclconf/go-cty v1.13.0 // indirect github.com/zclconf/go-cty v1.13.0 // indirect
go.opencensus.io v0.24.0 // indirect go.opencensus.io v0.24.0 // indirect
golang.org/x/crypto v0.7.0 // indirect golang.org/x/crypto v0.7.0 // indirect
golang.org/x/net v0.9.0 // indirect golang.org/x/net v0.10.0 // indirect
golang.org/x/sys v0.7.0 // indirect golang.org/x/sys v0.8.0 // indirect
golang.org/x/time v0.3.0 // indirect golang.org/x/time v0.3.0 // indirect
google.golang.org/api v0.118.0 // indirect google.golang.org/api v0.123.0 // indirect
google.golang.org/appengine v1.6.7 // indirect google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd // indirect google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
google.golang.org/grpc v1.54.0 // indirect google.golang.org/grpc v1.54.0 // indirect
google.golang.org/protobuf v1.30.0 // indirect google.golang.org/protobuf v1.30.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect

53
go.sum
View File

@ -30,8 +30,8 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/databricks/databricks-sdk-go v0.8.0 h1:LNWpcjDDFB9glT3aj6+Ie8Nlk3346TGCHUyUs3D5sU4= github.com/databricks/databricks-sdk-go v0.9.0 h1:wFeb4fk2EJ4I/pYpq/KK/O4TwqsDpNBJYauXcISMbRw=
github.com/databricks/databricks-sdk-go v0.8.0/go.mod h1:aEMLe00mMlf5gvkD8PInqOM+dIAimeuAM6U+9eQN2yE= github.com/databricks/databricks-sdk-go v0.9.0/go.mod h1:C0vVp7XV/Q8wf/LJCO1oADE8KLB0kcdukjwZMlwysA0=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@ -81,8 +81,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
github.com/google/s2a-go v0.1.0 h1:3Qm0liEiCErViKERO2Su5wp+9PfMRiuS6XB5FvpKnYQ= github.com/google/s2a-go v0.1.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE=
github.com/google/s2a-go v0.1.0/go.mod h1:OJpEgntRZo8ugHpF9hkoLJbS5dSI20XZeXJ9JVywLlM= github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@ -143,11 +143,12 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/whilp/git-urls v1.0.0 h1:95f6UMWN5FKW71ECsXRUd3FVYiXdrE7aX4NZKcPmIjU= github.com/whilp/git-urls v1.0.0 h1:95f6UMWN5FKW71ECsXRUd3FVYiXdrE7aX4NZKcPmIjU=
github.com/whilp/git-urls v1.0.0/go.mod h1:J16SAmobsqc3Qcy98brfl5f5+e0clUvg1krgwk/qCfE= github.com/whilp/git-urls v1.0.0/go.mod h1:J16SAmobsqc3Qcy98brfl5f5+e0clUvg1krgwk/qCfE=
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/zclconf/go-cty v1.13.0 h1:It5dfKTTZHe9aeppbNOda3mN7Ag7sg6QkBNm6TkyFa0= github.com/zclconf/go-cty v1.13.0 h1:It5dfKTTZHe9aeppbNOda3mN7Ag7sg6QkBNm6TkyFa0=
github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0=
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
@ -156,6 +157,7 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@ -164,6 +166,7 @@ golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZ
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk=
golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@ -173,21 +176,23 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8=
golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@ -202,19 +207,22 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
@ -224,10 +232,13 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.118.0 h1:FNfHq9Z2GKULxu7cEhCaB0wWQHg43UpomrrN+24ZRdE= google.golang.org/api v0.123.0 h1:yHVU//vA+qkOhm4reEC9LtzHVUCN/IqqNRl1iQ9xE20=
google.golang.org/api v0.118.0/go.mod h1:76TtD3vkgmZ66zZzp72bUUklpmQmKlhh6sYtIjYK+5E= google.golang.org/api v0.123.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
@ -236,8 +247,8 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd h1:sLpv7bNL1AsX3fdnWh9WVh7ejIzXdOc1RRHGeAmeStU= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A=
google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=