databricks-cli/bundle/config/workspace.go

88 lines
2.7 KiB
Go

package config
import (
"github.com/databricks/databricks-sdk-go"
"github.com/databricks/databricks-sdk-go/service/scim"
)
type PathLike struct {
// Workspace contains a WSFS path.
Workspace string `json:"workspace,omitempty"`
// DBFS contains a DBFS path.
DBFS string `json:"dbfs,omitempty"`
}
// IsSet returns whether either path is non-nil.
func (p PathLike) IsSet() bool {
return p.Workspace != "" || p.DBFS != ""
}
// Workspace defines configurables at the workspace level.
type Workspace struct {
// Unified authentication attributes.
//
// We omit sensitive attributes as they should never be hardcoded.
// They must be specified through environment variables instead.
//
// For example: token, password, Google credentials, Azure client secret, etc.
//
// Generic attributes.
Host string `json:"host,omitempty"`
Profile string `json:"profile,omitempty"`
// Google specific attributes.
GoogleServiceAccount string `json:"google_service_account,omitempty"`
// Azure specific attributes.
AzureResourceID string `json:"azure_workspace_resource_id,omitempty"`
AzureUseMSI bool `json:"azure_use_msi,omitempty"`
AzureClientID string `json:"azure_client_id,omitempty"`
AzureTenantID string `json:"azure_tenant_id,omitempty"`
AzureEnvironment string `json:"azure_environment,omitempty"`
AzureLoginAppID string `json:"azure_login_app_id,omitempty"`
// CurrentUser holds the current user.
// This is set after configuration initialization.
CurrentUser *scim.User `json:"current_user,omitempty"`
// Remote base path for deployment state, for artifacts, as synchronization target.
// This defaults to "~/.bundle/${bundle.name}/${bundle.environment}" where "~" expands to
// the current user's home directory in the workspace (e.g. `/Users/jane@doe.com`).
Root string `json:"root"`
// Remote path to synchronize local files to.
// This defaults to "${workspace.root}/files".
FilePath PathLike `json:"file_path"`
// Remote path for build artifacts.
// This defaults to "${workspace.root}/artifacts".
ArtifactPath PathLike `json:"artifact_path"`
// Remote path for deployment state.
// This defaults to "${workspace.root}/state".
StatePath PathLike `json:"state_path"`
}
func (w *Workspace) Client() (*databricks.WorkspaceClient, error) {
config := databricks.Config{
// Generic
Host: w.Host,
Profile: w.Profile,
// Google
GoogleServiceAccount: w.GoogleServiceAccount,
// Azure
AzureResourceID: w.AzureResourceID,
AzureUseMSI: w.AzureUseMSI,
AzureClientID: w.AzureClientID,
AzureTenantID: w.AzureTenantID,
AzureEnvironment: w.AzureEnvironment,
AzureLoginAppID: w.AzureLoginAppID,
}
return databricks.NewWorkspaceClient(&config)
}