Skip to content

Add lifecycle.depends_on to order resources without references - #7120

Merged
denik merged 3 commits into
mainfrom
denik/depends-on
Oct 26, 2026
Merged

denik merged 3 commits into
mainfrom
denik/depends-on

Conversation

@denik

@denik denik commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Changes

Add lifecycle.depends_on, a list of - resource: <key> entries (foo or jobs.foo) that orders a resource after the listed ones on deploy and before them on destroy. Edges are saved in state like reference-derived ones, including by bundle migrate. A target that is skipped from the plan is ignored.

Uses Resources.ResolveKey from #7128. Used by #7132 to replace the references injected for implicit schema/catalog dependencies.

Tests

Acceptance tests for ordering, validation errors, and a config with depends_on migrating from Terraform.

This pull request and its description were written by Isaac.

@github-actions github-actions Bot added the DABs DABs related issues label Oct 20, 2026
@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Commit: d8658a068 | Workflow run

Regression test report

Selected 4 changed tests (limit=20, 0 not selected)

7 tests: regression=7 unreleased=0 coverage=0 failing=0

test branch main (4d88efe) latest (v1.22.1)
TestAccept/bundle/lifecycle/depends-on-validation/DMS= ✅ ❌ ❌
TestAccept/bundle/lifecycle/depends-on-validation/DMS=true ✅ ❌ ❌
TestAccept/bundle/lifecycle/depends-on/DMS= ✅ ❌ ❌
TestAccept/bundle/lifecycle/depends-on/DMS=true ✅ ❌ ❌
TestAccept/bundle/migrate/auto/depends-on/DMS= ✅ ❌ ❌
TestAccept/bundle/refschema/DMS= ✅ ❌ ❌
TestAccept/bundle/refschema/DMS=true ✅ ❌ ❌
TestAccept/bundle/lifecycle/depends-on-validation/DMS=: branch ✅ | main (4d88efe) ❌ | latest (v1.22.1) ❌

main (4d88efe):

acceptance_test.go:1311: 
        	Error Trace:	/home/runner/work/cli/cli/libs/testdiff/testdiff.go:22
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1311
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1081
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:659
        	Error:      	Not equal: 
        	            	expected: "Error: invalid lifecycle.depends_on: no such resource: missing_for_run\n  at resources.job_runs.a_run.lifecycle.depends_on[0].resource\n  in databricks.yml:25:23\n\nError: invalid lifecycle.depends_on: resource \"a_job\" cannot depend on itself\n  at resources.jobs.a_job.lifecycle.depends_on[0].resource\n  in databricks.yml:10:23\n\nError: invalid lifecycle.depends_on: no such resource: missing\n  at resources.jobs.a_job.lifecycle.depends_on[1].resource\n  in databricks.yml:11:23\n\nError: invalid lifecycle.depends_on: no such resource: a.b.c\n  at resources.jobs.b_job.lifecycle.depends_on[0].resource\n  in databricks.yml:16:23\n\nName: test-bundle\nTarget: default\nWorkspace:\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default\n\nFound 4 errors\n"
        	            	actual  : "Warning: unknown field: depends_on\n  at resources.jobs.a_job.lifecycle\n  in databricks.yml:9:9\n\nWarning: unknown field: depends_on\n  at resources.jobs.b_job.lifecycle\n  in databricks.yml:15:9\n\nWarning: unknown field: depends_on\n  at resources.job_runs.a_run.lifecycle\n  in databricks.yml:24:9\n\nName: test-bundle\nTarget: default\nWorkspace:\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default\n\nFound 3 warnings\n\nUnexpected success\n\nExit code: 1\n"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -1,16 +1,12 @@
        	            	-Error: invalid lifecycle.depends_on: no such resource: missing_for_run
        	            	-  at resources.job_runs.a_run.lifecycle.depends_on[0].resource
        	            	-  in databricks.yml:25:23
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.a_job.lifecycle
        	            	+  in databricks.yml:9:9
        	            	 
        	            	-Error: invalid lifecycle.depends_on: resource "a_job" cannot depend on itself
        	            	-  at resources.jobs.a_job.lifecycle.depends_on[0].resource
        	            	-  in databricks.yml:10:23
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.b_job.lifecycle
        	            	+  in databricks.yml:15:9
        	            	 
        	            	-Error: invalid lifecycle.depends_on: no such resource: missing
        	            	-  at resources.jobs.a_job.lifecycle.depends_on[1].resource
        	            	-  in databricks.yml:11:23
        	            	-
        	            	-Error: invalid lifecycle.depends_on: no such resource: a.b.c
        	            	-  at resources.jobs.b_job.lifecycle.depends_on[0].resource
        	            	-  in databricks.yml:16:23
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.job_runs.a_run.lifecycle
        	            	+  in databricks.yml:24:9
        	            	 
        	            	@@ -22,3 +18,7 @@
        	            	 
        	            	-Found 4 errors
        	            	+Found 3 warnings
        	            	 
        	            	+Unexpected success
        	            	+
        	            	+Exit code: 1
        	            	+
        	Test:       	TestAccept/bundle/lifecycle/depends-on-validation/DMS=
        	Messages:   	bundle/lifecycle/depends-on-validation/output.txt vs /tmp/TestAcceptbundlelifecycledepends-on-validationDMS=2462702862/002/output.txt

latest (v1.22.1): same output as main (4d88efe)

TestAccept/bundle/lifecycle/depends-on-validation/DMS=true: branch ✅ | main (4d88efe) ❌ | latest (v1.22.1) ❌

main (4d88efe):

