Skip to content

Conversation

@denik
Copy link
Contributor

@denik denik commented Feb 11, 2026

Changes

  • Add new backend_default setting in resources.yml that allows configuring known server defaults for given field patterns.
  • Port config for backend_default and ignore_remote_changes from terraform.

Why

The "server_side_default" assumes that any setting appearing in the remote state that is not in the config should be ignored. This works when resources are only edited via DABs. However, if we need bundle plan to detect remote changes, this can ignore too much.

Tests

Existing tests.

@denik denik temporarily deployed to test-trigger-is February 11, 2026 11:07 — with GitHub Actions Inactive
@eng-dev-ecosystem-bot
Copy link
Collaborator

eng-dev-ecosystem-bot commented Feb 11, 2026

Commit: 8795ceb

Run: 21915324821

Env ❌​FAIL 🟨​KNOWN 🔄​flaky 💚​RECOVERED 🙈​SKIP ✅​pass 🙈​skip Time
🟨​ aws linux 7 1 7 451 732 26:20
🟨​ aws windows 7 1 7 417 742 21:33
❌​ aws-ucws linux 1 1 2 11 5 703 585 64:50
❌​ aws-ucws windows 1 1 11 5 668 596 65:14
💚​ azure linux 2 9 451 731 23:41
💚​ azure windows 2 9 417 741 22:54
🔄​ azure-ucws linux 2 6 7 666 596 60:23
🔄​ azure-ucws windows 3 5 7 629 607 59:04
💚​ gcp linux 2 9 440 737 23:11
💚​ gcp windows 2 9 406 747 22:23
24 interesting tests: 7 KNOWN, 6 flaky, 5 SKIP, 5 RECOVERED, 1 FAIL
Test Name aws linux aws windows aws-ucws linux aws-ucws windows azure linux azure windows azure-ucws linux azure-ucws windows gcp linux gcp windows
🟨​ TestAccept 🟨​K 🟨​K 🟨​K 🟨​K 💚​R 💚​R 💚​R 🔄​f 💚​R 💚​R
🙈​ TestAccept/bundle/deployment/bind/alert 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/generate/alert 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🔄​ TestAccept/bundle/invariant/migrate 🙈​s 🙈​s ✅​p ✅​p 🙈​s 🙈​s ✅​p 🔄​f 🙈​s 🙈​s
🔄​ TestAccept/bundle/invariant/migrate/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=synced_database_table.yml.tmpl ✅​p ✅​p ✅​p 🔄​f
💚​ TestAccept/bundle/invariant/no_drift 🙈​S 🙈​S 💚​R 💚​R 🙈​S 🙈​S 💚​R 💚​R 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/alerts/basic 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/alerts/with_file 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/permissions 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🟨​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions 🟨​K 🟨​K 💚​R 💚​R 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🟨​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=direct 🟨​K 🟨​K 💚​R 💚​R
🟨​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=terraform 🟨​K 🟨​K 💚​R 💚​R
🟨​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions 🟨​K 🟨​K 💚​R 💚​R 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🟨​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=direct 🟨​K 🟨​K 💚​R 💚​R
🟨​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=terraform 🟨​K 🟨​K 💚​R 💚​R
🔄​ TestAccept/bundle/resources/postgres_endpoints/basic 🙈​s 🙈​s 🔄​f ✅​p 🙈​s 🙈​s 🙈​s 🙈​s 🙈​s 🙈​s
🔄​ TestAccept/bundle/resources/postgres_endpoints/basic/DATABRICKS_BUNDLE_ENGINE=terraform 🔄​f ✅​p
❌​ TestAccept/bundle/resources/postgres_endpoints/recreate 🙈​s 🙈​s ❌​F ❌​F 🙈​s 🙈​s 🙈​s 🙈​s 🙈​s 🙈​s
💚​ TestAccept/bundle/resources/synced_database_tables/basic 🙈​S 🙈​S 💚​R 💚​R 🙈​S 🙈​S 💚​R 💚​R 🙈​S 🙈​S
💚​ TestAccept/bundle/resources/synced_database_tables/basic/DATABRICKS_BUNDLE_ENGINE=direct 💚​R 💚​R 💚​R 💚​R
💚​ TestAccept/bundle/resources/synced_database_tables/basic/DATABRICKS_BUNDLE_ENGINE=terraform 💚​R 💚​R 💚​R 💚​R
💚​ TestAccept/ssh/connection 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R
🔄​ TestFilerRecursiveDelete ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p 🔄​f ✅​p ✅​p ✅​p
🔄​ TestFilerRecursiveDelete/files 🙈​s 🙈​s ✅​p ✅​p 🙈​s 🙈​s 🔄​f ✅​p 🙈​s 🙈​s
Top 50 slowest tests (at least 2 minutes):
duration env testname
9:42 azure-ucws windows TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=synced_database_table.yml.tmpl
9:31 aws-ucws windows TestAccept/bundle/resources/synced_database_tables/basic/DATABRICKS_BUNDLE_ENGINE=direct
9:18 aws-ucws windows TestAccept/bundle/resources/synced_database_tables/basic/DATABRICKS_BUNDLE_ENGINE=terraform
8:57 azure-ucws linux TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
8:14 azure-ucws linux TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
7:40 aws-ucws linux TestAccept/bundle/resources/synced_database_tables/basic/DATABRICKS_BUNDLE_ENGINE=terraform
7:25 azure-ucws windows TestAccept/bundle/invariant/migrate/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=database_instance.yml.tmpl
7:11 aws-ucws windows TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=synced_database_table.yml.tmpl
7:10 aws-ucws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=database_instance.yml.tmpl
6:49 aws-ucws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=synced_database_table.yml.tmpl
6:41 gcp linux TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
6:38 aws-ucws linux TestAccept/bundle/invariant/migrate/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=synced_database_table.yml.tmpl
6:30 aws-ucws linux TestAccept/bundle/resources/synced_database_tables/basic/DATABRICKS_BUNDLE_ENGINE=direct
6:26 aws-ucws linux TestAccept/bundle/invariant/migrate/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=database_instance.yml.tmpl
6:05 aws-ucws windows TestAccept/bundle/invariant/migrate/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=synced_database_table.yml.tmpl
6:03 aws-ucws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=database_catalog.yml.tmpl
6:01 aws-ucws windows TestAccept/bundle/invariant/migrate/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=database_instance.yml.tmpl
6:00 azure-ucws windows TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=database_instance.yml.tmpl
5:58 aws-ucws windows TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=database_instance.yml.tmpl
5:58 aws-ucws linux TestAccept/bundle/invariant/migrate/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=database_catalog.yml.tmpl
5:39 aws-ucws windows TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=database_catalog.yml.tmpl
5:28 aws-ucws windows TestAccept/bundle/invariant/migrate/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=database_catalog.yml.tmpl
5:28 aws linux TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
5:24 aws linux TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
5:16 gcp windows TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
5:11 gcp linux TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
5:09 gcp windows TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
4:58 azure-ucws windows TestAccept/bundle/invariant/migrate/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=synced_database_table.yml.tmpl
4:56 azure windows TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
4:55 azure-ucws windows TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
4:17 azure-ucws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=synced_database_table.yml.tmpl
4:14 gcp linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
4:02 azure windows TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
3:48 azure-ucws windows TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=database_catalog.yml.tmpl
3:47 gcp windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
3:46 azure-ucws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=database_catalog.yml.tmpl
3:39 azure-ucws linux TestAccept/bundle/resources/synced_database_tables/basic/DATABRICKS_BUNDLE_ENGINE=terraform
3:37 azure-ucws windows TestAccept/bundle/invariant/migrate/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=database_catalog.yml.tmpl
3:36 azure-ucws linux TestAccept/bundle/invariant/migrate/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=synced_database_table.yml.tmpl
3:29 aws-ucws windows TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
3:25 aws-ucws linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
3:23 azure-ucws windows TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
3:21 gcp windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
3:20 azure-ucws linux TestAccept/bundle/resources/synced_database_tables/basic/DATABRICKS_BUNDLE_ENGINE=direct
3:08 gcp linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:58 aws windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:57 azure-ucws windows TestAccept/bundle/resources/synced_database_tables/basic/DATABRICKS_BUNDLE_ENGINE=direct
2:57 aws-ucws linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:56 aws linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:53 azure-ucws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=database_instance.yml.tmpl

