2022-11-18 09:57:31 +00:00
|
|
|
package config
|
|
|
|
|
2022-12-15 12:00:41 +00:00
|
|
|
import (
|
2024-02-14 18:04:45 +00:00
|
|
|
"context"
|
2023-04-17 10:21:21 +00:00
|
|
|
"fmt"
|
|
|
|
|
2023-05-16 16:35:39 +00:00
|
|
|
"github.com/databricks/cli/bundle/config/resources"
|
2024-02-14 18:04:45 +00:00
|
|
|
"github.com/databricks/databricks-sdk-go"
|
2022-12-15 12:00:41 +00:00
|
|
|
)
|
2022-11-18 09:57:31 +00:00
|
|
|
|
|
|
|
// Resources defines Databricks resources associated with the bundle.
|
|
|
|
type Resources struct {
|
2022-12-15 12:00:41 +00:00
|
|
|
Jobs map[string]*resources.Job `json:"jobs,omitempty"`
|
|
|
|
Pipelines map[string]*resources.Pipeline `json:"pipelines,omitempty"`
|
2023-03-20 20:28:43 +00:00
|
|
|
|
2023-09-07 21:54:31 +00:00
|
|
|
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"`
|
2023-10-16 15:32:49 +00:00
|
|
|
RegisteredModels map[string]*resources.RegisteredModel `json:"registered_models,omitempty"`
|
2024-05-31 09:42:25 +00:00
|
|
|
QualityMonitors map[string]*resources.QualityMonitor `json:"quality_monitors,omitempty"`
|
2024-07-31 12:16:28 +00:00
|
|
|
Schemas map[string]*resources.Schema `json:"schemas,omitempty"`
|
2024-09-23 10:42:34 +00:00
|
|
|
Clusters map[string]*resources.Cluster `json:"clusters,omitempty"`
|
2022-11-18 09:57:31 +00:00
|
|
|
}
|
2023-04-12 14:17:13 +00:00
|
|
|
|
2024-02-14 18:04:45 +00:00
|
|
|
type ConfigResource interface {
|
2024-08-13 12:50:15 +00:00
|
|
|
// Function to assert if the resource exists in the workspace configured in
|
|
|
|
// the input workspace client.
|
2024-02-14 18:04:45 +00:00
|
|
|
Exists(ctx context.Context, w *databricks.WorkspaceClient, id string) (bool, error)
|
2024-08-13 12:50:15 +00:00
|
|
|
|
|
|
|
// Terraform equivalent name of the resource. For example "databricks_job"
|
|
|
|
// for jobs and "databricks_pipeline" for pipelines.
|
2024-02-14 18:04:45 +00:00
|
|
|
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
|
|
|
|
}
|
2024-10-07 09:16:20 +00:00
|
|
|
|
|
|
|
type ResourceDescription struct {
|
|
|
|
SingularName string
|
|
|
|
}
|
|
|
|
|
|
|
|
// The keys of the map corresponds to the resource key in the bundle configuration.
|
|
|
|
func SupportedResources() map[string]ResourceDescription {
|
|
|
|
return map[string]ResourceDescription{
|
|
|
|
"jobs": {SingularName: "job"},
|
|
|
|
"pipelines": {SingularName: "pipeline"},
|
|
|
|
"models": {SingularName: "model"},
|
|
|
|
"experiments": {SingularName: "experiment"},
|
|
|
|
"model_serving_endpoints": {SingularName: "model_serving_endpoint"},
|
|
|
|
"registered_models": {SingularName: "registered_model"},
|
|
|
|
"quality_monitors": {SingularName: "quality_monitor"},
|
|
|
|
"schemas": {SingularName: "schema"},
|
|
|
|
"clusters": {SingularName: "cluster"},
|
|
|
|
}
|
|
|
|
}
|