mirror of https://github.com/databricks/cli.git
61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
package mutator
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/databricks/cli/bundle"
|
|
"github.com/databricks/cli/libs/diag"
|
|
"golang.org/x/exp/maps"
|
|
)
|
|
|
|
type selectTarget struct {
|
|
name string
|
|
}
|
|
|
|
// SelectTarget merges the specified target into the root configuration.
|
|
// After merging, it removes the 'Targets' section from the configuration.
|
|
func SelectTarget(name string) bundle.Mutator {
|
|
return &selectTarget{
|
|
name: name,
|
|
}
|
|
}
|
|
|
|
func (m *selectTarget) Name() string {
|
|
return fmt.Sprintf("SelectTarget(%s)", m.name)
|
|
}
|
|
|
|
func (m *selectTarget) Apply(_ context.Context, b *bundle.Bundle) diag.Diagnostics {
|
|
if b.Config.Targets == nil {
|
|
return diag.Errorf("no targets defined")
|
|
}
|
|
|
|
// Get specified target
|
|
targetConfig, ok := b.Config.Targets[m.name]
|
|
if !ok {
|
|
return diag.Errorf("%s: no such target. Available targets: %s", m.name, strings.Join(maps.Keys(b.Config.Targets), ", "))
|
|
}
|
|
|
|
// Merge specified target into root configuration structure.
|
|
err := b.Config.MergeTargetOverrides(m.name)
|
|
if err != nil {
|
|
return diag.FromErr(err)
|
|
}
|
|
|
|
// Store specified target in configuration for reference.
|
|
b.Config.Bundle.TargetConfig = targetConfig
|
|
b.Config.Bundle.Target = m.name
|
|
|
|
// We do this for backward compatibility.
|
|
// TODO: remove when Environments section is not supported anymore.
|
|
b.Config.Bundle.Environment = b.Config.Bundle.Target
|
|
|
|
// Cleanup the original targets and environments sections since they
|
|
// show up in the JSON output of the 'summary' and 'validate' commands.
|
|
b.Config.Targets = nil
|
|
b.Config.Environments = nil
|
|
|
|
return nil
|
|
}
|