@denik denik force-pushed the denik/patterns-resource-config branch from 70c35f1 to 2fb9d43 Compare February 11, 2026 12:03
Base automatically changed from denik/patterns-resource-config to main February 11, 2026 12:33
@denik denik force-pushed the denik/backend_defaults branch from 88e8d44 to 4aaf27c Compare February 11, 2026 12:54
@denik denik temporarily deployed to test-trigger-is February 11, 2026 12:55 — with GitHub Actions Inactive
@denik denik force-pushed the denik/backend_defaults branch from 4aaf27c to 3dc1550 Compare February 11, 2026 12:55
@denik denik temporarily deployed to test-trigger-is February 11, 2026 12:56 — with GitHub Actions Inactive
@denik denik temporarily deployed to test-trigger-is February 11, 2026 12:57 — with GitHub Actions Inactive
@denik denik changed the base branch from main to denik/empty February 11, 2026 12:59
@denik denik temporarily deployed to test-trigger-is February 11, 2026 13:01 — with GitHub Actions Inactive
denik added a commit that referenced this pull request Feb 11, 2026
…#4491)

## Changes
New "empty" reason in plan triggers when old/new & remote values are all
either nil or zero or empty slice/map.

## Why
Ignoring differences like nil vs "" and nil vs 0 reduces drift when
backend has preferred representation. For example,
model_serving_endpoints.description is converted from nil to "" by
backend. jobs.timeout_seconds has a default 0.

