databricks-cli/cmd/workspace/connections/connections.go

399 lines
11 KiB
Go
Raw Normal View History

// Code generated from OpenAPI specs by Databricks SDK Generator. DO NOT EDIT.
package connections
import (
"fmt"
"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"
)
// Slice with functions to override default command behavior.
// Functions can be added from the `init()` function in manually curated files in this directory.
var cmdOverrides []func(*cobra.Command)
func New() *cobra.Command {
cmd := &cobra.Command{
Use: "connections",
Short: `Connections allow for creating a connection to an external data source.`,
Long: `Connections allow for creating a connection to an external data source.
A connection is an abstraction of an external data source that can be
connected from Databricks Compute. Creating a connection object is the first
step to managing external data sources within Unity Catalog, with the second
step being creating a data object (catalog, schema, or table) using the
connection. Data objects derived from a connection can be written to or read
from similar to other Unity Catalog data objects based on cloud storage. Users
may create different types of connections with each connection having a unique
set of configuration options to support credential management and other
settings.`,
GroupID: "catalog",
Annotations: map[string]string{
"package": "catalog",
},
}
// Add methods
cmd.AddCommand(newCreate())
cmd.AddCommand(newDelete())
cmd.AddCommand(newGet())
cmd.AddCommand(newList())
cmd.AddCommand(newUpdate())
// Apply optional overrides to this command.
for _, fn := range cmdOverrides {
fn(cmd)
}
return cmd
}
// start create command
// Slice with functions to override default command behavior.
// Functions can be added from the `init()` function in manually curated files in this directory.
var createOverrides []func(
*cobra.Command,
*catalog.CreateConnection,
)
func newCreate() *cobra.Command {
cmd := &cobra.Command{}
var createReq catalog.CreateConnection
var createJson flags.JsonFlag
// TODO: short flags
cmd.Flags().Var(&createJson, "json", `either inline JSON string or @path/to/file.json with request body`)
cmd.Flags().StringVar(&createReq.Comment, "comment", createReq.Comment, `User-provided free-form text description.`)
// TODO: map via StringToStringVar: properties
cmd.Flags().BoolVar(&createReq.ReadOnly, "read-only", createReq.ReadOnly, `If the connection is read only.`)
cmd.Use = "create"
cmd.Short = `Create a connection.`
cmd.Long = `Create a connection.
Creates a new connection
Creates a new connection to an external data source. It allows users to
specify connection details and configurations for interaction with the
external server.`
cmd.Annotations = make(map[string]string)
cmd.PreRunE = root.MustWorkspaceClient
cmd.RunE = func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context()
w := root.WorkspaceClient(ctx)
if cmd.Flags().Changed("json") {
diags := createJson.Unmarshal(&createReq)
if diags.HasError() {
return diags.Error()
}
if len(diags) > 0 {
err := cmdio.RenderDiagnosticsToErrorOut(ctx, diags)
if err != nil {
return err
}
}
} else {
return fmt.Errorf("please provide command input in JSON format by specifying the --json flag")
}
response, err := w.Connections.Create(ctx, createReq)
if err != nil {
return err
}
return cmdio.Render(ctx, response)
}
// Disable completions since they are not applicable.
// Can be overridden by manual implementation in `override.go`.
cmd.ValidArgsFunction = cobra.NoFileCompletions
// Apply optional overrides to this command.
for _, fn := range createOverrides {
fn(cmd, &createReq)
}
return cmd
}
// start delete command
// Slice with functions to override default command behavior.
// Functions can be added from the `init()` function in manually curated files in this directory.
var deleteOverrides []func(
*cobra.Command,
*catalog.DeleteConnectionRequest,
)
func newDelete() *cobra.Command {
cmd := &cobra.Command{}
var deleteReq catalog.DeleteConnectionRequest
// TODO: short flags
cmd.Use = "delete NAME"
cmd.Short = `Delete a connection.`
cmd.Long = `Delete a connection.
Deletes the connection that matches the supplied name.
Arguments:
NAME: The name of the connection to be deleted.`
cmd.Annotations = make(map[string]string)
cmd.PreRunE = root.MustWorkspaceClient
cmd.RunE = func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context()
w := root.WorkspaceClient(ctx)
Release v0.202.0 (#619) Breaking Change: * Require include glob patterns to be explicitly defined ([#602](https://github.com/databricks/cli/pull/602)). Bundles: * Add support for more SDK config options ([#587](https://github.com/databricks/cli/pull/587)). * Add template renderer for Databricks templates ([#589](https://github.com/databricks/cli/pull/589)). * Fix formatting in renderer.go ([#593](https://github.com/databricks/cli/pull/593)). * Fixed python wheel test ([#608](https://github.com/databricks/cli/pull/608)). * Auto detect Python wheel packages and infer build command ([#603](https://github.com/databricks/cli/pull/603)). * Added support for artifacts building for bundles ([#583](https://github.com/databricks/cli/pull/583)). * Add support for cloning repositories ([#544](https://github.com/databricks/cli/pull/544)). * Add regexp compile helper function for templates ([#601](https://github.com/databricks/cli/pull/601)). * Add unit test that raw strings are printed as is ([#599](https://github.com/databricks/cli/pull/599)). Internal: * Fix tests under ./cmd/configure if DATABRICKS_TOKEN is set ([#605](https://github.com/databricks/cli/pull/605)). * Remove dependency on global state in generated commands ([#595](https://github.com/databricks/cli/pull/595)). * Remove dependency on global state for the root command ([#606](https://github.com/databricks/cli/pull/606)). * Add merge_group trigger for build ([#612](https://github.com/databricks/cli/pull/612)). * Added support for build command chaining and error on missing wheel ([#607](https://github.com/databricks/cli/pull/607)). * Add TestAcc prefix to filer test and fix any failing tests ([#611](https://github.com/databricks/cli/pull/611)). * Add url parse helper function for templates ([#600](https://github.com/databricks/cli/pull/600)). * Remove dependency on global state for remaining commands ([#613](https://github.com/databricks/cli/pull/613)). * Update CHANGELOG template ([#588](https://github.com/databricks/cli/pull/588)).
2023-07-27 13:23:55 +00:00
if len(args) == 0 {
promptSpinner := cmdio.Spinner(ctx)
promptSpinner <- "No NAME argument specified. Loading names for Connections drop-down."
names, err := w.Connections.ConnectionInfoNameToFullNameMap(ctx, catalog.ListConnectionsRequest{})
Release v0.202.0 (#619) Breaking Change: * Require include glob patterns to be explicitly defined ([#602](https://github.com/databricks/cli/pull/602)). Bundles: * Add support for more SDK config options ([#587](https://github.com/databricks/cli/pull/587)). * Add template renderer for Databricks templates ([#589](https://github.com/databricks/cli/pull/589)). * Fix formatting in renderer.go ([#593](https://github.com/databricks/cli/pull/593)). * Fixed python wheel test ([#608](https://github.com/databricks/cli/pull/608)). * Auto detect Python wheel packages and infer build command ([#603](https://github.com/databricks/cli/pull/603)). * Added support for artifacts building for bundles ([#583](https://github.com/databricks/cli/pull/583)). * Add support for cloning repositories ([#544](https://github.com/databricks/cli/pull/544)). * Add regexp compile helper function for templates ([#601](https://github.com/databricks/cli/pull/601)). * Add unit test that raw strings are printed as is ([#599](https://github.com/databricks/cli/pull/599)). Internal: * Fix tests under ./cmd/configure if DATABRICKS_TOKEN is set ([#605](https://github.com/databricks/cli/pull/605)). * Remove dependency on global state in generated commands ([#595](https://github.com/databricks/cli/pull/595)). * Remove dependency on global state for the root command ([#606](https://github.com/databricks/cli/pull/606)). * Add merge_group trigger for build ([#612](https://github.com/databricks/cli/pull/612)). * Added support for build command chaining and error on missing wheel ([#607](https://github.com/databricks/cli/pull/607)). * Add TestAcc prefix to filer test and fix any failing tests ([#611](https://github.com/databricks/cli/pull/611)). * Add url parse helper function for templates ([#600](https://github.com/databricks/cli/pull/600)). * Remove dependency on global state for remaining commands ([#613](https://github.com/databricks/cli/pull/613)). * Update CHANGELOG template ([#588](https://github.com/databricks/cli/pull/588)).
2023-07-27 13:23:55 +00:00
close(promptSpinner)
if err != nil {
return fmt.Errorf("failed to load names for Connections drop-down. Please manually specify required arguments. Original error: %w", err)
}
id, err := cmdio.Select(ctx, names, "The name of the connection to be deleted")
if err != nil {
return err
}
args = append(args, id)
}
if len(args) != 1 {
return fmt.Errorf("expected to have the name of the connection to be deleted")
}
deleteReq.Name = args[0]
err = w.Connections.Delete(ctx, deleteReq)
if err != nil {
return err
}
return nil
}
// Disable completions since they are not applicable.
// Can be overridden by manual implementation in `override.go`.
cmd.ValidArgsFunction = cobra.NoFileCompletions
// Apply optional overrides to this command.
for _, fn := range deleteOverrides {
fn(cmd, &deleteReq)
}
return cmd
}
// start get command
// Slice with functions to override default command behavior.
// Functions can be added from the `init()` function in manually curated files in this directory.
var getOverrides []func(
*cobra.Command,
*catalog.GetConnectionRequest,
)
func newGet() *cobra.Command {
cmd := &cobra.Command{}
var getReq catalog.GetConnectionRequest
// TODO: short flags
cmd.Use = "get NAME"
cmd.Short = `Get a connection.`
cmd.Long = `Get a connection.
Gets a connection from it's name.
Arguments:
NAME: Name of the connection.`
cmd.Annotations = make(map[string]string)
cmd.PreRunE = root.MustWorkspaceClient
cmd.RunE = func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context()
w := root.WorkspaceClient(ctx)
Release v0.202.0 (#619) Breaking Change: * Require include glob patterns to be explicitly defined ([#602](https://github.com/databricks/cli/pull/602)). Bundles: * Add support for more SDK config options ([#587](https://github.com/databricks/cli/pull/587)). * Add template renderer for Databricks templates ([#589](https://github.com/databricks/cli/pull/589)). * Fix formatting in renderer.go ([#593](https://github.com/databricks/cli/pull/593)). * Fixed python wheel test ([#608](https://github.com/databricks/cli/pull/608)). * Auto detect Python wheel packages and infer build command ([#603](https://github.com/databricks/cli/pull/603)). * Added support for artifacts building for bundles ([#583](https://github.com/databricks/cli/pull/583)). * Add support for cloning repositories ([#544](https://github.com/databricks/cli/pull/544)). * Add regexp compile helper function for templates ([#601](https://github.com/databricks/cli/pull/601)). * Add unit test that raw strings are printed as is ([#599](https://github.com/databricks/cli/pull/599)). Internal: * Fix tests under ./cmd/configure if DATABRICKS_TOKEN is set ([#605](https://github.com/databricks/cli/pull/605)). * Remove dependency on global state in generated commands ([#595](https://github.com/databricks/cli/pull/595)). * Remove dependency on global state for the root command ([#606](https://github.com/databricks/cli/pull/606)). * Add merge_group trigger for build ([#612](https://github.com/databricks/cli/pull/612)). * Added support for build command chaining and error on missing wheel ([#607](https://github.com/databricks/cli/pull/607)). * Add TestAcc prefix to filer test and fix any failing tests ([#611](https://github.com/databricks/cli/pull/611)). * Add url parse helper function for templates ([#600](https://github.com/databricks/cli/pull/600)). * Remove dependency on global state for remaining commands ([#613](https://github.com/databricks/cli/pull/613)). * Update CHANGELOG template ([#588](https://github.com/databricks/cli/pull/588)).
2023-07-27 13:23:55 +00:00
if len(args) == 0 {
promptSpinner := cmdio.Spinner(ctx)
promptSpinner <- "No NAME argument specified. Loading names for Connections drop-down."
names, err := w.Connections.ConnectionInfoNameToFullNameMap(ctx, catalog.ListConnectionsRequest{})
Release v0.202.0 (#619) Breaking Change: * Require include glob patterns to be explicitly defined ([#602](https://github.com/databricks/cli/pull/602)). Bundles: * Add support for more SDK config options ([#587](https://github.com/databricks/cli/pull/587)). * Add template renderer for Databricks templates ([#589](https://github.com/databricks/cli/pull/589)). * Fix formatting in renderer.go ([#593](https://github.com/databricks/cli/pull/593)). * Fixed python wheel test ([#608](https://github.com/databricks/cli/pull/608)). * Auto detect Python wheel packages and infer build command ([#603](https://github.com/databricks/cli/pull/603)). * Added support for artifacts building for bundles ([#583](https://github.com/databricks/cli/pull/583)). * Add support for cloning repositories ([#544](https://github.com/databricks/cli/pull/544)). * Add regexp compile helper function for templates ([#601](https://github.com/databricks/cli/pull/601)). * Add unit test that raw strings are printed as is ([#599](https://github.com/databricks/cli/pull/599)). Internal: * Fix tests under ./cmd/configure if DATABRICKS_TOKEN is set ([#605](https://github.com/databricks/cli/pull/605)). * Remove dependency on global state in generated commands ([#595](https://github.com/databricks/cli/pull/595)). * Remove dependency on global state for the root command ([#606](https://github.com/databricks/cli/pull/606)). * Add merge_group trigger for build ([#612](https://github.com/databricks/cli/pull/612)). * Added support for build command chaining and error on missing wheel ([#607](https://github.com/databricks/cli/pull/607)). * Add TestAcc prefix to filer test and fix any failing tests ([#611](https://github.com/databricks/cli/pull/611)). * Add url parse helper function for templates ([#600](https://github.com/databricks/cli/pull/600)). * Remove dependency on global state for remaining commands ([#613](https://github.com/databricks/cli/pull/613)). * Update CHANGELOG template ([#588](https://github.com/databricks/cli/pull/588)).
2023-07-27 13:23:55 +00:00
close(promptSpinner)
if err != nil {
return fmt.Errorf("failed to load names for Connections drop-down. Please manually specify required arguments. Original error: %w", err)
}
id, err := cmdio.Select(ctx, names, "Name of the connection")
if err != nil {
return err
}
args = append(args, id)
}
if len(args) != 1 {
return fmt.Errorf("expected to have name of the connection")
}
getReq.Name = args[0]
response, err := w.Connections.Get(ctx, getReq)
if err != nil {
return err
}
return cmdio.Render(ctx, response)
}
// Disable completions since they are not applicable.
// Can be overridden by manual implementation in `override.go`.
cmd.ValidArgsFunction = cobra.NoFileCompletions
// Apply optional overrides to this command.
for _, fn := range getOverrides {
fn(cmd, &getReq)
}
return cmd
}
// start list command
// Slice with functions to override default command behavior.
// Functions can be added from the `init()` function in manually curated files in this directory.
var listOverrides []func(
*cobra.Command,
*catalog.ListConnectionsRequest,
)
func newList() *cobra.Command {
cmd := &cobra.Command{}
var listReq catalog.ListConnectionsRequest
// TODO: short flags
cmd.Flags().IntVar(&listReq.MaxResults, "max-results", listReq.MaxResults, `Maximum number of connections to return.`)
cmd.Flags().StringVar(&listReq.PageToken, "page-token", listReq.PageToken, `Opaque pagination token to go to next page based on previous query.`)
cmd.Use = "list"
cmd.Short = `List connections.`
cmd.Long = `List connections.
List all connections.`
cmd.Annotations = make(map[string]string)
cmd.Args = func(cmd *cobra.Command, args []string) error {
check := root.ExactArgs(0)
return check(cmd, args)
}
cmd.PreRunE = root.MustWorkspaceClient
cmd.RunE = func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context()
w := root.WorkspaceClient(ctx)
response := w.Connections.List(ctx, listReq)
Use Go SDK Iterators when listing resources with the CLI (#1202) ## Changes Currently, when the CLI run a list API call (like list jobs), it uses the `List*All` methods from the SDK, which list all resources in the collection. This is very slow for large collections: if you need to list all jobs from a workspace that has 10,000+ jobs, you'll be waiting for at least 100 RPCs to complete before seeing any output. Instead of using List*All() methods, the SDK recently added an iterator data structure that allows traversing the collection without needing to completely list it first. New pages are fetched lazily if the next requested item belongs to the next page. Using the List() methods that return these iterators, the CLI can proactively print out some of the response before the complete collection has been fetched. This involves a pretty major rewrite of the rendering logic in `cmdio`. The idea there is to define custom rendering logic based on the type of the provided resource. There are three renderer interfaces: 1. textRenderer: supports printing something in a textual format (i.e. not JSON, and not templated). 2. jsonRenderer: supports printing something in a pretty-printed JSON format. 3. templateRenderer: supports printing something using a text template. There are also three renderer implementations: 1. readerRenderer: supports printing a reader. This only implements the textRenderer interface. 2. iteratorRenderer: supports printing a `listing.Iterator` from the Go SDK. This implements jsonRenderer and templateRenderer, buffering 20 resources at a time before writing them to the output. 3. defaultRenderer: supports printing arbitrary resources (the previous implementation). Callers will either use `cmdio.Render()` for rendering individual resources or `io.Reader` or `cmdio.RenderIterator()` for rendering an iterator. This separate method is needed to safely be able to match on the type of the iterator, since Go does not allow runtime type matches on generic types with an existential type parameter. One other change that needs to happen is to split the templates used for text representation of list resources into a header template and a row template. The template is now executed multiple times for List API calls, but the header should only be printed once. To support this, I have added `headerTemplate` to `cmdIO`, and I have also changed `RenderWithTemplate` to include a `headerTemplate` parameter everywhere. ## Tests - [x] Unit tests for text rendering logic - [x] Unit test for reflection-based iterator construction. --------- Co-authored-by: Andrew Nester <andrew.nester@databricks.com>
2024-02-21 14:16:36 +00:00
return cmdio.RenderIterator(ctx, response)
}
// Disable completions since they are not applicable.
// Can be overridden by manual implementation in `override.go`.
cmd.ValidArgsFunction = cobra.NoFileCompletions
// Apply optional overrides to this command.
for _, fn := range listOverrides {
fn(cmd, &listReq)
}
return cmd
}
// start update command
// Slice with functions to override default command behavior.
// Functions can be added from the `init()` function in manually curated files in this directory.
var updateOverrides []func(
*cobra.Command,
*catalog.UpdateConnection,
)
func newUpdate() *cobra.Command {
cmd := &cobra.Command{}
var updateReq catalog.UpdateConnection
var updateJson flags.JsonFlag
// TODO: short flags
cmd.Flags().Var(&updateJson, "json", `either inline JSON string or @path/to/file.json with request body`)
cmd.Flags().StringVar(&updateReq.NewName, "new-name", updateReq.NewName, `New name for the connection.`)
cmd.Flags().StringVar(&updateReq.Owner, "owner", updateReq.Owner, `Username of current owner of the connection.`)
cmd.Use = "update NAME"
cmd.Short = `Update a connection.`
cmd.Long = `Update a connection.
Updates the connection that matches the supplied name.
Arguments:
NAME: Name of the connection.`
cmd.Annotations = make(map[string]string)
cmd.Args = func(cmd *cobra.Command, args []string) error {
check := root.ExactArgs(1)
return check(cmd, args)
}
cmd.PreRunE = root.MustWorkspaceClient
cmd.RunE = func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context()
w := root.WorkspaceClient(ctx)
if cmd.Flags().Changed("json") {
diags := updateJson.Unmarshal(&updateReq)
if diags.HasError() {
return diags.Error()
}
if len(diags) > 0 {
err := cmdio.RenderDiagnosticsToErrorOut(ctx, diags)
if err != nil {
return err
}
}
} else {
return fmt.Errorf("please provide command input in JSON format by specifying the --json flag")
}
updateReq.Name = args[0]
response, err := w.Connections.Update(ctx, updateReq)
if err != nil {
return err
}
return cmdio.Render(ctx, response)
}
// Disable completions since they are not applicable.
// Can be overridden by manual implementation in `override.go`.
cmd.ValidArgsFunction = cobra.NoFileCompletions
// Apply optional overrides to this command.
for _, fn := range updateOverrides {
fn(cmd, &updateReq)
}
return cmd
}
// end service Connections