package mutator import ( "context" "fmt" "github.com/databricks/cli/bundle" "github.com/databricks/cli/libs/diag" "github.com/databricks/cli/libs/log" "golang.org/x/sync/errgroup" ) type resolveResourceReferences struct{} func ResolveResourceReferences() bundle.Mutator { return &resolveResourceReferences{} } func (m *resolveResourceReferences) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagnostics { errs, errCtx := errgroup.WithContext(ctx) for k := range b.Config.Variables { v := b.Config.Variables[k] if v == nil || v.Lookup == nil { continue } if v.HasValue() { log.Debugf(ctx, "Ignoring '%s' lookup for the variable '%s' because the value is set", v.Lookup, k) continue } errs.Go(func() error { id, err := v.Lookup.Resolve(errCtx, b.WorkspaceClient()) if err != nil { return fmt.Errorf("failed to resolve %s, err: %w", v.Lookup, err) } v.Set(id) return nil }) } return diag.FromErr(errs.Wait()) } func (*resolveResourceReferences) Name() string { return "ResolveResourceReferences" }