acceptance_test.go:1311: 
        	Error Trace:	/home/runner/work/cli/cli/libs/testdiff/testdiff.go:22
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1311
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1081
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:659
        	Error:      	Not equal: 
        	            	expected: "Error: invalid lifecycle.depends_on: no such resource: missing_for_run\n  at resources.job_runs.a_run.lifecycle.depends_on[0].resource\n  in databricks.yml:25:23\n\nError: invalid lifecycle.depends_on: resource \"a_job\" cannot depend on itself\n  at resources.jobs.a_job.lifecycle.depends_on[0].resource\n  in databricks.yml:10:23\n\nError: invalid lifecycle.depends_on: no such resource: missing\n  at resources.jobs.a_job.lifecycle.depends_on[1].resource\n  in databricks.yml:11:23\n\nError: invalid lifecycle.depends_on: no such resource: a.b.c\n  at resources.jobs.b_job.lifecycle.depends_on[0].resource\n  in databricks.yml:16:23\n\nName: test-bundle\nTarget: default\nWorkspace:\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default\n\nFound 4 errors\n"
        	            	actual  : "Warning: unknown field: depends_on\n  at resources.jobs.a_job.lifecycle\n  in databricks.yml:9:9\n\nWarning: unknown field: depends_on\n  at resources.jobs.b_job.lifecycle\n  in databricks.yml:15:9\n\nWarning: unknown field: depends_on\n  at resources.job_runs.a_run.lifecycle\n  in databricks.yml:24:9\n\nName: test-bundle\nTarget: default\nWorkspace:\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default\n\nFound 3 warnings\n\nUnexpected success\n\nExit code: 1\n"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -1,16 +1,12 @@
        	            	-Error: invalid lifecycle.depends_on: no such resource: missing_for_run
        	            	-  at resources.job_runs.a_run.lifecycle.depends_on[0].resource
        	            	-  in databricks.yml:25:23
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.a_job.lifecycle
        	            	+  in databricks.yml:9:9
        	            	 
        	            	-Error: invalid lifecycle.depends_on: resource "a_job" cannot depend on itself
        	            	-  at resources.jobs.a_job.lifecycle.depends_on[0].resource
        	            	-  in databricks.yml:10:23
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.b_job.lifecycle
        	            	+  in databricks.yml:15:9
        	            	 
        	            	-Error: invalid lifecycle.depends_on: no such resource: missing
        	            	-  at resources.jobs.a_job.lifecycle.depends_on[1].resource
        	            	-  in databricks.yml:11:23
        	            	-
        	            	-Error: invalid lifecycle.depends_on: no such resource: a.b.c
        	            	-  at resources.jobs.b_job.lifecycle.depends_on[0].resource
        	            	-  in databricks.yml:16:23
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.job_runs.a_run.lifecycle
        	            	+  in databricks.yml:24:9
        	            	 
        	            	@@ -22,3 +18,7 @@
        	            	 
        	            	-Found 4 errors
        	            	+Found 3 warnings
        	            	 
        	            	+Unexpected success
        	            	+
        	            	+Exit code: 1
        	            	+
        	Test:       	TestAccept/bundle/lifecycle/depends-on-validation/DMS=true
        	Messages:   	bundle/lifecycle/depends-on-validation/output.txt vs /tmp/TestAcceptbundlelifecycledepends-on-validationDMS=true2549528423/002/output.txt

latest (v1.22.1): same output as main (4d88efe)

TestAccept/bundle/lifecycle/depends-on/DMS=: branch ✅ | main (4d88efe) ❌ | latest (v1.22.1) ❌

main (4d88efe):

acceptance_test.go:1311: Diff:
        --- bundle/lifecycle/depends-on/output.txt
        +++ /tmp/TestAcceptbundlelifecycledepends-onDMS=108127533/002/output.txt
        @@ -1,23 +1,22 @@
         
         === Plan records the edges
         >>> [CLI] bundle plan -o json
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         {
        -  "resources.jobs.a_job": [
        -    {
        -      "node": "resources.jobs.z_job",
        -      "label": "depends_on"
        -    },
        -    {
        -      "node": "resources.pipelines.z_pipeline",
        -      "label": "depends_on"
        -    }
        -  ],
        +  "resources.jobs.a_job": null,
           "resources.jobs.z_job": null,
           "resources.pipelines.z_pipeline": null
         }
         
         === Deploy creates dependencies first
         >>> [CLI] bundle deploy
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...
         Created jobs.a_job
         Created jobs.z_job
        @@ -26,10 +18,18 @@
         Resources: 3 created, 0 changed, 0 deleted, 0 unchanged
         
         >>> print_requests.py //jobs //pipelines
        -POST /api/2.2/jobs/create a_job
        +POST /api/2.0/pipelines z_pipeline
         
        -=== Destroy deletes dependents first
        +=== Destroy deletes dependents firstWarning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
        +
         >>> [CLI] bundle destroy --auto-approve
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         The following resources will be deleted:
           delete resources.jobs.a_job
           delete resources.jobs.z_job

latest (v1.22.1):

