From a2bc6aee957b3d13f567d3dc35b88d69d0c7d68e Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Wed, 7 Oct 2026 11:54:43 +0200 Subject: [PATCH 1/2] Report engine: terraform in bundle debug list-targets Co-authored-by: Isaac --- .../list-targets-root-engine/databricks.yml | 11 +++++++ .../list-targets-root-engine/out.test.toml | 2 ++ .../debug/list-targets-root-engine/output.txt | 23 +++++++++++++++ .../debug/list-targets-root-engine/script | 2 ++ .../bundle/debug/list-targets/databricks.yml | 6 ++++ .../bundle/debug/list-targets/output.txt | 9 ++++++ cmd/bundle/debug/list_targets.go | 29 ++++++++++++++++--- 7 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 acceptance/bundle/debug/list-targets-root-engine/databricks.yml create mode 100644 acceptance/bundle/debug/list-targets-root-engine/out.test.toml create mode 100644 acceptance/bundle/debug/list-targets-root-engine/output.txt create mode 100644 acceptance/bundle/debug/list-targets-root-engine/script diff --git a/acceptance/bundle/debug/list-targets-root-engine/databricks.yml b/acceptance/bundle/debug/list-targets-root-engine/databricks.yml new file mode 100644 index 00000000000..a541594a9cb --- /dev/null +++ b/acceptance/bundle/debug/list-targets-root-engine/databricks.yml @@ -0,0 +1,11 @@ +bundle: + name: test-bundle + engine: terraform + +targets: + inherited: + default: true + direct: + bundle: + engine: direct + null_target: diff --git a/acceptance/bundle/debug/list-targets-root-engine/out.test.toml b/acceptance/bundle/debug/list-targets-root-engine/out.test.toml new file mode 100644 index 00000000000..a927a5fbc06 --- /dev/null +++ b/acceptance/bundle/debug/list-targets-root-engine/out.test.toml @@ -0,0 +1,2 @@ +Cloud = false +EnvMatrix.DMS = ["", "true"] diff --git a/acceptance/bundle/debug/list-targets-root-engine/output.txt b/acceptance/bundle/debug/list-targets-root-engine/output.txt new file mode 100644 index 00000000000..82a5e8949ee --- /dev/null +++ b/acceptance/bundle/debug/list-targets-root-engine/output.txt @@ -0,0 +1,23 @@ + +>>> [CLI] bundle debug list-targets +direct +inherited (default) engine:terraform +null_target engine:terraform + +>>> [CLI] bundle debug list-targets --output json +{ + "targets": [ + { + "name": "direct" + }, + { + "name": "inherited", + "default": true, + "engine": "terraform" + }, + { + "name": "null_target", + "engine": "terraform" + } + ] +} \ No newline at end of file diff --git a/acceptance/bundle/debug/list-targets-root-engine/script b/acceptance/bundle/debug/list-targets-root-engine/script new file mode 100644 index 00000000000..fb699dee0cc --- /dev/null +++ b/acceptance/bundle/debug/list-targets-root-engine/script @@ -0,0 +1,2 @@ +trace $CLI bundle debug list-targets +trace $CLI bundle debug list-targets --output json diff --git a/acceptance/bundle/debug/list-targets/databricks.yml b/acceptance/bundle/debug/list-targets/databricks.yml index 1de1692658b..bbb1a8e933d 100644 --- a/acceptance/bundle/debug/list-targets/databricks.yml +++ b/acceptance/bundle/debug/list-targets/databricks.yml @@ -20,6 +20,12 @@ targets: mode: production workspace: host: https://prod.example.com + tf: + bundle: + engine: terraform + direct: + bundle: + engine: direct with_vars: default: ${var.is_default} mode: ${var.target_mode} diff --git a/acceptance/bundle/debug/list-targets/output.txt b/acceptance/bundle/debug/list-targets/output.txt index a936dcf5033..da0dee03b23 100644 --- a/acceptance/bundle/debug/list-targets/output.txt +++ b/acceptance/bundle/debug/list-targets/output.txt @@ -1,8 +1,10 @@ >>> [CLI] bundle debug list-targets dev (default) development https://dev.example.com +direct prod production https://prod.example.com staging +tf engine:terraform with_vars ${var.target_mode} ${var.target_host} >>> [CLI] bundle debug list-targets --output json @@ -14,6 +16,9 @@ with_vars ${var.target_mode} ${var.target_host} "mode": "development", "host": "https://dev.example.com" }, + { + "name": "direct" + }, { "name": "prod", "mode": "production", @@ -22,6 +27,10 @@ with_vars ${var.target_mode} ${var.target_host} { "name": "staging" }, + { + "name": "tf", + "engine": "terraform" + }, { "name": "with_vars", "mode": "${var.target_mode}", diff --git a/cmd/bundle/debug/list_targets.go b/cmd/bundle/debug/list_targets.go index 6349ba46725..ebd038da11d 100644 --- a/cmd/bundle/debug/list_targets.go +++ b/cmd/bundle/debug/list_targets.go @@ -9,6 +9,7 @@ import ( "github.com/databricks/cli/bundle" "github.com/databricks/cli/bundle/config" + "github.com/databricks/cli/bundle/config/engine" "github.com/databricks/cli/bundle/phases" "github.com/databricks/cli/cmd/root" "github.com/databricks/cli/libs/cmdio" @@ -23,13 +24,18 @@ type targetInfo struct { Default bool `json:"default,omitempty"` Mode config.Mode `json:"mode,omitempty"` Host string `json:"host,omitempty"` + + // Engine is only reported for targets that use the removed Terraform engine. + Engine engine.EngineType `json:"engine,omitempty"` } type listTargetsOutput struct { Targets []targetInfo `json:"targets"` } -func collectTargets(targets map[string]*config.Target) []targetInfo { +// collectTargets returns the targets sorted by name. The engine of a target is +// its own bundle.engine if set, otherwise the top-level bundle.engine. +func collectTargets(targets map[string]*config.Target, rootEngine engine.EngineType) []targetInfo { names := slices.Sorted(maps.Keys(targets)) result := make([]targetInfo, 0, len(names)) @@ -38,7 +44,7 @@ func collectTargets(targets map[string]*config.Target) []targetInfo { // YAML decoding can leave a nil entry in the map when a target is // declared with a null value. Skip rather than dereference and panic. if t == nil { - result = append(result, targetInfo{Name: name}) + result = append(result, targetInfo{Name: name, Engine: terraformOnly(rootEngine)}) continue } info := targetInfo{ @@ -49,13 +55,25 @@ func collectTargets(targets map[string]*config.Target) []targetInfo { if t.Workspace != nil { info.Host = t.Workspace.Host } + targetEngine := rootEngine + if t.Bundle != nil && t.Bundle.Engine != engine.EngineNotSet { + targetEngine = t.Bundle.Engine + } + info.Engine = terraformOnly(targetEngine) result = append(result, info) } return result } +func terraformOnly(e engine.EngineType) engine.EngineType { + if e == engine.EngineTerraform { + return e + } + return engine.EngineNotSet +} + // NewListTargetsCommand returns a command that lists all bundle targets -// with their name, default, mode, and workspace host fields. +// with their name, default, mode, workspace host, and (if terraform) engine fields. func NewListTargetsCommand() *cobra.Command { cmd := &cobra.Command{ Use: "list-targets", @@ -79,7 +97,7 @@ func NewListTargetsCommand() *cobra.Command { return root.ErrAlreadyPrinted } - targets := collectTargets(b.Config.Targets) + targets := collectTargets(b.Config.Targets, b.Config.Bundle.Engine) switch root.OutputType(cmd) { case flags.OutputText: @@ -94,6 +112,9 @@ func NewListTargetsCommand() *cobra.Command { if t.Host != "" { parts = append(parts, t.Host) } + if t.Engine != "" { + parts = append(parts, "engine:"+string(t.Engine)) + } cmdio.LogString(ctx, strings.Join(parts, " ")) } case flags.OutputJSON: From 091aa34bfe8a4056406494eb3653bafb14c7dd3e Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Wed, 7 Oct 2026 12:16:40 +0200 Subject: [PATCH 2/2] acc: rename list-targets fixture targets so names don't read as engine values Co-authored-by: Isaac --- .../debug/list-targets-root-engine/databricks.yml | 2 +- .../bundle/debug/list-targets-root-engine/output.txt | 8 ++++---- acceptance/bundle/debug/list-targets/databricks.yml | 4 ++-- acceptance/bundle/debug/list-targets/output.txt | 12 ++++++------ 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/acceptance/bundle/debug/list-targets-root-engine/databricks.yml b/acceptance/bundle/debug/list-targets-root-engine/databricks.yml index a541594a9cb..58fbbd93be0 100644 --- a/acceptance/bundle/debug/list-targets-root-engine/databricks.yml +++ b/acceptance/bundle/debug/list-targets-root-engine/databricks.yml @@ -5,7 +5,7 @@ bundle: targets: inherited: default: true - direct: + uses_direct: bundle: engine: direct null_target: diff --git a/acceptance/bundle/debug/list-targets-root-engine/output.txt b/acceptance/bundle/debug/list-targets-root-engine/output.txt index 82a5e8949ee..b198244bb80 100644 --- a/acceptance/bundle/debug/list-targets-root-engine/output.txt +++ b/acceptance/bundle/debug/list-targets-root-engine/output.txt @@ -1,15 +1,12 @@ >>> [CLI] bundle debug list-targets -direct inherited (default) engine:terraform null_target engine:terraform +uses_direct >>> [CLI] bundle debug list-targets --output json { "targets": [ - { - "name": "direct" - }, { "name": "inherited", "default": true, @@ -18,6 +15,9 @@ null_target engine:terraform { "name": "null_target", "engine": "terraform" + }, + { + "name": "uses_direct" } ] } \ No newline at end of file diff --git a/acceptance/bundle/debug/list-targets/databricks.yml b/acceptance/bundle/debug/list-targets/databricks.yml index bbb1a8e933d..438256ff729 100644 --- a/acceptance/bundle/debug/list-targets/databricks.yml +++ b/acceptance/bundle/debug/list-targets/databricks.yml @@ -20,10 +20,10 @@ targets: mode: production workspace: host: https://prod.example.com - tf: + uses_terraform: bundle: engine: terraform - direct: + uses_direct: bundle: engine: direct with_vars: diff --git a/acceptance/bundle/debug/list-targets/output.txt b/acceptance/bundle/debug/list-targets/output.txt index da0dee03b23..abf957e8729 100644 --- a/acceptance/bundle/debug/list-targets/output.txt +++ b/acceptance/bundle/debug/list-targets/output.txt @@ -1,10 +1,10 @@ >>> [CLI] bundle debug list-targets dev (default) development https://dev.example.com -direct prod production https://prod.example.com staging -tf engine:terraform +uses_direct +uses_terraform engine:terraform with_vars ${var.target_mode} ${var.target_host} >>> [CLI] bundle debug list-targets --output json @@ -16,9 +16,6 @@ with_vars ${var.target_mode} ${var.target_host} "mode": "development", "host": "https://dev.example.com" }, - { - "name": "direct" - }, { "name": "prod", "mode": "production", @@ -28,7 +25,10 @@ with_vars ${var.target_mode} ${var.target_host} "name": "staging" }, { - "name": "tf", + "name": "uses_direct" + }, + { + "name": "uses_terraform", "engine": "terraform" }, {