This supports removing server_side_default rule which currently marks
this changes as "skip". #4490

## Tests
Existing tests.
Base automatically changed from denik/empty to main February 11, 2026 15:12
denik and others added 10 commits February 11, 2026 16:13
Adds a new `backend_defaults` rule type that skips changes where old/new
are nil but remote is set, constrained to specific field patterns and
optionally to specific allowed values. Values use json.RawMessage to
support type-accurate comparison against the remote state.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ouses

Each entry references the corresponding Terraform provider default with
a link to the source and the exact line that sets the default.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Based on analysis of Terraform provider (commit 4eba541):
- clusters: ignore aws/azure/gcp_attributes (SetSuppressDiff),
  enable_elastic_disk (SetComputed)
- sql_warehouses: ignore channel, tags, warehouse_type (SetSuppressDiff)
- model_serving_endpoints: ignore config.traffic_config (SetComputed +
  SuppressDiff on routes); backend_defaults for served_entities name/
  workload_type and auto_capture_config.enabled (SetComputed)
- dashboards: backend_defaults for embed_credentials=true (SetDefault)
- apps: backend_defaults for compute_size (SetComputed)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…efaults

The generic catch-all rule that marked all remote-only fields as
server_side_default is replaced with explicit backend_defaults entries
for each resource type. This makes field handling explicit and auditable.

New backend_defaults entries:
- jobs: timeout_seconds, tasks[*].timeout_seconds, tasks[*].notebook_task.source,
  tasks[*].new_cluster.data_security_mode, job_clusters[*].new_cluster.data_security_mode
- pipelines: storage, root_path
- model_serving_endpoints: route_optimized
- registered_models: storage_location, owner, full_name, metastore_id
  (plus ignore_remote_changes for created_at/by, updated_at/by)
- volumes: storage_location

Also removes the server_side_default special case in configsync/diff.go
(per existing TODO) and the ReasonServerSideDefault constant.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@denik denik force-pushed the denik/backend_defaults branch from e2ec42e to 7626cbd Compare February 11, 2026 15:13
@denik denik temporarily deployed to test-trigger-is February 11, 2026 15:14 — with GitHub Actions Inactive
@denik denik temporarily deployed to test-trigger-is February 11, 2026 15:30 — with GitHub Actions Inactive
…aults

Cross-referenced terraform-provider-databricks source (SetComputed,
SetSuppressDiff, SetForceNew) against resources.yml to fix gaps.

Added backend_defaults (SetComputed/SetSuppressDiff — backend-set fields):
- clusters: enable_local_disk_encryption, node_type_id, driver_node_type_id,
  driver_instance_pool_id
- jobs: run_as, spark_python_task.source, sql_task.file.source,
  dbt_task.source (+ for_each_task variants for all), new_cluster computed
  fields matching clusters
- pipelines: event_log.catalog, event_log.schema, cluster computed fields
- sql_warehouses: enable_serverless_compute
- experiments: artifact_location

Added ignore_remote_changes:
- sql_warehouses: min_num_clusters (SetSuppressDiff)
- quality_monitors: skip_builtin_dashboard (not returned by API)

Added recreate_on_changes:
- pipelines: gateway_definition.{connection_id,connection_name,
  gateway_storage_catalog,gateway_storage_schema},
  ingestion_definition.ingest_from_uc_foreign_catalog

Removed dead backend_defaults — these are TF client-side SetDefault()
values already applied by resource_mutator.go, so the field is never nil
and backend_defaults (which triggers on old=nil AND new=nil) never fires:
- jobs: max_concurrent_runs, schedule/trigger/continuous.pause_status
- pipelines: edition, channel
- dashboards: embed_credentials (also had wrong value: yml said true,
  mutator sets false)
- clusters: autotermination_minutes
- sql_warehouses: auto_stop_mins, enable_photon, max_num_clusters,
  spot_instance_policy

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@denik denik temporarily deployed to test-trigger-is February 11, 2026 17:10 — with GitHub Actions Inactive
@denik denik temporarily deployed to test-trigger-is February 11, 2026 17:18 — with GitHub Actions Inactive
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants