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  }