github.com/databricks/cli@v0.203.0/bundle/config/mutator/select_default_environment.go (about) 1 package mutator 2 3 import ( 4 "context" 5 "fmt" 6 "strings" 7 8 "github.com/databricks/cli/bundle" 9 "golang.org/x/exp/maps" 10 ) 11 12 type selectDefaultEnvironment struct{} 13 14 // SelectDefaultEnvironment merges the default environment into the root configuration. 15 func SelectDefaultEnvironment() bundle.Mutator { 16 return &selectDefaultEnvironment{} 17 } 18 19 func (m *selectDefaultEnvironment) Name() string { 20 return "SelectDefaultEnvironment" 21 } 22 23 func (m *selectDefaultEnvironment) Apply(ctx context.Context, b *bundle.Bundle) error { 24 if len(b.Config.Environments) == 0 { 25 return fmt.Errorf("no environments defined") 26 } 27 28 // One environment means there's only one default. 29 names := maps.Keys(b.Config.Environments) 30 if len(names) == 1 { 31 return SelectEnvironment(names[0]).Apply(ctx, b) 32 } 33 34 // Multiple environments means we look for the `default` flag. 35 var defaults []string 36 for name, env := range b.Config.Environments { 37 if env != nil && env.Default { 38 defaults = append(defaults, name) 39 } 40 } 41 42 // It is invalid to have multiple environments with the `default` flag set. 43 if len(defaults) > 1 { 44 return fmt.Errorf("multiple environments are marked as default (%s)", strings.Join(defaults, ", ")) 45 } 46 47 // If no environment has the `default` flag set, ask the user to specify one. 48 if len(defaults) == 0 { 49 return fmt.Errorf("please specify environment") 50 } 51 52 // One default remaining. 53 return SelectEnvironment(defaults[0]).Apply(ctx, b) 54 }