acceptance_test.go:1311: Diff:
        --- bundle/lifecycle/depends-on/output.txt
        +++ /tmp/TestAcceptbundlelifecycledepends-onDMS=2603805076/002/output.txt
        @@ -1,23 +1,22 @@
         
         === Plan records the edges
         >>> [CLI] bundle plan -o json
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         {
        -  "resources.jobs.a_job": [
        -    {
        -      "node": "resources.jobs.z_job",
        -      "label": "depends_on"
        -    },
        -    {
        -      "node": "resources.pipelines.z_pipeline",
        -      "label": "depends_on"
        -    }
        -  ],
        +  "resources.jobs.a_job": null,
           "resources.jobs.z_job": null,
           "resources.pipelines.z_pipeline": null
         }
         
         === Deploy creates dependencies first
         >>> [CLI] bundle deploy
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...
         Created jobs.a_job
         Created jobs.z_job
        @@ -26,10 +18,18 @@
         Resources: 3 created, 0 changed, 0 deleted, 0 unchanged
         
         >>> print_requests.py //jobs //pipelines
        -POST /api/2.2/jobs/create a_job
        +POST /api/2.2/jobs/create z_job
         
        -=== Destroy deletes dependents first
        +=== Destroy deletes dependents firstWarning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
        +
         >>> [CLI] bundle destroy --auto-approve
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         The following resources will be deleted:
           delete resources.jobs.a_job
           delete resources.jobs.z_job
TestAccept/bundle/lifecycle/depends-on/DMS=true: branch ✅ | main (4d88efe) ❌ | latest (v1.22.1) ❌

main (4d88efe):

acceptance_test.go:1311: Diff:
        --- bundle/lifecycle/depends-on/output.txt
        +++ /tmp/TestAcceptbundlelifecycledepends-onDMS=true1156761221/002/output.txt
        @@ -1,23 +1,22 @@
         
         === Plan records the edges
         >>> [CLI] bundle plan -o json
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         {
        -  "resources.jobs.a_job": [
        -    {
        -      "node": "resources.jobs.z_job",
        -      "label": "depends_on"
        -    },
        -    {
        -      "node": "resources.pipelines.z_pipeline",
        -      "label": "depends_on"
        -    }
        -  ],
        +  "resources.jobs.a_job": null,
           "resources.jobs.z_job": null,
           "resources.pipelines.z_pipeline": null
         }
         
         === Deploy creates dependencies first
         >>> [CLI] bundle deploy
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...
         Created jobs.a_job
         Created jobs.z_job
        @@ -26,10 +18,18 @@
         Resources: 3 created, 0 changed, 0 deleted, 0 unchanged
         
         >>> print_requests.py //jobs //pipelines
        -POST /api/2.2/jobs/create a_job
        +POST /api/2.2/jobs/create z_job
         
        -=== Destroy deletes dependents first
        +=== Destroy deletes dependents firstWarning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
        +
         >>> [CLI] bundle destroy --auto-approve
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         The following resources will be deleted:
           delete resources.jobs.a_job
           delete resources.jobs.z_job
        @@ -42,4 +40,5 @@
         All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default
         
         Destroy: 3 deleted
        -a_job deleted first
        +
        +Exit code: 1

latest (v1.22.1):

acceptance_test.go:1311: Diff:
        --- bundle/lifecycle/depends-on/output.txt
        +++ /tmp/TestAcceptbundlelifecycledepends-onDMS=true226243549/002/output.txt
        @@ -1,23 +1,22 @@
         
         === Plan records the edges
         >>> [CLI] bundle plan -o json
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         {
        -  "resources.jobs.a_job": [
        -    {
        -      "node": "resources.jobs.z_job",
        -      "label": "depends_on"
        -    },
        -    {
        -      "node": "resources.pipelines.z_pipeline",
        -      "label": "depends_on"
        -    }
        -  ],
        +  "resources.jobs.a_job": null,
           "resources.jobs.z_job": null,
           "resources.pipelines.z_pipeline": null
         }
         
         === Deploy creates dependencies first
         >>> [CLI] bundle deploy
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...
         Created jobs.a_job
         Created jobs.z_job
        @@ -26,10 +18,18 @@
         Resources: 3 created, 0 changed, 0 deleted, 0 unchanged
         
         >>> print_requests.py //jobs //pipelines
        -POST /api/2.2/jobs/create a_job
        +POST /api/2.0/pipelines z_pipeline
         
        -=== Destroy deletes dependents first
        +=== Destroy deletes dependents firstWarning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
        +
         >>> [CLI] bundle destroy --auto-approve
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         The following resources will be deleted:
           delete resources.jobs.a_job
           delete resources.jobs.z_job
        @@ -42,4 +40,5 @@
         All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default
         
         Destroy: 3 deleted
        -a_job deleted first
        +
        +Exit code: 1
TestAccept/bundle/migrate/auto/depends-on/DMS=: branch ✅ | main (4d88efe) ❌ | latest (v1.22.1) ❌

main (4d88efe):

