Make it possible to override the compute id in an environment

This commit is contained in:
Lennart Kats 2023-07-07 09:58:18 +02:00
parent be2dd4f769
commit d221d4d348
6 changed files with 22 additions and 11 deletions

View File

@ -32,8 +32,8 @@ type Bundle struct {
// Determines the mode of the environment. // Determines the mode of the environment.
// For example, 'mode: development' can be used for deployments for // For example, 'mode: development' can be used for deployments for
// development purposes. // development purposes.
Mode Mode `json:"mode,omitempty"` Mode Mode `json:"mode,omitempty" bundle:"readonly"`
// Overrides the compute used for jobs and other supported assets. // Overrides the compute used for jobs and other supported assets.
Compute string `json:"override_compute,omitempty" bundle:"readonly"` ComputeID string `json:"compute_id,omitempty"`
} }

View File

@ -9,8 +9,14 @@ type Environment struct {
// by the user (through environment variable or command line argument). // by the user (through environment variable or command line argument).
Default bool `json:"default,omitempty"` Default bool `json:"default,omitempty"`
// Determines the mode of the environment.
// For example, 'mode: development' can be used for deployments for
// development purposes.
Mode Mode `json:"mode,omitempty"` Mode Mode `json:"mode,omitempty"`
// Overrides the compute used for jobs and other supported assets.
ComputeID string `json:"compute_id,omitempty"`
Bundle *Bundle `json:"bundle,omitempty"` Bundle *Bundle `json:"bundle,omitempty"`
Workspace *Workspace `json:"workspace,omitempty"` Workspace *Workspace `json:"workspace,omitempty"`

View File

@ -34,21 +34,22 @@ func overrideJobCompute(j *resources.Job, compute string) {
func (m *overrideCompute) Apply(ctx context.Context, b *bundle.Bundle) error { func (m *overrideCompute) Apply(ctx context.Context, b *bundle.Bundle) error {
if b.Config.Bundle.Mode != config.Development { if b.Config.Bundle.Mode != config.Development {
if b.Config.Bundle.Compute != "" { if b.Config.Bundle.ComputeID != "" {
return fmt.Errorf("cannot override compute for an environment that does not use 'mode: development'") return fmt.Errorf("cannot override compute for an environment that does not use 'mode: development'")
} }
return nil return nil
} }
if os.Getenv("DATABRICKS_CLUSTER_ID") != "" { if os.Getenv("DATABRICKS_CLUSTER_ID") != "" {
b.Config.Bundle.Compute = os.Getenv("DATABRICKS_CLUSTER_ID") b.Config.Bundle.ComputeID = os.Getenv("DATABRICKS_CLUSTER_ID")
} }
if b.Config.Bundle.Compute == "" {
if b.Config.Bundle.ComputeID == "" {
return nil return nil
} }
r := b.Config.Resources r := b.Config.Resources
for i := range r.Jobs { for i := range r.Jobs {
overrideJobCompute(r.Jobs[i], b.Config.Bundle.Compute) overrideJobCompute(r.Jobs[i], b.Config.Bundle.ComputeID)
} }
return nil return nil

View File

@ -20,8 +20,8 @@ func TestOverrideDevelopment(t *testing.T) {
bundle := &bundle.Bundle{ bundle := &bundle.Bundle{
Config: config.Root{ Config: config.Root{
Bundle: config.Bundle{ Bundle: config.Bundle{
Mode: config.Development, Mode: config.Development,
Compute: "newClusterID", ComputeID: "newClusterID",
}, },
Resources: config.Resources{ Resources: config.Resources{
Jobs: map[string]*resources.Job{ Jobs: map[string]*resources.Job{
@ -81,7 +81,7 @@ func TestOverrideProduction(t *testing.T) {
bundle := &bundle.Bundle{ bundle := &bundle.Bundle{
Config: config.Root{ Config: config.Root{
Bundle: config.Bundle{ Bundle: config.Bundle{
Compute: "newClusterID", ComputeID: "newClusterID",
}, },
Resources: config.Resources{ Resources: config.Resources{
Jobs: map[string]*resources.Job{ Jobs: map[string]*resources.Job{

View File

@ -194,5 +194,9 @@ func (r *Root) MergeEnvironment(env *Environment) error {
r.Bundle.Mode = env.Mode r.Bundle.Mode = env.Mode
} }
if env.ComputeID != "" {
r.Bundle.ComputeID = env.ComputeID
}
return nil return nil
} }

View File

@ -21,7 +21,7 @@ var deployCmd = &cobra.Command{
func deploy(cmd *cobra.Command, b *bundle.Bundle) error { func deploy(cmd *cobra.Command, b *bundle.Bundle) error {
// If `--force` is specified, force acquisition of the deployment lock. // If `--force` is specified, force acquisition of the deployment lock.
b.Config.Bundle.Lock.Force = forceDeploy b.Config.Bundle.Lock.Force = forceDeploy
b.Config.Bundle.Compute = computeID b.Config.Bundle.ComputeID = computeID
return bundle.Apply(cmd.Context(), b, bundle.Seq( return bundle.Apply(cmd.Context(), b, bundle.Seq(
phases.Initialize(), phases.Initialize(),
@ -36,5 +36,5 @@ var computeID string
func init() { func init() {
AddCommand(deployCmd) AddCommand(deployCmd)
deployCmd.Flags().BoolVar(&forceDeploy, "force", false, "Force acquisition of deployment lock.") deployCmd.Flags().BoolVar(&forceDeploy, "force", false, "Force acquisition of deployment lock.")
deployCmd.Flags().StringVar(&computeID, "compute", "", "Override compute in the deployment with the given compute ID.") deployCmd.Flags().StringVarP(&computeID, "compute-id", "c", "", "Override compute in the deployment with the given compute ID.")
} }