databricks-cli/bundle/config/variable/lookup.go

217 lines
4.5 KiB
Go
Raw Normal View History

// Code generated from OpenAPI specs by Databricks SDK Generator. DO NOT EDIT.
package variable
import (
"context"
"github.com/databricks/databricks-sdk-go"
)
2024-11-20 21:40:43 +00:00
type resolver interface {
2024-11-20 21:40:33 +00:00
Resolve(ctx context.Context, w *databricks.WorkspaceClient) (string, error)
String() string
}
type Lookup struct {
Alert string `json:"alert,omitempty"`
ClusterPolicy string `json:"cluster_policy,omitempty"`
Cluster string `json:"cluster,omitempty"`
Dashboard string `json:"dashboard,omitempty"`
InstancePool string `json:"instance_pool,omitempty"`
Job string `json:"job,omitempty"`
Metastore string `json:"metastore,omitempty"`
Pipeline string `json:"pipeline,omitempty"`
Query string `json:"query,omitempty"`
ServicePrincipal string `json:"service_principal,omitempty"`
Warehouse string `json:"warehouse,omitempty"`
}
2024-11-20 21:40:43 +00:00
func (l *Lookup) constructResolver() (resolver, error) {
2024-11-20 21:40:43 +00:00
if l.Alert != "" {
return lookupAlert{name: l.Alert}, nil
}
if l.ClusterPolicy != "" {
return lookupClusterPolicy{name: l.ClusterPolicy}, nil
}
if l.Cluster != "" {
return lookupCluster{name: l.Cluster}, nil
}
if l.Dashboard != "" {
return lookupDashboard{name: l.Dashboard}, nil
}
if l.InstancePool != "" {
return lookupInstancePool{name: l.InstancePool}, nil
}
if l.Job != "" {
return lookupJob{name: l.Job}, nil
}
if l.Metastore != "" {
return lookupMetastore{name: l.Metastore}, nil
}
if l.Pipeline != "" {
return lookupPipeline{name: l.Pipeline}, nil
}
if l.Query != "" {
return lookupQuery{name: l.Query}, nil
}
if l.ServicePrincipal != "" {
return lookupServicePrincipal{name: l.ServicePrincipal}, nil
}
if l.Warehouse != "" {
return lookupWarehouse{name: l.Warehouse}, nil
}
2024-11-20 21:40:43 +00:00
return nil, fmt.Errorf("no valid lookup fields provided")
}
2024-11-20 21:40:43 +00:00
// func LookupFromMap(m map[string]any) *Lookup {
// l := &Lookup{}
// if v, ok := m["alert"]; ok {
// l.Alert = v.(string)
// }
// if v, ok := m["cluster_policy"]; ok {
// l.ClusterPolicy = v.(string)
// }
// if v, ok := m["cluster"]; ok {
// l.Cluster = v.(string)
// }
// if v, ok := m["dashboard"]; ok {
// l.Dashboard = v.(string)
// }
// if v, ok := m["instance_pool"]; ok {
// l.InstancePool = v.(string)
// }
// if v, ok := m["job"]; ok {
// l.Job = v.(string)
// }
// if v, ok := m["metastore"]; ok {
// l.Metastore = v.(string)
// }
// if v, ok := m["pipeline"]; ok {
// l.Pipeline = v.(string)
// }
// if v, ok := m["query"]; ok {
// l.Query = v.(string)
// }
// if v, ok := m["service_principal"]; ok {
// l.ServicePrincipal = v.(string)
// }
// if v, ok := m["warehouse"]; ok {
// l.Warehouse = v.(string)
// }
// return l
// }
// func (l *Lookup) Resolve(ctx context.Context, w *databricks.WorkspaceClient) (string, error) {
// if err := l.validate(); err != nil {
// return "", err
// }
// r := allResolvers()
// if l.Alert != "" {
// return r.Alert(ctx, w, l.Alert)
// }
// if l.ClusterPolicy != "" {
// return r.ClusterPolicy(ctx, w, l.ClusterPolicy)
// }
// if l.Cluster != "" {
// return r.Cluster(ctx, w, l.Cluster)
// }
// if l.Dashboard != "" {
// return r.Dashboard(ctx, w, l.Dashboard)
// }
// if l.InstancePool != "" {
// return r.InstancePool(ctx, w, l.InstancePool)
// }
// if l.Job != "" {
// return r.Job(ctx, w, l.Job)
// }
// if l.Metastore != "" {
// return r.Metastore(ctx, w, l.Metastore)
// }
// if l.Pipeline != "" {
// return r.Pipeline(ctx, w, l.Pipeline)
// }
// if l.Query != "" {
// return r.Query(ctx, w, l.Query)
// }
// if l.ServicePrincipal != "" {
// return r.ServicePrincipal(ctx, w, l.ServicePrincipal)
// }
// if l.Warehouse != "" {
// return r.Warehouse(ctx, w, l.Warehouse)
// }
// return "", fmt.Errorf("no valid lookup fields provided")
// }
2024-11-20 21:40:43 +00:00
func (l *Lookup) String() string {
r, _ := l.constructResolver()
if r != nil {
return r.String()
}
return ""
}
func (l *Lookup) validate() error {
// Validate that only one field is set
count := 0
if l.Alert != "" {
count++
}
if l.ClusterPolicy != "" {
count++
}
if l.Cluster != "" {
count++
}
if l.Dashboard != "" {
count++
}
if l.InstancePool != "" {
count++
}
if l.Job != "" {
count++
}
if l.Metastore != "" {
count++
}
if l.Pipeline != "" {
count++
}
if l.Query != "" {
count++
}
if l.ServicePrincipal != "" {
count++
}
if l.Warehouse != "" {
count++
}
if count != 1 {
return fmt.Errorf("exactly one lookup field must be provided")
}
if strings.Contains(l.String(), "${var") {
return fmt.Errorf("lookup fields cannot contain variable references")
}
return nil
}