From ed3eae7c093874a78b6da3d452cd8985a7bb3257 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Tue, 6 Oct 2026 19:22:37 +0200 Subject: [PATCH 1/4] bundle: point at DATABRICKS_BUNDLE_ENGINE in the terraform removal error When only the env var asks for terraform, the error told users to remove the bundle.engine setting, which they don't have. Name the env var instead. bundle.engine takes priority, so it is still the one named when both are set. Co-authored-by: Isaac --- .../bundles/engine-env-removal-message.md | 1 + .../json_status_missing_state/output.txt | 2 +- .../readplan/terraform-error/output.txt | 2 +- .../deploy/yaml-sync-empty-grants/output.txt | 2 +- .../out.validate-terraform-env.txt | 2 +- .../output.txt | 4 ++-- .../output.txt | 4 ++-- .../jobs/unknown-terraform-field/output.txt | 2 +- .../resources/secrets/direct-only/output.txt | 2 +- .../output.txt | 4 ++-- acceptance/bundle/select/rejected/output.txt | 4 ++-- .../config-remote-sync-error/output.txt | 4 ++-- .../output.txt | 4 ++-- .../catalog_requires_direct_mode/output.txt | 2 +- .../output.txt | 2 +- bundle/config/engine/engine.go | 19 ++++++++++++++----- cmd/bundle/utils/process.go | 2 +- cmd/bundle/utils/resolve_engine_test.go | 15 +++++++++++++++ 18 files changed, 51 insertions(+), 26 deletions(-) create mode 100644 .nextchanges/bundles/engine-env-removal-message.md diff --git a/.nextchanges/bundles/engine-env-removal-message.md b/.nextchanges/bundles/engine-env-removal-message.md new file mode 100644 index 00000000000..962a6f7abe0 --- /dev/null +++ b/.nextchanges/bundles/engine-env-removal-message.md @@ -0,0 +1 @@ +* When `DATABRICKS_BUNDLE_ENGINE=terraform` is set, the Terraform removal error now says to unset the environment variable instead of pointing at the `bundle.engine` setting. diff --git a/acceptance/bundle/config-remote-sync/json_status_missing_state/output.txt b/acceptance/bundle/config-remote-sync/json_status_missing_state/output.txt index bce70b3874a..1afc65091f7 100644 --- a/acceptance/bundle/config-remote-sync/json_status_missing_state/output.txt +++ b/acceptance/bundle/config-remote-sync/json_status_missing_state/output.txt @@ -2,7 +2,7 @@ === Terraform removal is reported in JSON with exit 0 { "status": "failed", - "error": "the Terraform deployment engine has been removed in Databricks CLI v1.20.0\n\nRemove the \"bundle.engine\" setting (or set it to \"direct\") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x.\nSee https://docs.databricks.com/dev-tools/bundles/direct for details", + "error": "the Terraform deployment engine has been removed in Databricks CLI v1.20.0\n\nUnset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to \"direct\") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x.\nSee https://docs.databricks.com/dev-tools/bundles/direct for details", "files": null, "changes": {} } diff --git a/acceptance/bundle/deploy/readplan/terraform-error/output.txt b/acceptance/bundle/deploy/readplan/terraform-error/output.txt index de7f007a992..a34b3d73259 100644 --- a/acceptance/bundle/deploy/readplan/terraform-error/output.txt +++ b/acceptance/bundle/deploy/readplan/terraform-error/output.txt @@ -2,5 +2,5 @@ >>> musterr [CLI] bundle deploy --plan plan.json Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details diff --git a/acceptance/bundle/deploy/yaml-sync-empty-grants/output.txt b/acceptance/bundle/deploy/yaml-sync-empty-grants/output.txt index 0aa72209096..cc39aa21195 100644 --- a/acceptance/bundle/deploy/yaml-sync-empty-grants/output.txt +++ b/acceptance/bundle/deploy/yaml-sync-empty-grants/output.txt @@ -2,5 +2,5 @@ >>> musterr [CLI] bundle deploy Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details diff --git a/acceptance/bundle/resource_deps/tf_path_only_error/out.validate-terraform-env.txt b/acceptance/bundle/resource_deps/tf_path_only_error/out.validate-terraform-env.txt index 054469a2e1f..0adce33789d 100644 --- a/acceptance/bundle/resource_deps/tf_path_only_error/out.validate-terraform-env.txt +++ b/acceptance/bundle/resource_deps/tf_path_only_error/out.validate-terraform-env.txt @@ -1,6 +1,6 @@ Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details Name: test-bundle diff --git a/acceptance/bundle/resources/apps/lifecycle-started-terraform-error/output.txt b/acceptance/bundle/resources/apps/lifecycle-started-terraform-error/output.txt index 21d00eaecc5..d2c8acc2224 100644 --- a/acceptance/bundle/resources/apps/lifecycle-started-terraform-error/output.txt +++ b/acceptance/bundle/resources/apps/lifecycle-started-terraform-error/output.txt @@ -3,12 +3,12 @@ >>> musterr [CLI] bundle plan Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details === bundle deploy fails with lifecycle.started on terraform engine >>> musterr [CLI] bundle deploy Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details diff --git a/acceptance/bundle/resources/clusters/lifecycle-started-terraform-error/output.txt b/acceptance/bundle/resources/clusters/lifecycle-started-terraform-error/output.txt index 21d00eaecc5..d2c8acc2224 100644 --- a/acceptance/bundle/resources/clusters/lifecycle-started-terraform-error/output.txt +++ b/acceptance/bundle/resources/clusters/lifecycle-started-terraform-error/output.txt @@ -3,12 +3,12 @@ >>> musterr [CLI] bundle plan Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details === bundle deploy fails with lifecycle.started on terraform engine >>> musterr [CLI] bundle deploy Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details diff --git a/acceptance/bundle/resources/jobs/unknown-terraform-field/output.txt b/acceptance/bundle/resources/jobs/unknown-terraform-field/output.txt index 0aa72209096..cc39aa21195 100644 --- a/acceptance/bundle/resources/jobs/unknown-terraform-field/output.txt +++ b/acceptance/bundle/resources/jobs/unknown-terraform-field/output.txt @@ -2,5 +2,5 @@ >>> musterr [CLI] bundle deploy Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details diff --git a/acceptance/bundle/resources/secrets/direct-only/output.txt b/acceptance/bundle/resources/secrets/direct-only/output.txt index c4dab82c500..5e9f4e15749 100644 --- a/acceptance/bundle/resources/secrets/direct-only/output.txt +++ b/acceptance/bundle/resources/secrets/direct-only/output.txt @@ -3,5 +3,5 @@ >>> musterr [CLI] bundle deploy --var secret_value=test-value Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details diff --git a/acceptance/bundle/resources/sql_warehouses/lifecycle-started-terraform-error/output.txt b/acceptance/bundle/resources/sql_warehouses/lifecycle-started-terraform-error/output.txt index 21d00eaecc5..d2c8acc2224 100644 --- a/acceptance/bundle/resources/sql_warehouses/lifecycle-started-terraform-error/output.txt +++ b/acceptance/bundle/resources/sql_warehouses/lifecycle-started-terraform-error/output.txt @@ -3,12 +3,12 @@ >>> musterr [CLI] bundle plan Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details === bundle deploy fails with lifecycle.started on terraform engine >>> musterr [CLI] bundle deploy Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details diff --git a/acceptance/bundle/select/rejected/output.txt b/acceptance/bundle/select/rejected/output.txt index 2e93d90ec60..f15371cec50 100644 --- a/acceptance/bundle/select/rejected/output.txt +++ b/acceptance/bundle/select/rejected/output.txt @@ -2,11 +2,11 @@ >>> musterr [CLI] bundle plan --select my_job Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details >>> musterr [CLI] bundle deploy --select my_job Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details diff --git a/acceptance/bundle/telemetry/config-remote-sync-error/output.txt b/acceptance/bundle/telemetry/config-remote-sync-error/output.txt index ce37dabd34e..17cfa15ab04 100644 --- a/acceptance/bundle/telemetry/config-remote-sync-error/output.txt +++ b/acceptance/bundle/telemetry/config-remote-sync-error/output.txt @@ -2,11 +2,11 @@ >>> musterr [CLI] bundle config-remote-sync Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details >>> cat [OUTPUT_DIR]/out.requests.txt { - "error_message": "the Terraform deployment engine has been removed in Databricks CLI v1.20.0\n\nRemove the \"bundle.engine\" setting (or set it to \"direct\") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x.\nSee https://docs.databricks.com/dev-tools/bundles/direct for details", + "error_message": "the Terraform deployment engine has been removed in Databricks CLI v1.20.0\n\nUnset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to \"direct\") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x.\nSee https://docs.databricks.com/dev-tools/bundles/direct for details", "error_category": "BUNDLE_LOAD_FAILED" } diff --git a/acceptance/bundle/telemetry/config-remote-sync-skipped-state/output.txt b/acceptance/bundle/telemetry/config-remote-sync-skipped-state/output.txt index 2992b05daf1..8a7fc20b9fc 100644 --- a/acceptance/bundle/telemetry/config-remote-sync-skipped-state/output.txt +++ b/acceptance/bundle/telemetry/config-remote-sync-skipped-state/output.txt @@ -2,13 +2,13 @@ >>> errcode [CLI] bundle config-remote-sync -o json { "status": "failed", - "error": "the Terraform deployment engine has been removed in Databricks CLI v1.20.0\n\nRemove the \"bundle.engine\" setting (or set it to \"direct\") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x.\nSee https://docs.databricks.com/dev-tools/bundles/direct for details", + "error": "the Terraform deployment engine has been removed in Databricks CLI v1.20.0\n\nUnset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to \"direct\") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x.\nSee https://docs.databricks.com/dev-tools/bundles/direct for details", "files": null, "changes": {} } >>> cat [OUTPUT_DIR]/out.requests.txt { - "error_message": "the Terraform deployment engine has been removed in Databricks CLI v1.20.0\n\nRemove the \"bundle.engine\" setting (or set it to \"direct\") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x.\nSee https://docs.databricks.com/dev-tools/bundles/direct for details", + "error_message": "the Terraform deployment engine has been removed in Databricks CLI v1.20.0\n\nUnset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to \"direct\") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x.\nSee https://docs.databricks.com/dev-tools/bundles/direct for details", "error_category": "BUNDLE_LOAD_FAILED" } diff --git a/acceptance/bundle/validate/catalog_requires_direct_mode/output.txt b/acceptance/bundle/validate/catalog_requires_direct_mode/output.txt index 88c8b091c64..d8e132350f1 100644 --- a/acceptance/bundle/validate/catalog_requires_direct_mode/output.txt +++ b/acceptance/bundle/validate/catalog_requires_direct_mode/output.txt @@ -2,5 +2,5 @@ >>> musterr [CLI] bundle plan Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details diff --git a/acceptance/pipelines/destroy/cascade-on-destroy-terraform-error/output.txt b/acceptance/pipelines/destroy/cascade-on-destroy-terraform-error/output.txt index 0bdbe26b969..8b323a675b8 100644 --- a/acceptance/pipelines/destroy/cascade-on-destroy-terraform-error/output.txt +++ b/acceptance/pipelines/destroy/cascade-on-destroy-terraform-error/output.txt @@ -3,5 +3,5 @@ >>> musterr [CLI] pipelines deploy Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 -Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +Unset the DATABRICKS_BUNDLE_ENGINE environment variable (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details diff --git a/bundle/config/engine/engine.go b/bundle/config/engine/engine.go index 2df233c4c88..061d74c8bb5 100644 --- a/bundle/config/engine/engine.go +++ b/bundle/config/engine/engine.go @@ -22,16 +22,25 @@ const ( const Default = EngineDirect // TerraformRemovedMessage is the error text shown when a bundle pins the removed -// Terraform deployment engine, via bundle.engine or DATABRICKS_BUNDLE_ENGINE. -// "terraform" is still recognized as a value so we can point at this specific -// removal rather than reporting it as an unrecognized setting. -const TerraformRemovedMessage = TerraformRemovedSummary + "\n\n" + TerraformRemovedDetail +// Terraform deployment engine via bundle.engine. TerraformRemovedEnvMessage is +// the same for DATABRICKS_BUNDLE_ENGINE. "terraform" is still recognized as a +// value so we can point at this specific removal rather than reporting it as an +// unrecognized setting. +const ( + TerraformRemovedMessage = TerraformRemovedSummary + "\n\n" + TerraformRemovedDetail + TerraformRemovedEnvMessage = TerraformRemovedSummary + "\n\n" + TerraformRemovedEnvDetail +) // TerraformRemovedSummary and TerraformRemovedDetail are the two parts of // TerraformRemovedMessage, for callers that report it as a diagnostic. const TerraformRemovedSummary = `the Terraform deployment engine has been removed in Databricks CLI v1.20.0` -const TerraformRemovedDetail = `Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +const ( + TerraformRemovedDetail = `Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; ` + terraformRemovedHint + TerraformRemovedEnvDetail = `Unset the ` + EnvVar + ` environment variable (or set it to "direct") to deploy with the direct engine; ` + terraformRemovedHint +) + +const terraformRemovedHint = `existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. See https://docs.databricks.com/dev-tools/bundles/direct for details` // SourceDefault is the Source of an EngineSetting that neither the bundle config diff --git a/cmd/bundle/utils/process.go b/cmd/bundle/utils/process.go index aa7ce653a09..45ca52b1060 100644 --- a/cmd/bundle/utils/process.go +++ b/cmd/bundle/utils/process.go @@ -579,7 +579,7 @@ func ResolveEngineSetting(ctx context.Context, b *bundle.Bundle) (engine.EngineS return engine.EngineSetting{}, err } if envEngine == engine.EngineTerraform { - return engine.EngineSetting{}, errors.New(engine.TerraformRemovedMessage) + return engine.EngineSetting{}, errors.New(engine.TerraformRemovedEnvMessage) } if envEngine != engine.EngineNotSet { return engine.EngineSetting{Type: envEngine, Source: engine.EnvVar + " environment variable"}, nil diff --git a/cmd/bundle/utils/resolve_engine_test.go b/cmd/bundle/utils/resolve_engine_test.go index 1c4250dc4f8..dc0b4d15fec 100644 --- a/cmd/bundle/utils/resolve_engine_test.go +++ b/cmd/bundle/utils/resolve_engine_test.go @@ -52,3 +52,18 @@ func TestResolveEngineSettingInvalidEnvVarIgnoredWhenConfigSet(t *testing.T) { require.NoError(t, err) assert.Equal(t, engine.EngineDirect, result.Type) } + +func TestResolveEngineSettingTerraformEnvVar(t *testing.T) { + ctx := env.Set(t.Context(), engine.EnvVar, "terraform") + b := &bundle.Bundle{Config: config.Root{}} + _, err := ResolveEngineSetting(ctx, b) + assert.EqualError(t, err, engine.TerraformRemovedEnvMessage) +} + +func TestResolveEngineSettingTerraformConfig(t *testing.T) { + // The config takes priority, so it is the setting to remove even if the env var also says terraform. + ctx := env.Set(t.Context(), engine.EnvVar, "terraform") + b := &bundle.Bundle{Config: config.Root{Bundle: config.Bundle{Engine: engine.EngineTerraform}}} + _, err := ResolveEngineSetting(ctx, b) + assert.EqualError(t, err, engine.TerraformRemovedMessage) +} From d7d32d18daa1fcad992cadbe2ac27a7d78e71138 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Tue, 6 Oct 2026 19:23:17 +0200 Subject: [PATCH 2/4] Add changelog PR link Co-authored-by: Isaac --- .nextchanges/bundles/engine-env-removal-message.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nextchanges/bundles/engine-env-removal-message.md b/.nextchanges/bundles/engine-env-removal-message.md index 962a6f7abe0..6cf826058fa 100644 --- a/.nextchanges/bundles/engine-env-removal-message.md +++ b/.nextchanges/bundles/engine-env-removal-message.md @@ -1 +1 @@ -* When `DATABRICKS_BUNDLE_ENGINE=terraform` is set, the Terraform removal error now says to unset the environment variable instead of pointing at the `bundle.engine` setting. +* When `DATABRICKS_BUNDLE_ENGINE=terraform` is set, the Terraform removal error now says to unset the environment variable instead of pointing at the `bundle.engine` setting. ([#6951](https://github.com/databricks/cli/pull/6951)) From ea2f8fb746c446cd1d52eb1f2f455622766d9763 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Tue, 6 Oct 2026 19:27:58 +0200 Subject: [PATCH 3/4] Name the config variant explicitly and cover config+env in acceptance Rename TerraformRemovedDetail/Message to TerraformRemovedConfigDetail/Message to pair with the Env variant, and show in engine-config-valid that the config setting is named when both bundle.engine and the env var say terraform. Co-authored-by: Isaac --- .../validate/engine-config-valid/output.txt | 12 ++++++++++ .../validate/engine-config-valid/script | 3 +++ bundle/config/engine/engine.go | 22 +++++++++---------- bundle/config/validate/validate_engine.go | 2 +- cmd/bundle/utils/process.go | 2 +- cmd/bundle/utils/resolve_engine_test.go | 2 +- 6 files changed, 29 insertions(+), 14 deletions(-) diff --git a/acceptance/bundle/validate/engine-config-valid/output.txt b/acceptance/bundle/validate/engine-config-valid/output.txt index 7265cf895f0..e3b138ac1ce 100644 --- a/acceptance/bundle/validate/engine-config-valid/output.txt +++ b/acceptance/bundle/validate/engine-config-valid/output.txt @@ -19,3 +19,15 @@ Name: test-engine-config-valid Target: terraform-target Found 1 error + +>>> musterr [CLI] bundle validate -t terraform-target +Error: the Terraform deployment engine has been removed in Databricks CLI v1.20.0 + in databricks.yml:10:15 + +Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. +See https://docs.databricks.com/dev-tools/bundles/direct for details + +Name: test-engine-config-valid +Target: terraform-target + +Found 1 error diff --git a/acceptance/bundle/validate/engine-config-valid/script b/acceptance/bundle/validate/engine-config-valid/script index b71e2c8346e..e42a2846147 100644 --- a/acceptance/bundle/validate/engine-config-valid/script +++ b/acceptance/bundle/validate/engine-config-valid/script @@ -1,3 +1,6 @@ trace $CLI bundle validate # engine: terraform was removed in v1.20.0, so the terraform-target now fails validation. trace musterr $CLI bundle validate -t terraform-target + +# bundle.engine takes priority over the env var, so the error names the config setting even when both say terraform. +DATABRICKS_BUNDLE_ENGINE=terraform trace musterr $CLI bundle validate -t terraform-target diff --git a/bundle/config/engine/engine.go b/bundle/config/engine/engine.go index 061d74c8bb5..f5eacbb4219 100644 --- a/bundle/config/engine/engine.go +++ b/bundle/config/engine/engine.go @@ -21,23 +21,23 @@ const ( // for existing terraform deployments (whose state is migrated to it before the command runs). const Default = EngineDirect -// TerraformRemovedMessage is the error text shown when a bundle pins the removed -// Terraform deployment engine via bundle.engine. TerraformRemovedEnvMessage is -// the same for DATABRICKS_BUNDLE_ENGINE. "terraform" is still recognized as a -// value so we can point at this specific removal rather than reporting it as an -// unrecognized setting. +// TerraformRemovedConfigMessage and TerraformRemovedEnvMessage are the error text +// shown when a bundle pins the removed Terraform deployment engine via +// bundle.engine or DATABRICKS_BUNDLE_ENGINE respectively. "terraform" is still +// recognized as a value so we can point at this specific removal rather than +// reporting it as an unrecognized setting. const ( - TerraformRemovedMessage = TerraformRemovedSummary + "\n\n" + TerraformRemovedDetail - TerraformRemovedEnvMessage = TerraformRemovedSummary + "\n\n" + TerraformRemovedEnvDetail + TerraformRemovedConfigMessage = TerraformRemovedSummary + "\n\n" + TerraformRemovedConfigDetail + TerraformRemovedEnvMessage = TerraformRemovedSummary + "\n\n" + TerraformRemovedEnvDetail ) -// TerraformRemovedSummary and TerraformRemovedDetail are the two parts of -// TerraformRemovedMessage, for callers that report it as a diagnostic. +// TerraformRemovedSummary and TerraformRemovedConfigDetail are the two parts of +// TerraformRemovedConfigMessage, for callers that report it as a diagnostic. const TerraformRemovedSummary = `the Terraform deployment engine has been removed in Databricks CLI v1.20.0` const ( - TerraformRemovedDetail = `Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; ` + terraformRemovedHint - TerraformRemovedEnvDetail = `Unset the ` + EnvVar + ` environment variable (or set it to "direct") to deploy with the direct engine; ` + terraformRemovedHint + TerraformRemovedConfigDetail = `Remove the "bundle.engine" setting (or set it to "direct") to deploy with the direct engine; ` + terraformRemovedHint + TerraformRemovedEnvDetail = `Unset the ` + EnvVar + ` environment variable (or set it to "direct") to deploy with the direct engine; ` + terraformRemovedHint ) const terraformRemovedHint = `existing Terraform state is migrated automatically. To keep using Terraform, revert to Databricks CLI v1.19.x. diff --git a/bundle/config/validate/validate_engine.go b/bundle/config/validate/validate_engine.go index 948e21e00ee..6ebd53df50e 100644 --- a/bundle/config/validate/validate_engine.go +++ b/bundle/config/validate/validate_engine.go @@ -54,7 +54,7 @@ func (v *validateEngine) Apply(_ context.Context, b *bundle.Bundle) diag.Diagnos return diags.Append(diag.Diagnostic{ Severity: diag.Error, Summary: engine.TerraformRemovedSummary, - Detail: engine.TerraformRemovedDetail, + Detail: engine.TerraformRemovedConfigDetail, Locations: []dyn.Location{loc}, }) } diff --git a/cmd/bundle/utils/process.go b/cmd/bundle/utils/process.go index 45ca52b1060..55cacbe4655 100644 --- a/cmd/bundle/utils/process.go +++ b/cmd/bundle/utils/process.go @@ -563,7 +563,7 @@ func ResolveEngineSetting(ctx context.Context, b *bundle.Bundle) (engine.EngineS return engine.EngineSetting{}, fmt.Errorf("invalid value %q for bundle.engine (expected %q)", configEngine, engine.EngineDirect) } if parsed == engine.EngineTerraform { - return engine.EngineSetting{}, errors.New(engine.TerraformRemovedMessage) + return engine.EngineSetting{}, errors.New(engine.TerraformRemovedConfigMessage) } source := "bundle.engine setting" v := dyn.GetValue(b.Config.Value(), "bundle.engine") diff --git a/cmd/bundle/utils/resolve_engine_test.go b/cmd/bundle/utils/resolve_engine_test.go index dc0b4d15fec..8641d320d98 100644 --- a/cmd/bundle/utils/resolve_engine_test.go +++ b/cmd/bundle/utils/resolve_engine_test.go @@ -65,5 +65,5 @@ func TestResolveEngineSettingTerraformConfig(t *testing.T) { ctx := env.Set(t.Context(), engine.EnvVar, "terraform") b := &bundle.Bundle{Config: config.Root{Bundle: config.Bundle{Engine: engine.EngineTerraform}}} _, err := ResolveEngineSetting(ctx, b) - assert.EqualError(t, err, engine.TerraformRemovedMessage) + assert.EqualError(t, err, engine.TerraformRemovedConfigMessage) } From e9c9f28533b642b5b6f10568893a7d0a558e5bc7 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Wed, 7 Oct 2026 00:38:35 +0200 Subject: [PATCH 4/4] Drop changelog fragment The removal error is new in the unreleased 1.20.0, so there is no released behaviour to describe as changed. Co-authored-by: Isaac --- .nextchanges/bundles/engine-env-removal-message.md | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .nextchanges/bundles/engine-env-removal-message.md diff --git a/.nextchanges/bundles/engine-env-removal-message.md b/.nextchanges/bundles/engine-env-removal-message.md deleted file mode 100644 index 6cf826058fa..00000000000 --- a/.nextchanges/bundles/engine-env-removal-message.md +++ /dev/null @@ -1 +0,0 @@ -* When `DATABRICKS_BUNDLE_ENGINE=terraform` is set, the Terraform removal error now says to unset the environment variable instead of pointing at the `bundle.engine` setting. ([#6951](https://github.com/databricks/cli/pull/6951))