Skip to content

Replace server_side_default with backend_default#4490

Open
denik wants to merge 17 commits intomainfrom
denik/backend_defaults
Open

Replace server_side_default with backend_default#4490
denik wants to merge 17 commits intomainfrom
denik/backend_defaults

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 updated via DABs "bundle deploy" but it can miss real drift.

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: 4611e58

Run: 22138279262

Env ❌​FAIL 🟨​KNOWN 💚​RECOVERED 🙈​SKIP ✅​pass 🙈​skip Time
❌​ aws linux 6 1 1 6 268 763 6:55
💚​ aws-ucws linux 2 6 370 679 6:23
💚​ azure linux 2 6 271 763 6:07
💚​ azure windows 2 6 273 761 5:21
💚​ azure-ucws linux 2 6 369 677 7:47
💚​ gcp linux 2 6 267 766 5:34
💚​ gcp windows 2 6 269 764 4:54
14 interesting tests: 6 FAIL, 6 SKIP, 1 KNOWN, 1 RECOVERED
Test Name aws linux aws-ucws linux azure linux azure windows azure-ucws linux gcp linux gcp windows
🟨​ TestAccept 🟨​K 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R
❌​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions ❌​F ✅​p 🙈​s 🙈​s 🙈​s 🙈​s 🙈​s
❌​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=direct ❌​F ✅​p
❌​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=terraform ❌​F ✅​p
❌​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions ❌​F ✅​p 🙈​s 🙈​s 🙈​s 🙈​s 🙈​s
❌​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=direct ❌​F ✅​p
❌​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=terraform ❌​F ✅​p
🙈​ TestAccept/bundle/resources/postgres_branches/basic 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/postgres_branches/recreate 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/postgres_branches/update_protected 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/postgres_branches/without_branch_id 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/postgres_endpoints/recreate 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/synced_database_tables/basic 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
💚​ TestAccept/ssh/connection 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R
Top 14 slowest tests (at least 2 minutes):
duration env testname
3:21 azure-ucws linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
3:13 gcp windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
3:11 gcp linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
3:09 gcp windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
3:08 gcp linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:54 aws-ucws linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:52 aws linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:48 aws linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:39 azure windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:38 aws-ucws linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:17 azure linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:17 azure windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:12 azure-ucws linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:08 azure linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct

@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 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
@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
@denik denik force-pushed the denik/backend_defaults branch from 8795ceb to 614ee77 Compare February 12, 2026 10:47
@denik denik temporarily deployed to test-trigger-is February 12, 2026 10:47 — with GitHub Actions Inactive
@denik denik force-pushed the denik/backend_defaults branch from 614ee77 to c31e636 Compare February 12, 2026 11:07
@denik denik temporarily deployed to test-trigger-is February 12, 2026 11:08 — with GitHub Actions Inactive
denik and others added 6 commits February 18, 2026 12:07
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 and others added 7 commits February 18, 2026 12:07
…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 force-pushed the denik/backend_defaults branch from c31e636 to 2d50de6 Compare February 18, 2026 11:08
@denik denik temporarily deployed to test-trigger-is February 18, 2026 11:09 — with GitHub Actions Inactive
@denik denik temporarily deployed to test-trigger-is February 18, 2026 11:20 — with GitHub Actions Inactive
path: /Users/{{workspace_user_name}}/notebook
+ tags:
+ foo: bar
+ root_path: ./pipeline_root
Copy link
Contributor Author

Choose a reason for hiding this comment

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

root_path is "backend_default" so it's lost there. cc @ilyakuz-db

@denik denik temporarily deployed to test-trigger-is February 18, 2026 11:30 — with GitHub Actions Inactive
@denik denik marked this pull request as ready for review February 18, 2026 11:31
@denik denik temporarily deployed to test-trigger-is February 18, 2026 11:38 — with GitHub Actions Inactive
@denik denik temporarily deployed to test-trigger-is February 18, 2026 11:41 — 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