acceptance_test.go:1311: 
        	Error Trace:	/home/runner/work/cli/cli/libs/testdiff/testdiff.go:22
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1311
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1081
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:659
        	Error:      	Not equal: 
        	            	expected: "\n=== Replay a prior terraform deployment\n>>> replay_tfstate.py terraform-requests.json terraform.tfstate\n\n=== Deploy migrates to direct and honors lifecycle.depends_on\n>>> [CLI] bundle deploy\nNotice: migrating your bundle to direct deployment engine (https://github.com/databricks/cli/issues/6765).\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...\nMigrated 1 resource to direct deployment engine.\nCreated jobs.other_job\nFiles: 1 uploaded, 0 deleted\nResources: 1 created, 0 changed, 0 deleted, 1 unchanged\n\n>>> print_migration_telemetry\ndirect_migrated_via_default true\n\n=== The edge is recorded in the plan\n>>> [CLI] bundle plan -o json\n{\n  \"resources.jobs.other_job\": [\n    {\n      \"node\": \"resources.jobs.test_job\",\n      \"label\": \"depends_on\"\n    }\n  ],\n  \"resources.jobs.test_job\": null\n}\n"
        	            	actual  : "\n=== Replay a prior terraform deployment\n>>> replay_tfstate.py terraform-requests.json terraform.tfstate\n\n=== Deploy migrates to direct and honors lifecycle.depends_on\n>>> [CLI] bundle deploy\nWarning: unknown field: depends_on\n  at resources.jobs.other_job.lifecycle\n  in databricks.yml:11:9\n\nNotice: migrating your bundle to direct deployment engine (https://github.com/databricks/cli/issues/6765).\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...\nMigrated 1 resource to direct deployment engine.\nCreated jobs.other_job\nFiles: 1 uploaded, 0 deleted\nResources: 1 created, 0 changed, 0 deleted, 1 unchanged\n\n>>> print_migration_telemetry\ndirect_migrated_via_default true\n\n=== The edge is recorded in the plan\n>>> [CLI] bundle plan -o json\nWarning: unknown field: depends_on\n  at resources.jobs.other_job.lifecycle\n  in databricks.yml:11:9\n\n{\n  \"resources.jobs.other_job\": null,\n  \"resources.jobs.test_job\": null\n}\n"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -6,2 +6,6 @@
        	            	 >>> [CLI] bundle deploy
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.other_job.lifecycle
        	            	+  in databricks.yml:11:9
        	            	+
        	            	 Notice: migrating your bundle to direct deployment engine (https://github.com/databricks/cli/issues/6765).
        	            	@@ -18,9 +22,8 @@
        	            	 >>> [CLI] bundle plan -o json
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.other_job.lifecycle
        	            	+  in databricks.yml:11:9
        	            	+
        	            	 {
        	            	-  "resources.jobs.other_job": [
        	            	-    {
        	            	-      "node": "resources.jobs.test_job",
        	            	-      "label": "depends_on"
        	            	-    }
        	            	-  ],
        	            	+  "resources.jobs.other_job": null,
        	            	   "resources.jobs.test_job": null
        	Test:       	TestAccept/bundle/migrate/auto/depends-on/DMS=
        	Messages:   	bundle/migrate/auto/depends-on/output.txt vs /tmp/TestAcceptbundlemigrateautodepends-onDMS=3925933771/002/output.txt

latest (v1.22.1): same output as main (4d88efe)

TestAccept/bundle/refschema/DMS=: branch ✅ | main (4d88efe) ❌ | latest (v1.22.1) ❌

main (4d88efe):

acceptance_test.go:1311: Diff:
        --- bundle/refschema/out.fields.txt
        +++ /tmp/TestAcceptbundlerefschemaDMS=611967265/001/out.fields.txt
        @@ -34,9 +34,6 @@
         resources.alerts.*.file_path	string	INPUT
         resources.alerts.*.id	string	ALL
         resources.alerts.*.lifecycle	resources.Lifecycle	INPUT
        -resources.alerts.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.alerts.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.alerts.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.alerts.*.lifecycle.prevent_destroy	bool	INPUT
         resources.alerts.*.lifecycle_state	sql.AlertLifecycleState	ALL
         resources.alerts.*.modified_status	string	INPUT
        @@ -158,9 +155,6 @@
         resources.apps.*.lifecycle	*dresources.StateLifecycle	REMOTE	STATE
         resources.apps.*.lifecycle	*resources.LifecycleWithStarted	INPUT
         resources.apps.*.lifecycle	resources.Lifecycle	INPUT
        -resources.apps.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.apps.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.apps.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.apps.*.lifecycle.prevent_destroy	bool	INPUT
         resources.apps.*.lifecycle.started	*bool	ALL
         resources.apps.*.modified_status	string	INPUT
        @@ -280,9 +274,6 @@
         resources.catalogs.*.id	string	INPUT
         resources.catalogs.*.isolation_mode	catalog.CatalogIsolationMode	REMOTE
         resources.catalogs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.catalogs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.catalogs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.catalogs.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.catalogs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.catalogs.*.managed_encryption_settings	*catalog.EncryptionSettings	ALL
         resources.catalogs.*.managed_encryption_settings.azure_encryption_settings	*catalog.AzureEncryptionSettings	ALL
        @@ -340,9 +331,6 @@
         resources.cluster_policies.*.libraries[*].requirements	string	ALL
         resources.cluster_policies.*.libraries[*].whl	string	ALL
         resources.cluster_policies.*.lifecycle	resources.Lifecycle	INPUT
        -resources.cluster_policies.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.cluster_policies.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.cluster_policies.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.cluster_policies.*.lifecycle.prevent_destroy	bool	INPUT
         resources.cluster_policies.*.max_clusters_per_user	int64	ALL
         resources.cluster_policies.*.modified_status	string	INPUT
        @@ -500,9 +488,6 @@
         resources.clusters.*.lifecycle	*dresources.StateLifecycle	REMOTE	STATE
         resources.clusters.*.lifecycle	*resources.LifecycleWithStarted	INPUT
         resources.clusters.*.lifecycle	resources.Lifecycle	INPUT
        -resources.clusters.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.clusters.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.clusters.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.clusters.*.lifecycle.prevent_destroy	bool	INPUT
         resources.clusters.*.lifecycle.started	*bool	ALL
         resources.clusters.*.modified_status	string	INPUT
        @@ -669,9 +654,6 @@
         resources.dashboards.*.file_path	string	INPUT
         resources.dashboards.*.id	string	INPUT
         resources.dashboards.*.lifecycle	resources.Lifecycle	INPUT
        -resources.dashboards.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.dashboards.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.dashboards.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.dashboards.*.lifecycle.prevent_destroy	bool	INPUT
         resources.dashboards.*.lifecycle_state	dashboards.LifecycleState	ALL
         resources.dashboards.*.modified_status	string	INPUT
        @@ -693,9 +675,6 @@
         resources.database_catalogs.*.database_name	string	ALL
         resources.database_catalogs.*.id	string	INPUT
         resources.database_catalogs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.database_catalogs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.database_catalogs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.database_catalogs.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.database_catalogs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.database_catalogs.*.modified_status	string	INPUT
         resources.database_catalogs.*.name	string	ALL
        @@ -730,9 +709,6 @@
         resources.database_instances.*.enable_readable_secondaries	bool	ALL
         resources.database_instances.*.id	string	INPUT
         resources.database_instances.*.lifecycle	resources.Lifecycle	INPUT
        -resources.database_instances.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.database_instances.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.database_instances.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.database_instances.*.lifecycle.prevent_destroy	bool	INPUT
         resources.database_instances.*.modified_status	string	INPUT
         resources.database_instances.*.name	string	ALL
        @@ -764,9 +740,6 @@
         resources.experiments.*.id	string	INPUT
         resources.experiments.*.last_update_time	int64	REMOTE
         resources.experiments.*.lifecycle	resources.Lifecycle	INPUT
        -resources.experiments.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.experiments.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.experiments.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.experiments.*.lifecycle.prevent_destroy	bool	INPUT
         resources.experiments.*.lifecycle_stage	string	REMOTE
         resources.experiments.*.modified_status	string	INPUT
        @@ -850,9 +823,6 @@
         resources.external_locations.*.id	string	INPUT
         resources.external_locations.*.isolation_mode	catalog.IsolationMode	REMOTE
         resources.external_locations.*.lifecycle	resources.Lifecycle	INPUT
        -resources.external_locations.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.external_locations.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.external_locations.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.external_locations.*.lifecycle.prevent_destroy	bool	INPUT
         resources.external_locations.*.metastore_id	string	REMOTE
         resources.external_locations.*.modified_status	string	INPUT
        @@ -958,9 +928,6 @@
         resources.features.*.inputs	[]string	ALL
         resources.features.*.inputs[*]	string	ALL
         resources.features.*.lifecycle	resources.Lifecycle	INPUT
        -resources.features.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.features.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.features.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.features.*.lifecycle.prevent_destroy	bool	INPUT
         resources.features.*.lineage_context	*ml.LineageContext	ALL
         resources.features.*.lineage_context.job_context	*ml.JobContext	ALL
        @@ -1042,9 +1009,6 @@
         resources.genie_spaces.*.file_path	string	INPUT
         resources.genie_spaces.*.id	string	INPUT
         resources.genie_spaces.*.lifecycle	resources.Lifecycle	INPUT
        -resources.genie_spaces.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.genie_spaces.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.genie_spaces.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.genie_spaces.*.lifecycle.prevent_destroy	bool	INPUT
         resources.genie_spaces.*.modified_status	string	INPUT
         resources.genie_spaces.*.parent_path	string	ALL
        @@ -1089,9 +1053,6 @@
         resources.instance_pools.*.instance_pool_id	string	REMOTE
         resources.instance_pools.*.instance_pool_name	string	ALL
         resources.instance_pools.*.lifecycle	resources.Lifecycle	INPUT
        -resources.instance_pools.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.instance_pools.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.instance_pools.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.instance_pools.*.lifecycle.prevent_destroy	bool	INPUT
         resources.instance_pools.*.max_capacity	int	ALL
         resources.instance_pools.*.min_idle_instances	int	ALL
        @@ -1153,9 +1114,6 @@
         resources.job_runs.*.lifecycle	*dresources.JobRunLifecycleState	STATE
         resources.job_runs.*.lifecycle	*resources.JobRunLifecycle	INPUT
         resources.job_runs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.job_runs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.job_runs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.job_runs.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.job_runs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.job_runs.*.lifecycle.triggers	[]resources.JobRunTrigger	INPUT
         resources.job_runs.*.lifecycle.triggers[*]	resources.JobRunTrigger	INPUT
        @@ -1402,9 +1360,6 @@
         resources.jobs.*.job_clusters[*].serverless_compute_id	string	ALL
         resources.jobs.*.job_id	int64	REMOTE
         resources.jobs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.jobs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.jobs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.jobs.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.jobs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.jobs.*.max_concurrent_runs	int	ALL
         resources.jobs.*.modified_status	string	INPUT
        @@ -2405,9 +2360,6 @@
         resources.mcp_services.*.config.source_connection.options.*	string	ALL
         resources.mcp_services.*.id	string	INPUT
         resources.mcp_services.*.lifecycle	resources.Lifecycle	INPUT
        -resources.mcp_services.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.mcp_services.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.mcp_services.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.mcp_services.*.lifecycle.prevent_destroy	bool	INPUT
         resources.mcp_services.*.mcp_service_id	string	ALL
         resources.mcp_services.*.modified_status	string	INPUT
        @@ -2540,9 +2492,6 @@
         resources.model_provider_services.*.config.targets[*].native_api_types[*]	string	ALL
         resources.model_provider_services.*.id	string	INPUT
         resources.model_provider_services.*.lifecycle	resources.Lifecycle	INPUT
        -resources.model_provider_services.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.model_provider_services.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.model_provider_services.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.model_provider_services.*.lifecycle.prevent_destroy	bool	INPUT
         resources.model_provider_services.*.model_provider_service_id	string	ALL
         resources.model_provider_services.*.modified_status	string	INPUT
        @@ -2608,9 +2557,6 @@
         resources.model_services.*.config.routing.fallback.destinations[*].traffic_percentage	int	ALL
         resources.model_services.*.id	string	INPUT
         resources.model_services.*.lifecycle	resources.Lifecycle	INPUT
        -resources.model_services.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.model_services.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.model_services.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.model_services.*.lifecycle.prevent_destroy	bool	INPUT
         resources.model_services.*.model_service_id	string	ALL
         resources.model_services.*.modified_status	string	INPUT
        @@ -3085,9 +3031,6 @@
         resources.model_serving_endpoints.*.endpoint_id	string	REMOTE
         resources.model_serving_endpoints.*.id	string	INPUT
         resources.model_serving_endpoints.*.lifecycle	resources.Lifecycle	INPUT
        -resources.model_serving_endpoints.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.model_serving_endpoints.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.model_serving_endpoints.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.model_serving_endpoints.*.lifecycle.prevent_destroy	bool	INPUT
         resources.model_serving_endpoints.*.modified_status	string	INPUT
         resources.model_serving_endpoints.*.name	string	ALL
        @@ -3143,9 +3086,6 @@
         resources.models.*.latest_versions[*].user_id	string	REMOTE
         resources.models.*.latest_versions[*].version	string	REMOTE
         resources.models.*.lifecycle	resources.Lifecycle	INPUT
        -resources.models.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.models.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.models.*.lifecycle.depends_on[*].resource	string	INPUT
... (193 more lines truncated, raise DATABRICKS_CLI_TEST_MAX_LOG to see more)

latest (v1.22.1):

acceptance_test.go:1311: Diff:
        --- bundle/refschema/out.fields.txt
        +++ /tmp/TestAcceptbundlerefschemaDMS=577358270/001/out.fields.txt
        @@ -34,9 +34,6 @@
         resources.alerts.*.file_path	string	INPUT
         resources.alerts.*.id	string	ALL
         resources.alerts.*.lifecycle	resources.Lifecycle	INPUT
        -resources.alerts.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.alerts.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.alerts.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.alerts.*.lifecycle.prevent_destroy	bool	INPUT
         resources.alerts.*.lifecycle_state	sql.AlertLifecycleState	ALL
         resources.alerts.*.modified_status	string	INPUT
        @@ -158,9 +155,6 @@
         resources.apps.*.lifecycle	*dresources.StateLifecycle	REMOTE	STATE
         resources.apps.*.lifecycle	*resources.LifecycleWithStarted	INPUT
         resources.apps.*.lifecycle	resources.Lifecycle	INPUT
        -resources.apps.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.apps.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.apps.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.apps.*.lifecycle.prevent_destroy	bool	INPUT
         resources.apps.*.lifecycle.started	*bool	ALL
         resources.apps.*.modified_status	string	INPUT
        @@ -280,9 +274,6 @@
         resources.catalogs.*.id	string	INPUT
         resources.catalogs.*.isolation_mode	catalog.CatalogIsolationMode	REMOTE
         resources.catalogs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.catalogs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.catalogs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.catalogs.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.catalogs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.catalogs.*.managed_encryption_settings	*catalog.EncryptionSettings	ALL
         resources.catalogs.*.managed_encryption_settings.azure_encryption_settings	*catalog.AzureEncryptionSettings	ALL
        @@ -340,9 +331,6 @@
         resources.cluster_policies.*.libraries[*].requirements	string	ALL
         resources.cluster_policies.*.libraries[*].whl	string	ALL
         resources.cluster_policies.*.lifecycle	resources.Lifecycle	INPUT
        -resources.cluster_policies.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.cluster_policies.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.cluster_policies.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.cluster_policies.*.lifecycle.prevent_destroy	bool	INPUT
         resources.cluster_policies.*.max_clusters_per_user	int64	ALL
         resources.cluster_policies.*.modified_status	string	INPUT
        @@ -500,9 +488,6 @@
         resources.clusters.*.lifecycle	*dresources.StateLifecycle	REMOTE	STATE
         resources.clusters.*.lifecycle	*resources.LifecycleWithStarted	INPUT
         resources.clusters.*.lifecycle	resources.Lifecycle	INPUT
        -resources.clusters.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.clusters.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.clusters.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.clusters.*.lifecycle.prevent_destroy	bool	INPUT
         resources.clusters.*.lifecycle.started	*bool	ALL
         resources.clusters.*.modified_status	string	INPUT
        @@ -669,9 +654,6 @@
         resources.dashboards.*.file_path	string	INPUT
         resources.dashboards.*.id	string	INPUT
         resources.dashboards.*.lifecycle	resources.Lifecycle	INPUT
        -resources.dashboards.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.dashboards.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.dashboards.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.dashboards.*.lifecycle.prevent_destroy	bool	INPUT
         resources.dashboards.*.lifecycle_state	dashboards.LifecycleState	ALL
         resources.dashboards.*.modified_status	string	INPUT
        @@ -693,9 +675,6 @@
         resources.database_catalogs.*.database_name	string	ALL
         resources.database_catalogs.*.id	string	INPUT
         resources.database_catalogs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.database_catalogs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.database_catalogs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.database_catalogs.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.database_catalogs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.database_catalogs.*.modified_status	string	INPUT
         resources.database_catalogs.*.name	string	ALL
        @@ -730,9 +709,6 @@
         resources.database_instances.*.enable_readable_secondaries	bool	ALL
         resources.database_instances.*.id	string	INPUT
         resources.database_instances.*.lifecycle	resources.Lifecycle	INPUT
        -resources.database_instances.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.database_instances.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.database_instances.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.database_instances.*.lifecycle.prevent_destroy	bool	INPUT
         resources.database_instances.*.modified_status	string	INPUT
         resources.database_instances.*.name	string	ALL
        @@ -764,9 +740,6 @@
         resources.experiments.*.id	string	INPUT
         resources.experiments.*.last_update_time	int64	REMOTE
         resources.experiments.*.lifecycle	resources.Lifecycle	INPUT
        -resources.experiments.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.experiments.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.experiments.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.experiments.*.lifecycle.prevent_destroy	bool	INPUT
         resources.experiments.*.lifecycle_stage	string	REMOTE
         resources.experiments.*.modified_status	string	INPUT
        @@ -850,9 +823,6 @@
         resources.external_locations.*.id	string	INPUT
         resources.external_locations.*.isolation_mode	catalog.IsolationMode	REMOTE
         resources.external_locations.*.lifecycle	resources.Lifecycle	INPUT
        -resources.external_locations.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.external_locations.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.external_locations.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.external_locations.*.lifecycle.prevent_destroy	bool	INPUT
         resources.external_locations.*.metastore_id	string	REMOTE
         resources.external_locations.*.modified_status	string	INPUT
        @@ -958,9 +928,6 @@
         resources.features.*.inputs	[]string	ALL
         resources.features.*.inputs[*]	string	ALL
         resources.features.*.lifecycle	resources.Lifecycle	INPUT
        -resources.features.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.features.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.features.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.features.*.lifecycle.prevent_destroy	bool	INPUT
         resources.features.*.lineage_context	*ml.LineageContext	ALL
         resources.features.*.lineage_context.job_context	*ml.JobContext	ALL
        @@ -1000,15 +967,6 @@
         resources.features.*.source.request_source.flat_schema.fields[*]	ml.FieldDefinition	ALL
         resources.features.*.source.request_source.flat_schema.fields[*].data_type	ml.ScalarDataType	ALL
         resources.features.*.source.request_source.flat_schema.fields[*].name	string	ALL
        -resources.features.*.source.sdp_source	*ml.SdpSource	ALL
        -resources.features.*.source.sdp_source.dataframe_schema	string	ALL
        -resources.features.*.source.sdp_source.filter_condition	string	ALL
        -resources.features.*.source.sdp_source.input_tables	[]string	ALL
        -resources.features.*.source.sdp_source.input_tables[*]	string	ALL
        -resources.features.*.source.sdp_source.output_table	string	ALL
        -resources.features.*.source.sdp_source.pipeline_id	string	ALL
        -resources.features.*.source.sdp_source.pipeline_state	ml.SdpSourceState	ALL
        -resources.features.*.source.sdp_source.transformation_sql	string	ALL
         resources.features.*.source.stream_source	*ml.StreamSource	ALL
         resources.features.*.source.stream_source.dataframe_schema	string	ALL
         resources.features.*.source.stream_source.filter_condition	string	ALL
        @@ -1042,9 +1000,6 @@
         resources.genie_spaces.*.file_path	string	INPUT
         resources.genie_spaces.*.id	string	INPUT
         resources.genie_spaces.*.lifecycle	resources.Lifecycle	INPUT
        -resources.genie_spaces.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.genie_spaces.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.genie_spaces.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.genie_spaces.*.lifecycle.prevent_destroy	bool	INPUT
         resources.genie_spaces.*.modified_status	string	INPUT
         resources.genie_spaces.*.parent_path	string	ALL
        @@ -1089,9 +1044,6 @@
         resources.instance_pools.*.instance_pool_id	string	REMOTE
         resources.instance_pools.*.instance_pool_name	string	ALL
         resources.instance_pools.*.lifecycle	resources.Lifecycle	INPUT
        -resources.instance_pools.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.instance_pools.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.instance_pools.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.instance_pools.*.lifecycle.prevent_destroy	bool	INPUT
         resources.instance_pools.*.max_capacity	int	ALL
         resources.instance_pools.*.min_idle_instances	int	ALL
        @@ -1153,9 +1105,6 @@
         resources.job_runs.*.lifecycle	*dresources.JobRunLifecycleState	STATE
         resources.job_runs.*.lifecycle	*resources.JobRunLifecycle	INPUT
         resources.job_runs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.job_runs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.job_runs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.job_runs.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.job_runs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.job_runs.*.lifecycle.triggers	[]resources.JobRunTrigger	INPUT
         resources.job_runs.*.lifecycle.triggers[*]	resources.JobRunTrigger	INPUT
        @@ -1402,9 +1351,6 @@
         resources.jobs.*.job_clusters[*].serverless_compute_id	string	ALL
         resources.jobs.*.job_id	int64	REMOTE
         resources.jobs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.jobs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.jobs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.jobs.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.jobs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.jobs.*.max_concurrent_runs	int	ALL
         resources.jobs.*.modified_status	string	INPUT
        @@ -2405,9 +2351,6 @@
         resources.mcp_services.*.config.source_connection.options.*	string	ALL
         resources.mcp_services.*.id	string	INPUT
         resources.mcp_services.*.lifecycle	resources.Lifecycle	INPUT
        -resources.mcp_services.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.mcp_services.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.mcp_services.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.mcp_services.*.lifecycle.prevent_destroy	bool	INPUT
         resources.mcp_services.*.mcp_service_id	string	ALL
         resources.mcp_services.*.modified_status	string	INPUT
        @@ -2540,9 +2483,6 @@
         resources.model_provider_services.*.config.targets[*].native_api_types[*]	string	ALL
         resources.model_provider_services.*.id	string	INPUT
         resources.model_provider_services.*.lifecycle	resources.Lifecycle	INPUT
        -resources.model_provider_services.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.model_provider_services.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.model_provider_services.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.model_provider_services.*.lifecycle.prevent_destroy	bool	INPUT
         resources.model_provider_services.*.model_provider_service_id	string	ALL
         resources.model_provider_services.*.modified_status	string	INPUT
        @@ -2608,9 +2548,6 @@
         resources.model_services.*.config.routing.fallback.destinations[*].traffic_percentage	int	ALL
         resources.model_services.*.id	string	INPUT
         resources.model_services.*.lifecycle	resources.Lifecycle	INPUT
        -resources.model_services.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.model_services.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.model_services.*.lifecycle.depends_on[*].resource	string	INPUT
         resources.model_services.*.lifecycle.prevent_destroy	bool	INPUT
         resources.model_services.*.model_service_id	string	ALL
         resources.model_services.*.modified_status	string	INPUT
        @@ -3085,9 +3022,6 @@
... (228 more lines truncated, raise DATABRICKS_CLI_TEST_MAX_LOG to see more)

1 more failure details omitted, see the full report in the run.

@eng-dev-ecosystem-bot

eng-dev-ecosystem-bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: f35452b

Run: 40305398367

Env ✅​pass 🙈​skip Time
✅​ aws linux-2core-8gb 281 19 6:16
✅​ aws-windows-latest-4core-16gb 283 17 9:03
✅​ azure linux-2core-8gb 280 19 7:00
✅​ azure-windows-latest-4core-16gb 282 17 10:03
✅​ gcp linux-2core-8gb 281 19 6:48
✅​ gcp-windows-latest-4core-16gb 283 17 9:41
Top 6 slowest tests (at least 2 minutes):
duration env testname
9:57 azure-windows-latest-4core-16gb TestAccept
9:22 gcp-windows-latest-4core-16gb TestAccept
8:57 aws-windows-latest-4core-16gb TestAccept
4:06 azure linux-2core-8gb TestAccept
3:46 aws linux-2core-8gb TestAccept
3:45 gcp linux-2core-8gb TestAccept

@denik
denik force-pushed the denik/depends-on branch 2 times, most recently from 25ceaa6 to 9124e27 Compare October 20, 2026 13:07
@denik
denik changed the base branch from main to denik/resolve-key October 20, 2026 13:48
@denik
denik added this pull request to stack #7131 October 20, 2026 13:48
@denik
denik marked this pull request as ready for review October 20, 2026 14:06
@denik
denik requested review from a team as code owners October 20, 2026 14:06
Comment thread bundle/config/resources/lifecycle.go Outdated
// DependsOn is a single lifecycle.depends_on entry.
type DependsOn struct {
// Key of the resource to depend on: "foo" or "jobs.foo".
Node string `json:"node"`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Node is an internal name that isn't part of the configuration anywhere (yet).

I think "resource" fits better because it depends on a resource. If we later add dependencies on other things we can call them by their name too.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea, updated.

Base automatically changed from denik/resolve-key to main October 21, 2026 09:44
@denik
denik requested a review from a team as a code owner October 21, 2026 09:44
@denik
denik requested a review from pietern October 21, 2026 15:33
Comment on lines +10 to +12
depends_on:
- resource: z_job
- resource: pipelines.z_pipeline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

might be nice to be able to do this too:

Suggested change
depends_on:
- resource: z_job
- resource: pipelines.z_pipeline
depends_on:
- ${resources.jobs.y_job}
- resource: z_job
- resource: pipelines.z_pipeline

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why, what would it help with?

I find it confusing because according to our current $ references rules, it literally pastes the definition of y_job into depends_on block.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it literally pastes the definition of y_job into depends_on

ah, I didn't know we paste verbatim. then nvm.

why, what would it help with?

quickly see from looking at the yml what part of this is static vs dynamic content

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not sure what you mean -- it is static, the key of the resource we depend on is a literal.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

poor choice of words, not static vs static but maybe "belongs to the resource no matter what else changes" (its name; other lifecycle fields) vs "value may need to be changed due to changes external to this resource" (table name from another resource; key of another resource).

This is purely visual and of course

lifecycle:
  depends_on:
    - resources: jobs.foo # -> jobs.bar

vs

lifecycle:
  depends_on:
    - ${resources.jobs.foo} # -> ${resources.jobs.bar}

will require the exact same refactor if someone renames the key of (& rebinds) the depended-on resource.

I personally would just find the config easier to (re)view with a visual cue that this is a "special" value (a reference to a key, not just a string).

name: a_job
lifecycle:
depends_on:
- resource: z_job

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looking at this example I would conclude that z_job only works because it's under the same resources.jobs resource type and z_pipeline needs the pipeline. prefix. But I assume that's not true since we require unique keys. Can you add the other permutations (jobs.z_job and z_pipeline) as well?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see what you mean, I think it's fine like this because we don't implement resolution of these keys in this PR, it's standard since #7128

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's standard since #7128

but that PR didn't add acceptance test coverage for that behaviour. I find these example databricks.yml always give a good insight into currently supported behaviour. Would be great to add some (can be a follow-up PR)

func (*lifecycleDependsOn) Apply(_ context.Context, b *bundle.Bundle) diag.Diagnostics {
var diags diag.Diagnostics

pattern := dyn.NewPattern(dyn.Key("resources"), dyn.AnyKey(), dyn.AnyKey(), dyn.Key("lifecycle"), dyn.Key("depends_on"))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You seem to remove dyn usage in separate PR, shall we make this implementation without dyn lib then?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can, good idea.

denik and others added 2 commits October 26, 2026 11:55
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
@denik
denik enabled stacked auto-merge October 26, 2026 10:56
Co-authored-by: Isaac <no-reply@databricks.com>
@denik
denik disabled stacked auto-merge October 26, 2026 11:11
@denik
denik merged commit bf9e27b into main Oct 26, 2026
29 of 30 checks passed
@denik
denik deleted the denik/depends-on branch October 26, 2026 11:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

DABs DABs related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants