databricks-cli/bundle/config/mutator/resolve_resource_references.go

50 lines
1.0 KiB
Go
Raw Permalink Normal View History

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"
}