package variable import ( "context" "fmt" "github.com/databricks/databricks-sdk-go" "github.com/databricks/databricks-sdk-go/service/compute" ) type resolveCluster struct { name string } // We added a custom resolver for the cluster to add filtering for the cluster source when we list all clusters. // Without the filtering listing could take a very long time (5-10 mins) which leads to lookup timeouts. func (l resolveCluster) Resolve(ctx context.Context, w *databricks.WorkspaceClient) (string, error) { result, err := w.Clusters.ListAll(ctx, compute.ListClustersRequest{ FilterBy: &compute.ListClustersFilterBy{ ClusterSources: []compute.ClusterSource{compute.ClusterSourceApi, compute.ClusterSourceUi}, }, }) if err != nil { return "", err } tmp := map[string][]compute.ClusterDetails{} for _, v := range result { key := v.ClusterName tmp[key] = append(tmp[key], v) } name := l.name alternatives, ok := tmp[name] if !ok || len(alternatives) == 0 { return "", fmt.Errorf("cluster named '%s' does not exist", name) } if len(alternatives) > 1 { return "", fmt.Errorf("there are %d instances of clusters named '%s'", len(alternatives), name) } return alternatives[0].ClusterId, nil } func (l resolveCluster) String() string { return fmt.Sprintf("cluster: %s", l.name) }