From 623548592a2223565219c08ad4166b4ec3439a99 Mon Sep 17 00:00:00 2001 From: Andrew Nester Date: Thu, 16 Apr 2026 12:58:45 +0200 Subject: [PATCH 1/3] direct: Fixed permanent drift in sql warehouses caused by creator_name field --- .../creator-name-no-drift/databricks.yml | 12 +++++++++ .../creator-name-no-drift/out.test.toml | 6 +++++ .../creator-name-no-drift/output.txt | 27 +++++++++++++++++++ .../creator-name-no-drift/script | 11 ++++++++ .../creator-name-no-drift/test.toml | 10 +++++++ .../bundle/resources/sql_warehouses/script | 2 ++ bundle/direct/dresources/resources.yml | 4 +++ 7 files changed, 72 insertions(+) create mode 100644 acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/databricks.yml create mode 100644 acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/out.test.toml create mode 100644 acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/output.txt create mode 100644 acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/script create mode 100644 acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/test.toml diff --git a/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/databricks.yml b/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/databricks.yml new file mode 100644 index 0000000000..91ca320468 --- /dev/null +++ b/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/databricks.yml @@ -0,0 +1,12 @@ +bundle: + name: creator_name_no_drift + +resources: + sql_warehouses: + example_sql_warehouse: + name: "example_sql_warehouse" + cluster_size: 2X-Small + max_num_clusters: 1 + auto_stop_mins: 10 + enable_serverless_compute: true + spot_instance_policy: COST_OPTIMIZED diff --git a/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/out.test.toml b/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/out.test.toml new file mode 100644 index 0000000000..2f151db822 --- /dev/null +++ b/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/out.test.toml @@ -0,0 +1,6 @@ +Local = true +Cloud = true +CloudSlow = false + +[EnvMatrix] + DATABRICKS_BUNDLE_ENGINE = ["direct"] diff --git a/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/output.txt b/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/output.txt new file mode 100644 index 0000000000..65f3d9b0b0 --- /dev/null +++ b/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/output.txt @@ -0,0 +1,27 @@ + +>>> [CLI] bundle deploy +Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/creator_name_no_drift/default/files... +Deploying resources... +Updating deployment state... +Deployment complete! + +>>> [CLI] bundle plan +Plan: 0 to add, 0 to change, 0 to delete, 1 unchanged + +>>> [CLI] bundle plan -o json + +>>> jq .plan["resources.sql_warehouses.example_sql_warehouse"].changes.creator_name out.plan.json +{ + "action": "skip", + "reason": "managed", + "remote": "[USERNAME]" +} + +>>> [CLI] bundle destroy --auto-approve +The following resources will be deleted: + delete resources.sql_warehouses.example_sql_warehouse + +All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/creator_name_no_drift/default + +Deleting files... +Destroy complete! diff --git a/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/script b/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/script new file mode 100644 index 0000000000..20c3f4d08c --- /dev/null +++ b/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/script @@ -0,0 +1,11 @@ +cleanup() { + trace $CLI bundle destroy --auto-approve +} +trap cleanup EXIT + +trace $CLI bundle deploy +trace $CLI bundle plan +trace $CLI bundle plan -o json > out.plan.json + +trace jq '.plan["resources.sql_warehouses.example_sql_warehouse"].changes.creator_name' out.plan.json +rm out.plan.json diff --git a/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/test.toml b/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/test.toml new file mode 100644 index 0000000000..78288d1a15 --- /dev/null +++ b/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/test.toml @@ -0,0 +1,10 @@ +Local = true +Cloud = true +RecordRequests = false + +Ignore = [ + "databricks.yml", +] + +[EnvMatrix] + DATABRICKS_BUNDLE_ENGINE = ["direct"] diff --git a/acceptance/bundle/resources/sql_warehouses/script b/acceptance/bundle/resources/sql_warehouses/script index b1d488f36d..dc50f8a96e 100644 --- a/acceptance/bundle/resources/sql_warehouses/script +++ b/acceptance/bundle/resources/sql_warehouses/script @@ -9,6 +9,7 @@ cleanup() { } trap cleanup EXIT trace $CLI bundle deploy +trace $CLI bundle plan title "Verify the create request" trace jq 'select(.method == "POST" and (.path | contains("/sql/warehouses")))' out.requests.txt @@ -18,6 +19,7 @@ trace $CLI bundle summary title "Update the warehouse name" trace update_file.py databricks.yml sql_warehouse_name sql_warehouse_name_2 trace $CLI bundle deploy +trace $CLI bundle plan title "Verify the update request" trace jq 'select(.method == "POST" and (.path | contains("/sql/warehouses")) and (.body."name" == "sql_warehouse_name_2")) | del(.body.creator_name, .body.warehouse_type)' out.requests.txt diff --git a/bundle/direct/dresources/resources.yml b/bundle/direct/dresources/resources.yml index 51a8f7b8a2..9d1b38079b 100644 --- a/bundle/direct/dresources/resources.yml +++ b/bundle/direct/dresources/resources.yml @@ -474,6 +474,10 @@ resources: - field: min_num_clusters reason: managed + # creator_name is immutable, can't be updated via API + - field: creator_name + reason: managed + backend_defaults: # https://github.com/databricks/terraform-provider-databricks/blob/4eba541abe1a9f50993ea7b9dd83874207e224a1/sql/resource_sql_endpoint.go#L69 # m["enable_serverless_compute"].Computed = true From 6e9fdfddeb52df30f7f00daa80d0dc4dcd877d79 Mon Sep 17 00:00:00 2001 From: Andrew Nester Date: Thu, 16 Apr 2026 14:09:26 +0200 Subject: [PATCH 2/3] moved to invariant test --- .../bundle/invariant/no_drift/out.test.toml | 2 +- acceptance/bundle/invariant/test.toml | 1 + .../creator-name-no-drift/databricks.yml | 12 --------- .../creator-name-no-drift/out.test.toml | 6 ----- .../creator-name-no-drift/output.txt | 27 ------------------- .../creator-name-no-drift/script | 11 -------- .../creator-name-no-drift/test.toml | 10 ------- 7 files changed, 2 insertions(+), 67 deletions(-) delete mode 100644 acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/databricks.yml delete mode 100644 acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/out.test.toml delete mode 100644 acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/output.txt delete mode 100644 acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/script delete mode 100644 acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/test.toml diff --git a/acceptance/bundle/invariant/no_drift/out.test.toml b/acceptance/bundle/invariant/no_drift/out.test.toml index 7abd75f42e..ee077bbb16 100644 --- a/acceptance/bundle/invariant/no_drift/out.test.toml +++ b/acceptance/bundle/invariant/no_drift/out.test.toml @@ -4,4 +4,4 @@ RequiresUnityCatalog = true [EnvMatrix] DATABRICKS_BUNDLE_ENGINE = ["direct"] - INPUT_CONFIG = ["alert.yml.tmpl", "app.yml.tmpl", "catalog.yml.tmpl", "cluster.yml.tmpl", "dashboard.yml.tmpl", "database_catalog.yml.tmpl", "database_instance.yml.tmpl", "experiment.yml.tmpl", "external_location.yml.tmpl", "job.yml.tmpl", "job_pydabs_10_tasks.yml.tmpl", "job_pydabs_1000_tasks.yml.tmpl", "job_cross_resource_ref.yml.tmpl", "job_permission_ref.yml.tmpl", "job_with_permissions.yml.tmpl", "job_with_task.yml.tmpl", "model.yml.tmpl", "model_with_permissions.yml.tmpl", "model_serving_endpoint.yml.tmpl", "pipeline.yml.tmpl", "pipeline_config_dots.yml.tmpl", "postgres_branch.yml.tmpl", "postgres_endpoint.yml.tmpl", "postgres_project.yml.tmpl", "registered_model.yml.tmpl", "schema.yml.tmpl", "schema_grant_ref.yml.tmpl", "schema_with_grants.yml.tmpl", "secret_scope.yml.tmpl", "secret_scope_default_backend_type.yml.tmpl", "secret_scope_with_permissions.yml.tmpl", "synced_database_table.yml.tmpl", "volume.yml.tmpl"] + INPUT_CONFIG = ["alert.yml.tmpl", "app.yml.tmpl", "catalog.yml.tmpl", "cluster.yml.tmpl", "dashboard.yml.tmpl", "database_catalog.yml.tmpl", "database_instance.yml.tmpl", "experiment.yml.tmpl", "external_location.yml.tmpl", "job.yml.tmpl", "job_pydabs_10_tasks.yml.tmpl", "job_pydabs_1000_tasks.yml.tmpl", "job_cross_resource_ref.yml.tmpl", "job_permission_ref.yml.tmpl", "job_with_permissions.yml.tmpl", "job_with_task.yml.tmpl", "model.yml.tmpl", "model_with_permissions.yml.tmpl", "model_serving_endpoint.yml.tmpl", "pipeline.yml.tmpl", "pipeline_config_dots.yml.tmpl", "postgres_branch.yml.tmpl", "postgres_endpoint.yml.tmpl", "postgres_project.yml.tmpl", "registered_model.yml.tmpl", "schema.yml.tmpl", "schema_grant_ref.yml.tmpl", "schema_with_grants.yml.tmpl", "secret_scope.yml.tmpl", "secret_scope_default_backend_type.yml.tmpl", "secret_scope_with_permissions.yml.tmpl", "sql_warehouse.yml.tmpl", "synced_database_table.yml.tmpl", "volume.yml.tmpl"] diff --git a/acceptance/bundle/invariant/test.toml b/acceptance/bundle/invariant/test.toml index 85b2defc92..2861b71fe0 100644 --- a/acceptance/bundle/invariant/test.toml +++ b/acceptance/bundle/invariant/test.toml @@ -52,6 +52,7 @@ EnvMatrix.INPUT_CONFIG = [ "secret_scope.yml.tmpl", "secret_scope_default_backend_type.yml.tmpl", "secret_scope_with_permissions.yml.tmpl", + "sql_warehouse.yml.tmpl", "synced_database_table.yml.tmpl", "volume.yml.tmpl", ] diff --git a/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/databricks.yml b/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/databricks.yml deleted file mode 100644 index 91ca320468..0000000000 --- a/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/databricks.yml +++ /dev/null @@ -1,12 +0,0 @@ -bundle: - name: creator_name_no_drift - -resources: - sql_warehouses: - example_sql_warehouse: - name: "example_sql_warehouse" - cluster_size: 2X-Small - max_num_clusters: 1 - auto_stop_mins: 10 - enable_serverless_compute: true - spot_instance_policy: COST_OPTIMIZED diff --git a/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/out.test.toml b/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/out.test.toml deleted file mode 100644 index 2f151db822..0000000000 --- a/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/out.test.toml +++ /dev/null @@ -1,6 +0,0 @@ -Local = true -Cloud = true -CloudSlow = false - -[EnvMatrix] - DATABRICKS_BUNDLE_ENGINE = ["direct"] diff --git a/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/output.txt b/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/output.txt deleted file mode 100644 index 65f3d9b0b0..0000000000 --- a/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/output.txt +++ /dev/null @@ -1,27 +0,0 @@ - ->>> [CLI] bundle deploy -Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/creator_name_no_drift/default/files... -Deploying resources... -Updating deployment state... -Deployment complete! - ->>> [CLI] bundle plan -Plan: 0 to add, 0 to change, 0 to delete, 1 unchanged - ->>> [CLI] bundle plan -o json - ->>> jq .plan["resources.sql_warehouses.example_sql_warehouse"].changes.creator_name out.plan.json -{ - "action": "skip", - "reason": "managed", - "remote": "[USERNAME]" -} - ->>> [CLI] bundle destroy --auto-approve -The following resources will be deleted: - delete resources.sql_warehouses.example_sql_warehouse - -All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/creator_name_no_drift/default - -Deleting files... -Destroy complete! diff --git a/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/script b/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/script deleted file mode 100644 index 20c3f4d08c..0000000000 --- a/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/script +++ /dev/null @@ -1,11 +0,0 @@ -cleanup() { - trace $CLI bundle destroy --auto-approve -} -trap cleanup EXIT - -trace $CLI bundle deploy -trace $CLI bundle plan -trace $CLI bundle plan -o json > out.plan.json - -trace jq '.plan["resources.sql_warehouses.example_sql_warehouse"].changes.creator_name' out.plan.json -rm out.plan.json diff --git a/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/test.toml b/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/test.toml deleted file mode 100644 index 78288d1a15..0000000000 --- a/acceptance/bundle/resources/sql_warehouses/creator-name-no-drift/test.toml +++ /dev/null @@ -1,10 +0,0 @@ -Local = true -Cloud = true -RecordRequests = false - -Ignore = [ - "databricks.yml", -] - -[EnvMatrix] - DATABRICKS_BUNDLE_ENGINE = ["direct"] From 3450a2d852cc900efa6f03b82ba07819f60d41ef Mon Sep 17 00:00:00 2001 From: Andrew Nester Date: Thu, 16 Apr 2026 14:10:03 +0200 Subject: [PATCH 3/3] remove plan --- acceptance/bundle/resources/sql_warehouses/script | 2 -- 1 file changed, 2 deletions(-) diff --git a/acceptance/bundle/resources/sql_warehouses/script b/acceptance/bundle/resources/sql_warehouses/script index dc50f8a96e..b1d488f36d 100644 --- a/acceptance/bundle/resources/sql_warehouses/script +++ b/acceptance/bundle/resources/sql_warehouses/script @@ -9,7 +9,6 @@ cleanup() { } trap cleanup EXIT trace $CLI bundle deploy -trace $CLI bundle plan title "Verify the create request" trace jq 'select(.method == "POST" and (.path | contains("/sql/warehouses")))' out.requests.txt @@ -19,7 +18,6 @@ trace $CLI bundle summary title "Update the warehouse name" trace update_file.py databricks.yml sql_warehouse_name sql_warehouse_name_2 trace $CLI bundle deploy -trace $CLI bundle plan title "Verify the update request" trace jq 'select(.method == "POST" and (.path | contains("/sql/warehouses")) and (.body."name" == "sql_warehouse_name_2")) | del(.body.creator_name, .body.warehouse_type)' out.requests.txt