package config import ( "context" "fmt" "github.com/databricks/cli/bundle/config/resources" "github.com/databricks/databricks-sdk-go" ) // Resources defines Databricks resources associated with the bundle. type Resources struct { Jobs map[string]*resources.Job `json:"jobs,omitempty"` Pipelines map[string]*resources.Pipeline `json:"pipelines,omitempty"` Models map[string]*resources.MlflowModel `json:"models,omitempty"` Experiments map[string]*resources.MlflowExperiment `json:"experiments,omitempty"` ModelServingEndpoints map[string]*resources.ModelServingEndpoint `json:"model_serving_endpoints,omitempty"` RegisteredModels map[string]*resources.RegisteredModel `json:"registered_models,omitempty"` } // ConfigureConfigFilePath sets the specified path for all resources contained in this instance. // This property is used to correctly resolve paths relative to the path // of the configuration file they were defined in. func (r *Resources) ConfigureConfigFilePath() { for _, e := range r.Jobs { e.ConfigureConfigFilePath() } for _, e := range r.Pipelines { e.ConfigureConfigFilePath() } for _, e := range r.Models { e.ConfigureConfigFilePath() } for _, e := range r.Experiments { e.ConfigureConfigFilePath() } for _, e := range r.ModelServingEndpoints { e.ConfigureConfigFilePath() } for _, e := range r.RegisteredModels { e.ConfigureConfigFilePath() } } type ConfigResource interface { Exists(ctx context.Context, w *databricks.WorkspaceClient, id string) (bool, error) TerraformResourceName() string } func (r *Resources) FindResourceByConfigKey(key string) (ConfigResource, error) { found := make([]ConfigResource, 0) for k := range r.Jobs { if k == key { found = append(found, r.Jobs[k]) } } for k := range r.Pipelines { if k == key { found = append(found, r.Pipelines[k]) } } if len(found) == 0 { return nil, fmt.Errorf("no such resource: %s", key) } if len(found) > 1 { keys := make([]string, 0, len(found)) for _, r := range found { keys = append(keys, fmt.Sprintf("%s:%s", r.TerraformResourceName(), key)) } return nil, fmt.Errorf("ambiguous: %s (can resolve to all of %s)", key, keys) } return found[0], nil }