From cdc80c7c448e10cc5751293ac9f33c73e88099b0 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Tue, 14 Apr 2026 12:32:17 +0000 Subject: [PATCH 01/25] Integrate deployment metadata service for server-side locking and state Add server-side deployment locking and state management via the Deployment Metadata Service (DMS), gated behind DATABRICKS_BUNDLE_MANAGED_STATE=true. Key changes: - DeploymentLock interface with factory (DMS or filesystem based on env) - DMS lock: version-based locking with heartbeat, operation reporting - State read/write via ListResources/CreateOperation with per-resource state - withDeploymentLock helper extracts lock boilerplate from deploy/destroy - Temporary DMS client (libs/tmpdms) mirroring future SDK-generated code - Mock DMS server for acceptance tests - 6 acceptance tests covering deploy, destroy, plan, summary, sequential deploys, and adding resources with remote state Co-authored-by: Isaac --- .../bundle/dms/add-resources/databricks.yml | 7 + .../bundle/dms/add-resources/out.requests.txt | 143 ++++++ .../bundle/dms/add-resources/out.test.toml | 6 + .../bundle/dms/add-resources/output.txt | 151 +++++++ acceptance/bundle/dms/add-resources/script | 33 ++ acceptance/bundle/dms/add-resources/test.toml | 1 + acceptance/bundle/dms/databricks.yml | 7 + .../bundle/dms/deploy-error/databricks.yml | 7 + .../bundle/dms/deploy-error/out.test.toml | 6 + acceptance/bundle/dms/deploy-error/output.txt | 60 +++ acceptance/bundle/dms/deploy-error/script | 5 + acceptance/bundle/dms/deploy-error/test.toml | 8 + acceptance/bundle/dms/out.test.toml | 6 + acceptance/bundle/dms/output.txt | 137 ++++++ .../dms/plan-and-summary/databricks.yml | 7 + .../dms/plan-and-summary/out.requests.txt | 116 +++++ .../bundle/dms/plan-and-summary/out.test.toml | 6 + .../bundle/dms/plan-and-summary/output.txt | 98 +++++ acceptance/bundle/dms/plan-and-summary/script | 15 + .../dms/release-lock-error/databricks.yml | 11 + .../dms/release-lock-error/out.test.toml | 6 + .../bundle/dms/release-lock-error/output.txt | 68 +++ .../bundle/dms/release-lock-error/script | 8 + .../bundle/dms/release-lock-error/test.toml | 2 + acceptance/bundle/dms/script | 11 + .../dms/sequential-deploys/databricks.yml | 7 + .../dms/sequential-deploys/out.test.toml | 6 + .../bundle/dms/sequential-deploys/output.txt | 161 +++++++ .../bundle/dms/sequential-deploys/script | 7 + acceptance/bundle/dms/test.toml | 4 + bundle/bundle.go | 32 ++ bundle/deploy/lock/acquire.go | 69 --- .../lock/deployment_metadata_service.go | 380 ++++++++++++++++ .../lock/deployment_metadata_service_test.go | 54 +++ bundle/deploy/lock/lock.go | 62 +++ bundle/deploy/lock/release.go | 58 --- bundle/deploy/lock/workspace_filesystem.go | 66 +++ bundle/deployplan/plan.go | 12 +- bundle/direct/bundle_apply.go | 36 +- bundle/direct/bundle_plan.go | 2 + bundle/direct/pkg.go | 18 + bundle/env/deployment_metadata.go | 15 + bundle/phases/bind.go | 20 +- bundle/phases/deploy.go | 34 +- bundle/phases/destroy.go | 19 +- bundle/statemgmt/resources_json.go | 7 + bundle/statemgmt/state_pull.go | 40 ++ bundle/statemgmt/state_push.go | 9 + cmd/bundle/utils/process.go | 38 +- libs/testserver/deployment_metadata.go | 415 ++++++++++++++++++ libs/testserver/fake_workspace.go | 3 + libs/testserver/handlers.go | 38 ++ libs/testserver/server.go | 2 +- libs/tmpdms/api.go | 143 ++++++ libs/tmpdms/types.go | 226 ++++++++++ 55 files changed, 2727 insertions(+), 181 deletions(-) create mode 100644 acceptance/bundle/dms/add-resources/databricks.yml create mode 100644 acceptance/bundle/dms/add-resources/out.requests.txt create mode 100644 acceptance/bundle/dms/add-resources/out.test.toml create mode 100644 acceptance/bundle/dms/add-resources/output.txt create mode 100644 acceptance/bundle/dms/add-resources/script create mode 100644 acceptance/bundle/dms/add-resources/test.toml create mode 100644 acceptance/bundle/dms/databricks.yml create mode 100644 acceptance/bundle/dms/deploy-error/databricks.yml create mode 100644 acceptance/bundle/dms/deploy-error/out.test.toml create mode 100644 acceptance/bundle/dms/deploy-error/output.txt create mode 100644 acceptance/bundle/dms/deploy-error/script create mode 100644 acceptance/bundle/dms/deploy-error/test.toml create mode 100644 acceptance/bundle/dms/out.test.toml create mode 100644 acceptance/bundle/dms/output.txt create mode 100644 acceptance/bundle/dms/plan-and-summary/databricks.yml create mode 100644 acceptance/bundle/dms/plan-and-summary/out.requests.txt create mode 100644 acceptance/bundle/dms/plan-and-summary/out.test.toml create mode 100644 acceptance/bundle/dms/plan-and-summary/output.txt create mode 100644 acceptance/bundle/dms/plan-and-summary/script create mode 100644 acceptance/bundle/dms/release-lock-error/databricks.yml create mode 100644 acceptance/bundle/dms/release-lock-error/out.test.toml create mode 100644 acceptance/bundle/dms/release-lock-error/output.txt create mode 100644 acceptance/bundle/dms/release-lock-error/script create mode 100644 acceptance/bundle/dms/release-lock-error/test.toml create mode 100644 acceptance/bundle/dms/script create mode 100644 acceptance/bundle/dms/sequential-deploys/databricks.yml create mode 100644 acceptance/bundle/dms/sequential-deploys/out.test.toml create mode 100644 acceptance/bundle/dms/sequential-deploys/output.txt create mode 100644 acceptance/bundle/dms/sequential-deploys/script create mode 100644 acceptance/bundle/dms/test.toml delete mode 100644 bundle/deploy/lock/acquire.go create mode 100644 bundle/deploy/lock/deployment_metadata_service.go create mode 100644 bundle/deploy/lock/deployment_metadata_service_test.go create mode 100644 bundle/deploy/lock/lock.go delete mode 100644 bundle/deploy/lock/release.go create mode 100644 bundle/deploy/lock/workspace_filesystem.go create mode 100644 bundle/env/deployment_metadata.go create mode 100644 bundle/statemgmt/resources_json.go create mode 100644 libs/testserver/deployment_metadata.go create mode 100644 libs/tmpdms/api.go create mode 100644 libs/tmpdms/types.go diff --git a/acceptance/bundle/dms/add-resources/databricks.yml b/acceptance/bundle/dms/add-resources/databricks.yml new file mode 100644 index 00000000000..6914816970d --- /dev/null +++ b/acceptance/bundle/dms/add-resources/databricks.yml @@ -0,0 +1,7 @@ +bundle: + name: add-resources-test + +resources: + jobs: + job_a: + name: job-a diff --git a/acceptance/bundle/dms/add-resources/out.requests.txt b/acceptance/bundle/dms/add-resources/out.requests.txt new file mode 100644 index 00000000000..5971e67292f --- /dev/null +++ b/acceptance/bundle/dms/add-resources/out.requests.txt @@ -0,0 +1,143 @@ +{ + "method": "GET", + "path": "/.well-known/databricks-config" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json" +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "3" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DESTROY", + "target_name": "default" + } +} +{ + "method": "GET", + "path": "/api/2.2/jobs/get", + "q": { + "job_id": "[NUMID]" + } +} +{ + "method": "GET", + "path": "/api/2.2/jobs/get", + "q": { + "job_id": "[NUMID]" + } +} +{ + "method": "POST", + "path": "/api/2.2/jobs/delete", + "body": { + "job_id": [NUMID] + } +} +{ + "method": "POST", + "path": "/api/2.2/jobs/delete", + "body": { + "job_id": [NUMID] + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/operations", + "q": { + "resource_key": "jobs.job_a" + }, + "body": { + "resource_key": "jobs.job_a", + "action_type": "OPERATION_ACTION_TYPE_DELETE", + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/operations", + "q": { + "resource_key": "jobs.job_b" + }, + "body": { + "resource_key": "jobs.job_b", + "action_type": "OPERATION_ACTION_TYPE_DELETE", + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/delete", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default", + "recursive": true + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/complete", + "body": { + "name": "deployments/[UUID]/versions/3", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "DELETE", + "path": "/api/2.0/bundle/deployments/[UUID]" +} diff --git a/acceptance/bundle/dms/add-resources/out.test.toml b/acceptance/bundle/dms/add-resources/out.test.toml new file mode 100644 index 00000000000..6ce208a0484 --- /dev/null +++ b/acceptance/bundle/dms/add-resources/out.test.toml @@ -0,0 +1,6 @@ +Local = true +Cloud = false + +[EnvMatrix] + DATABRICKS_BUNDLE_ENGINE = ["direct"] + DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/add-resources/output.txt b/acceptance/bundle/dms/add-resources/output.txt new file mode 100644 index 00000000000..19450055a67 --- /dev/null +++ b/acceptance/bundle/dms/add-resources/output.txt @@ -0,0 +1,151 @@ + +>>> [CLI] bundle deploy +Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files... +Deploying resources... +Deployment complete! + +>>> [CLI] bundle deploy +Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files... +Deploying resources... +Deployment complete! + +>>> [CLI] bundle plan +Plan: 0 to add, 0 to change, 0 to delete, 2 unchanged + +>>> print_requests.py --get //bundle ^//workspace-files ^//import-file +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.job_a" + }, + "body": { + "resource_key": "jobs.job_a", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "job-a", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "2" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", + "q": { + "resource_key": "jobs.job_b" + }, + "body": { + "resource_key": "jobs.job_b", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "job-b", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", + "body": { + "name": "deployments/[UUID]/versions/2", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} diff --git a/acceptance/bundle/dms/add-resources/script b/acceptance/bundle/dms/add-resources/script new file mode 100644 index 00000000000..c3b8fda6762 --- /dev/null +++ b/acceptance/bundle/dms/add-resources/script @@ -0,0 +1,33 @@ +# Deploy with one job. +trace $CLI bundle deploy + +# Delete local cache to force reading state from DMS. +rm -rf .databricks + +# Add a second job and deploy again. +cat > databricks.yml << 'EOF' +bundle: + name: add-resources-test + +resources: + jobs: + job_a: + name: job-a + job_b: + name: job-b +EOF +trace $CLI bundle deploy + +# Delete local cache again and run plan — should show no changes. +rm -rf .databricks +trace $CLI bundle plan + +# Print metadata service requests. Should show: +# - Deploy 1: CREATE for job_a +# - Deploy 2: ListResources + CREATE for job_b (job_a is unchanged) +# - Plan: ListResources (no operations) +trace print_requests.py --get //bundle ^//workspace-files ^//import-file + +# Clean up. +rm -rf .databricks +$CLI bundle destroy --auto-approve > /dev/null 2>&1 diff --git a/acceptance/bundle/dms/add-resources/test.toml b/acceptance/bundle/dms/add-resources/test.toml new file mode 100644 index 00000000000..601384fdf96 --- /dev/null +++ b/acceptance/bundle/dms/add-resources/test.toml @@ -0,0 +1 @@ +Ignore = [".databricks"] diff --git a/acceptance/bundle/dms/databricks.yml b/acceptance/bundle/dms/databricks.yml new file mode 100644 index 00000000000..c21c8a93925 --- /dev/null +++ b/acceptance/bundle/dms/databricks.yml @@ -0,0 +1,7 @@ +bundle: + name: metadata-service-test + +resources: + jobs: + test_job: + name: test-job diff --git a/acceptance/bundle/dms/deploy-error/databricks.yml b/acceptance/bundle/dms/deploy-error/databricks.yml new file mode 100644 index 00000000000..4786eeddf7e --- /dev/null +++ b/acceptance/bundle/dms/deploy-error/databricks.yml @@ -0,0 +1,7 @@ +bundle: + name: metadata-service-error-test + +resources: + jobs: + test_job: + name: test-job diff --git a/acceptance/bundle/dms/deploy-error/out.test.toml b/acceptance/bundle/dms/deploy-error/out.test.toml new file mode 100644 index 00000000000..6ce208a0484 --- /dev/null +++ b/acceptance/bundle/dms/deploy-error/out.test.toml @@ -0,0 +1,6 @@ +Local = true +Cloud = false + +[EnvMatrix] + DATABRICKS_BUNDLE_ENGINE = ["direct"] + DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/deploy-error/output.txt b/acceptance/bundle/dms/deploy-error/output.txt new file mode 100644 index 00000000000..7ee1e3e8ab3 --- /dev/null +++ b/acceptance/bundle/dms/deploy-error/output.txt @@ -0,0 +1,60 @@ + +>>> musterr [CLI] bundle deploy +Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files... +Deploying resources... +Error: cannot create resources.jobs.test_job: Invalid job configuration. (400 INVALID_PARAMETER_VALUE) + +Endpoint: POST [DATABRICKS_URL]/api/2.2/jobs/create +HTTP Status: 400 Bad Request +API error_code: INVALID_PARAMETER_VALUE +API message: Invalid job configuration. + + +>>> print_requests.py --get //bundle ^//workspace-files ^//import-file +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "status": "OPERATION_STATUS_FAILED", + "error_message": "Invalid job configuration." + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_FAILURE" + } +} diff --git a/acceptance/bundle/dms/deploy-error/script b/acceptance/bundle/dms/deploy-error/script new file mode 100644 index 00000000000..4624ecc6ce7 --- /dev/null +++ b/acceptance/bundle/dms/deploy-error/script @@ -0,0 +1,5 @@ +# Deploy with the metadata service enabled, expecting a resource creation failure. +trace musterr $CLI bundle deploy + +# Print the metadata service requests to verify the failed operation is reported. +trace print_requests.py --get //bundle ^//workspace-files ^//import-file diff --git a/acceptance/bundle/dms/deploy-error/test.toml b/acceptance/bundle/dms/deploy-error/test.toml new file mode 100644 index 00000000000..9d7f2c13489 --- /dev/null +++ b/acceptance/bundle/dms/deploy-error/test.toml @@ -0,0 +1,8 @@ +EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["direct"] +EnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] +RecordRequests = true + +[[Server]] +Pattern = "POST /api/2.2/jobs/create" +Response.StatusCode = 400 +Response.Body = '{"error_code": "INVALID_PARAMETER_VALUE", "message": "Invalid job configuration."}' diff --git a/acceptance/bundle/dms/out.test.toml b/acceptance/bundle/dms/out.test.toml new file mode 100644 index 00000000000..6ce208a0484 --- /dev/null +++ b/acceptance/bundle/dms/out.test.toml @@ -0,0 +1,6 @@ +Local = true +Cloud = false + +[EnvMatrix] + DATABRICKS_BUNDLE_ENGINE = ["direct"] + DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/output.txt b/acceptance/bundle/dms/output.txt new file mode 100644 index 00000000000..52fcc7fa167 --- /dev/null +++ b/acceptance/bundle/dms/output.txt @@ -0,0 +1,137 @@ + +>>> [CLI] bundle deploy +Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files... +Deploying resources... +Deployment complete! + +>>> print_requests.py --get //bundle ^//workspace-files ^//import-file +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} + +>>> [CLI] bundle destroy --auto-approve +The following resources will be deleted: + delete resources.jobs.test_job + +All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default + +Deleting files... +Destroy complete! + +>>> print_requests.py --get //bundle ^//workspace-files ^//import-file +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "2" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DESTROY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_DELETE", + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", + "body": { + "name": "deployments/[UUID]/versions/2", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "DELETE", + "path": "/api/2.0/bundle/deployments/[UUID]" +} diff --git a/acceptance/bundle/dms/plan-and-summary/databricks.yml b/acceptance/bundle/dms/plan-and-summary/databricks.yml new file mode 100644 index 00000000000..57120c0b94d --- /dev/null +++ b/acceptance/bundle/dms/plan-and-summary/databricks.yml @@ -0,0 +1,7 @@ +bundle: + name: plan-summary-test + +resources: + jobs: + test_job: + name: test-job diff --git a/acceptance/bundle/dms/plan-and-summary/out.requests.txt b/acceptance/bundle/dms/plan-and-summary/out.requests.txt new file mode 100644 index 00000000000..e20c91719ea --- /dev/null +++ b/acceptance/bundle/dms/plan-and-summary/out.requests.txt @@ -0,0 +1,116 @@ +{ + "method": "GET", + "path": "/.well-known/databricks-config" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json" +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "2" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DESTROY", + "target_name": "default" + } +} +{ + "method": "GET", + "path": "/api/2.2/jobs/get", + "q": { + "job_id": "[NUMID]" + } +} +{ + "method": "POST", + "path": "/api/2.2/jobs/delete", + "body": { + "job_id": [NUMID] + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_DELETE", + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/delete", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default", + "recursive": true + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", + "body": { + "name": "deployments/[UUID]/versions/2", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "DELETE", + "path": "/api/2.0/bundle/deployments/[UUID]" +} diff --git a/acceptance/bundle/dms/plan-and-summary/out.test.toml b/acceptance/bundle/dms/plan-and-summary/out.test.toml new file mode 100644 index 00000000000..6ce208a0484 --- /dev/null +++ b/acceptance/bundle/dms/plan-and-summary/out.test.toml @@ -0,0 +1,6 @@ +Local = true +Cloud = false + +[EnvMatrix] + DATABRICKS_BUNDLE_ENGINE = ["direct"] + DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/plan-and-summary/output.txt b/acceptance/bundle/dms/plan-and-summary/output.txt new file mode 100644 index 00000000000..85363efa8be --- /dev/null +++ b/acceptance/bundle/dms/plan-and-summary/output.txt @@ -0,0 +1,98 @@ + +>>> [CLI] bundle deploy +Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files... +Deploying resources... +Deployment complete! + +>>> [CLI] bundle plan +Plan: 0 to add, 0 to change, 0 to delete, 1 unchanged + +>>> [CLI] bundle summary +Name: plan-summary-test +Target: default +Workspace: + User: [USERNAME] + Path: /Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default +Resources: + Jobs: + test_job: + Name: test-job + URL: [DATABRICKS_URL]/jobs/[NUMID]?o=[NUMID] + +>>> print_requests.py --get //bundle ^//workspace-files ^//import-file +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} diff --git a/acceptance/bundle/dms/plan-and-summary/script b/acceptance/bundle/dms/plan-and-summary/script new file mode 100644 index 00000000000..b508eb45dae --- /dev/null +++ b/acceptance/bundle/dms/plan-and-summary/script @@ -0,0 +1,15 @@ +# Deploy first to populate DMS state. +trace $CLI bundle deploy + +# Plan should read state from DMS via ListResources. +trace $CLI bundle plan + +# Summary should show the deployment ID and read state from DMS. +trace $CLI bundle summary + +# Print metadata service requests from plan and summary. +# Both should include ListResources calls. +trace print_requests.py --get //bundle ^//workspace-files ^//import-file + +# Clean up. +$CLI bundle destroy --auto-approve > /dev/null 2>&1 diff --git a/acceptance/bundle/dms/release-lock-error/databricks.yml b/acceptance/bundle/dms/release-lock-error/databricks.yml new file mode 100644 index 00000000000..94323b84d93 --- /dev/null +++ b/acceptance/bundle/dms/release-lock-error/databricks.yml @@ -0,0 +1,11 @@ +bundle: + name: dms-release-lock-error + +targets: + fail-complete: + default: true + +resources: + jobs: + test_job: + name: test-job diff --git a/acceptance/bundle/dms/release-lock-error/out.test.toml b/acceptance/bundle/dms/release-lock-error/out.test.toml new file mode 100644 index 00000000000..6ce208a0484 --- /dev/null +++ b/acceptance/bundle/dms/release-lock-error/out.test.toml @@ -0,0 +1,6 @@ +Local = true +Cloud = false + +[EnvMatrix] + DATABRICKS_BUNDLE_ENGINE = ["direct"] + DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/release-lock-error/output.txt b/acceptance/bundle/dms/release-lock-error/output.txt new file mode 100644 index 00000000000..e7d0f274ced --- /dev/null +++ b/acceptance/bundle/dms/release-lock-error/output.txt @@ -0,0 +1,68 @@ + +>>> [CLI] bundle deploy +Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files... +Deploying resources... +Deployment complete! +Warn: Failed to release deployment lock: simulated complete version failure + +>>> print_requests.py --get //bundle ^//workspace-files ^//import-file +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "fail-complete" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "fail-complete" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} diff --git a/acceptance/bundle/dms/release-lock-error/script b/acceptance/bundle/dms/release-lock-error/script new file mode 100644 index 00000000000..1223233a0b0 --- /dev/null +++ b/acceptance/bundle/dms/release-lock-error/script @@ -0,0 +1,8 @@ +# Deploy with the metadata service enabled. +# The target name "fail-complete" triggers a simulated error on the +# CompleteVersion endpoint (release lock), so deploy should warn about +# the failed lock release. +trace $CLI bundle deploy + +# Print the metadata service requests to verify the lock release was attempted. +trace print_requests.py --get //bundle ^//workspace-files ^//import-file diff --git a/acceptance/bundle/dms/release-lock-error/test.toml b/acceptance/bundle/dms/release-lock-error/test.toml new file mode 100644 index 00000000000..1910e961352 --- /dev/null +++ b/acceptance/bundle/dms/release-lock-error/test.toml @@ -0,0 +1,2 @@ +# Override target to "fail-complete" which makes the test server's +# CompleteVersion endpoint return an error, simulating a release failure. diff --git a/acceptance/bundle/dms/script b/acceptance/bundle/dms/script new file mode 100644 index 00000000000..5a8ae88a294 --- /dev/null +++ b/acceptance/bundle/dms/script @@ -0,0 +1,11 @@ +# Deploy with the metadata service enabled. +trace $CLI bundle deploy + +# Print all metadata service requests made during deploy. +trace print_requests.py --get //bundle ^//workspace-files ^//import-file + +# Destroy with the metadata service enabled. +trace $CLI bundle destroy --auto-approve + +# Print all metadata service requests made during destroy. +trace print_requests.py --get //bundle ^//workspace-files ^//import-file diff --git a/acceptance/bundle/dms/sequential-deploys/databricks.yml b/acceptance/bundle/dms/sequential-deploys/databricks.yml new file mode 100644 index 00000000000..0d7c1fb63b3 --- /dev/null +++ b/acceptance/bundle/dms/sequential-deploys/databricks.yml @@ -0,0 +1,7 @@ +bundle: + name: sequential-deploys-test + +resources: + jobs: + test_job: + name: test-job diff --git a/acceptance/bundle/dms/sequential-deploys/out.test.toml b/acceptance/bundle/dms/sequential-deploys/out.test.toml new file mode 100644 index 00000000000..6ce208a0484 --- /dev/null +++ b/acceptance/bundle/dms/sequential-deploys/out.test.toml @@ -0,0 +1,6 @@ +Local = true +Cloud = false + +[EnvMatrix] + DATABRICKS_BUNDLE_ENGINE = ["direct"] + DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/sequential-deploys/output.txt b/acceptance/bundle/dms/sequential-deploys/output.txt new file mode 100644 index 00000000000..9899405bf72 --- /dev/null +++ b/acceptance/bundle/dms/sequential-deploys/output.txt @@ -0,0 +1,161 @@ + +>>> [CLI] bundle deploy +Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files... +Deploying resources... +Deployment complete! + +>>> [CLI] bundle deploy +Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files... +Deploying resources... +Deployment complete! + +>>> [CLI] bundle deploy +Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files... +Deploying resources... +Deployment complete! + +>>> print_requests.py --get //bundle ^//workspace-files ^//import-file +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "2" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", + "body": { + "name": "deployments/[UUID]/versions/2", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "3" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/complete", + "body": { + "name": "deployments/[UUID]/versions/3", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} diff --git a/acceptance/bundle/dms/sequential-deploys/script b/acceptance/bundle/dms/sequential-deploys/script new file mode 100644 index 00000000000..6e9b9a477fa --- /dev/null +++ b/acceptance/bundle/dms/sequential-deploys/script @@ -0,0 +1,7 @@ +# Deploy three times in sequence to verify version numbers increment. +trace $CLI bundle deploy +trace $CLI bundle deploy +trace $CLI bundle deploy + +# Print metadata service requests. Version IDs should be 1, 2, 3. +trace print_requests.py --get //bundle ^//workspace-files ^//import-file diff --git a/acceptance/bundle/dms/test.toml b/acceptance/bundle/dms/test.toml new file mode 100644 index 00000000000..5d95b8d05dd --- /dev/null +++ b/acceptance/bundle/dms/test.toml @@ -0,0 +1,4 @@ +Badness = "Uses local test server; enable on cloud once the deployment metadata service is in production" +EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["direct"] +EnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] +RecordRequests = true diff --git a/bundle/bundle.go b/bundle/bundle.go index f4d33daed14..1207cd3d73b 100644 --- a/bundle/bundle.go +++ b/bundle/bundle.go @@ -9,6 +9,7 @@ package bundle import ( "context" "fmt" + "net/http" "os" "path/filepath" "sync" @@ -141,6 +142,10 @@ type Bundle struct { // (direct only) deployment implementation and state DeploymentBundle direct.DeploymentBundle + // DeploymentID is the DMS deployment identifier read from workspace state. + // Populated during state pull when the deployment metadata service is enabled. + DeploymentID string + // if true, we skip approval checks for deploy, destroy resources and delete // files AutoApprove bool @@ -227,6 +232,20 @@ func (b *Bundle) initClientOnce() { if err != nil { return nil, fmt.Errorf("cannot resolve bundle auth configuration: %w", err) } + + // If DATABRICKS_LITESWAP_ID is set, wrap the transport to inject the + // x-databricks-traffic-id header for routing to the liteswap instance. + // This env var is only set during manual testing so os.Getenv is fine. + if liteswapID := os.Getenv("DATABRICKS_LITESWAP_ID"); liteswapID != "" { //nolint:forbidigo + inner := w.Config.HTTPTransport + if inner == nil { + inner = http.DefaultTransport + } + w.Config.HTTPTransport = &liteswapTransport{ + inner: inner, + trafficID: "testenv://liteswap/" + liteswapID, + } + } return w, nil }) } @@ -247,6 +266,19 @@ func (b *Bundle) WorkspaceClient() *databricks.WorkspaceClient { return client } +// liteswapTransport injects the x-databricks-traffic-id header to route +// requests to a liteswap service instance. +type liteswapTransport struct { + inner http.RoundTripper + trafficID string +} + +func (t *liteswapTransport) RoundTrip(req *http.Request) (*http.Response, error) { + clone := req.Clone(req.Context()) + clone.Header.Set("x-databricks-traffic-id", t.trafficID) + return t.inner.RoundTrip(clone) +} + // SetWorkpaceClient sets the workspace client for this bundle. // This is used to inject a mock client for testing. func (b *Bundle) SetWorkpaceClient(w *databricks.WorkspaceClient) { diff --git a/bundle/deploy/lock/acquire.go b/bundle/deploy/lock/acquire.go deleted file mode 100644 index d4f788c3cac..00000000000 --- a/bundle/deploy/lock/acquire.go +++ /dev/null @@ -1,69 +0,0 @@ -package lock - -import ( - "context" - "errors" - "io/fs" - - "github.com/databricks/cli/bundle" - "github.com/databricks/cli/bundle/permissions" - "github.com/databricks/cli/libs/diag" - "github.com/databricks/cli/libs/locker" - "github.com/databricks/cli/libs/log" -) - -type acquire struct{} - -func Acquire() bundle.Mutator { - return &acquire{} -} - -func (m *acquire) Name() string { - return "lock:acquire" -} - -func (m *acquire) init(b *bundle.Bundle) error { - user := b.Config.Workspace.CurrentUser.UserName - dir := b.Config.Workspace.StatePath - l, err := locker.CreateLocker(user, dir, b.WorkspaceClient()) - if err != nil { - return err - } - - b.Locker = l - return nil -} - -func (m *acquire) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagnostics { - // Return early if locking is disabled. - if !b.Config.Bundle.Deployment.Lock.IsEnabled() { - log.Infof(ctx, "Skipping; locking is disabled") - return nil - } - - err := m.init(b) - if err != nil { - return diag.FromErr(err) - } - - force := b.Config.Bundle.Deployment.Lock.Force - log.Infof(ctx, "Acquiring deployment lock (force: %v)", force) - err = b.Locker.Lock(ctx, force) - if err != nil { - log.Errorf(ctx, "Failed to acquire deployment lock: %v", err) - - if errors.Is(err, fs.ErrPermission) { - return permissions.ReportPossiblePermissionDenied(ctx, b, b.Config.Workspace.StatePath) - } - - if errors.Is(err, fs.ErrNotExist) { - // If we get a "doesn't exist" error from the API this indicates - // we either don't have permissions or the path is invalid. - return permissions.ReportPossiblePermissionDenied(ctx, b, b.Config.Workspace.StatePath) - } - - return diag.FromErr(err) - } - - return nil -} diff --git a/bundle/deploy/lock/deployment_metadata_service.go b/bundle/deploy/lock/deployment_metadata_service.go new file mode 100644 index 00000000000..b4284859b6c --- /dev/null +++ b/bundle/deploy/lock/deployment_metadata_service.go @@ -0,0 +1,380 @@ +package lock + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "io/fs" + "net/http" + "strconv" + "strings" + "time" + + "github.com/databricks/cli/bundle" + "github.com/databricks/cli/bundle/deploy" + "github.com/databricks/cli/bundle/deployplan" + "github.com/databricks/cli/bundle/direct" + "github.com/databricks/cli/bundle/direct/dstate" + "github.com/databricks/cli/bundle/statemgmt" + "github.com/databricks/cli/internal/build" + "github.com/databricks/cli/libs/filer" + "github.com/databricks/cli/libs/log" + "github.com/databricks/cli/libs/tmpdms" + "github.com/databricks/databricks-sdk-go/apierr" + "github.com/google/uuid" +) + +const defaultHeartbeatInterval = 30 * time.Second + +type metadataServiceLock struct { + b *bundle.Bundle + versionType tmpdms.VersionType + + svc *tmpdms.DeploymentMetadataAPI + versionID string + + stopHeartbeat func() +} + +func newMetadataServiceLock(b *bundle.Bundle, versionType tmpdms.VersionType) *metadataServiceLock { + return &metadataServiceLock{b: b, versionType: versionType} +} + +func (l *metadataServiceLock) Acquire(ctx context.Context) error { + if l.b.Config.Bundle.Deployment.Lock.Force { + return errors.New("force lock is not supported with the deployment metadata service") + } + + svc, err := tmpdms.NewDeploymentMetadataAPI(l.b.WorkspaceClient()) + if err != nil { + return fmt.Errorf("failed to create metadata service client: %w", err) + } + l.svc = svc + + deploymentID, versionID, err := acquireLock(ctx, l.b, svc, l.versionType) + if err != nil { + return err + } + + l.b.DeploymentID = deploymentID + l.versionID = versionID + l.stopHeartbeat = startHeartbeat(ctx, svc, deploymentID, versionID) + l.b.DeploymentBundle.OperationReporter = makeOperationReporter(svc, deploymentID, versionID) + return nil +} + +func (l *metadataServiceLock) Release(ctx context.Context, status DeploymentStatus) error { + if l.stopHeartbeat != nil { + l.stopHeartbeat() + } + + reason := tmpdms.VersionCompleteSuccess + if status == DeploymentFailure { + reason = tmpdms.VersionCompleteFailure + } + + _, completeErr := l.svc.CompleteVersion(ctx, tmpdms.CompleteVersionRequest{ + DeploymentID: l.b.DeploymentID, + VersionID: l.versionID, + Name: fmt.Sprintf("deployments/%s/versions/%s", l.b.DeploymentID, l.versionID), + CompletionReason: reason, + }) + if completeErr != nil { + return completeErr + } + log.Infof(ctx, "Released deployment lock: deployment=%s version=%s reason=%s", l.b.DeploymentID, l.versionID, reason) + + // For destroy operations, delete the deployment record after + // successfully releasing the lock. + if status == DeploymentSuccess && l.versionType == tmpdms.VersionTypeDestroy { + _, deleteErr := l.svc.DeleteDeployment(ctx, tmpdms.DeleteDeploymentRequest{ + DeploymentID: l.b.DeploymentID, + }) + if deleteErr != nil { + return fmt.Errorf("failed to delete deployment: %w", deleteErr) + } + } + + return nil +} + +// acquireLock implements the lock acquisition protocol using the deployment +// metadata service: resolve deployment ID, ensure deployment, create version. +func acquireLock(ctx context.Context, b *bundle.Bundle, svc *tmpdms.DeploymentMetadataAPI, versionType tmpdms.VersionType) (deploymentID, versionID string, err error) { + var isNew bool + deploymentID, isNew, err = resolveDeploymentID(ctx, b) + if err != nil { + return "", "", err + } + + // Only create the deployment record for fresh deployments. + if isNew { + _, createErr := svc.CreateDeployment(ctx, tmpdms.CreateDeploymentRequest{ + DeploymentID: deploymentID, + Deployment: &tmpdms.Deployment{ + TargetName: b.Config.Bundle.Target, + }, + }) + if createErr != nil { + return "", "", fmt.Errorf("failed to create deployment: %w", createErr) + } + } + + // Get the deployment to determine the next version ID. + dep, getErr := svc.GetDeployment(ctx, tmpdms.GetDeploymentRequest{ + DeploymentID: deploymentID, + }) + if getErr != nil { + return "", "", fmt.Errorf("failed to get deployment: %w", getErr) + } + + if dep.LastVersionID == "" { + versionID = "1" + } else { + lastVersion, parseErr := strconv.ParseInt(dep.LastVersionID, 10, 64) + if parseErr != nil { + return "", "", fmt.Errorf("failed to parse last_version_id %q: %w", dep.LastVersionID, parseErr) + } + versionID = strconv.FormatInt(lastVersion+1, 10) + } + + // Create a version to acquire the deployment lock. + version, versionErr := svc.CreateVersion(ctx, tmpdms.CreateVersionRequest{ + DeploymentID: deploymentID, + Parent: "deployments/" + deploymentID, + VersionID: versionID, + Version: &tmpdms.Version{ + CliVersion: build.GetInfo().Version, + VersionType: versionType, + TargetName: b.Config.Bundle.Target, + }, + }) + if versionErr != nil { + return "", "", fmt.Errorf("failed to acquire deployment lock: %w", versionErr) + } + + log.Infof(ctx, "Acquired deployment lock: deployment=%s version=%s", deploymentID, version.VersionID) + return deploymentID, versionID, nil +} + +// resolveDeploymentID reads the deployment ID from resources.json in the +// workspace state directory. If the file doesn't exist or has no deployment ID, +// a new UUID is generated and written. The boolean return indicates whether +// this is a fresh deployment (true) or an existing one (false). +func resolveDeploymentID(ctx context.Context, b *bundle.Bundle) (string, bool, error) { + f, err := deploy.StateFiler(b) + if err != nil { + return "", false, fmt.Errorf("failed to create state filer: %w", err) + } + + // Try reading existing deployment ID from resources.json. + reader, readErr := f.Read(ctx, "resources.json") + if readErr == nil { + defer reader.Close() + data, err := io.ReadAll(reader) + if err != nil { + return "", false, fmt.Errorf("failed to read resources.json content: %w", err) + } + var rj statemgmt.ResourcesJSON + if err := json.Unmarshal(data, &rj); err != nil { + return "", false, fmt.Errorf("failed to parse resources.json: %w", err) + } + if rj.DeploymentID != "" { + return rj.DeploymentID, false, nil + } + } else if !errors.Is(readErr, fs.ErrNotExist) { + return "", false, fmt.Errorf("failed to read resources.json: %w", readErr) + } + + // Fresh deployment: generate a new ID and write resources.json. + deploymentID := uuid.New().String() + rj := statemgmt.ResourcesJSON{DeploymentID: deploymentID} + data, err := json.Marshal(rj) + if err != nil { + return "", false, fmt.Errorf("failed to marshal resources.json: %w", err) + } + err = f.Write(ctx, "resources.json", bytes.NewReader(data), filer.CreateParentDirectories, filer.OverwriteIfExists) + if err != nil { + return "", false, fmt.Errorf("failed to write resources.json: %w", err) + } + return deploymentID, true, nil +} + +// makeOperationReporter returns an OperationReporter that reports each resource +// operation (success or failure) to the deployment metadata service. +func makeOperationReporter(svc *tmpdms.DeploymentMetadataAPI, deploymentID, versionID string) direct.OperationReporter { + return func( + ctx context.Context, + resourceKey string, + resourceID string, + action deployplan.ActionType, + operationErr error, + state json.RawMessage, + ) error { + // The internal state DB uses "resources.jobs.foo" keys but the API + // expects "jobs.foo" — strip the "resources." prefix. + apiKey := strings.TrimPrefix(resourceKey, "resources.") + actionType, err := planActionToOperationAction(action) + if err != nil { + return fmt.Errorf("mapping action for resource %s: %w", resourceKey, err) + } + if actionType == "" { + return nil + } + + status := tmpdms.OperationStatusSucceeded + var errorMessage string + if operationErr != nil { + status = tmpdms.OperationStatusFailed + errorMessage = operationErr.Error() + } + + op := &tmpdms.Operation{ + ResourceKey: apiKey, + ResourceID: resourceID, + Status: status, + ActionType: actionType, + ErrorMessage: errorMessage, + } + if len(state) > 0 { + op.State = state + } + + _, err = svc.CreateOperation(ctx, tmpdms.CreateOperationRequest{ + DeploymentID: deploymentID, + VersionID: versionID, + Parent: fmt.Sprintf("deployments/%s/versions/%s", deploymentID, versionID), + ResourceKey: apiKey, + Operation: op, + }) + if err != nil { + return fmt.Errorf("reporting operation for resource %s: %w", resourceKey, err) + } + return nil + } +} + +// LoadStateFromDMS loads resource state from the deployment metadata service +// into the state DB. It first opens the local state file (which contains the +// deployment ID pointer), then populates the resource state from the server. +func LoadStateFromDMS(ctx context.Context, b *bundle.Bundle) error { + if b.DeploymentID == "" { + return nil + } + + // Open the local state file first so the state DB path is set. + // The local file contains {"deployment_id":"..."} with no resource state. + db := &b.DeploymentBundle.StateDB + _, localPath := b.StateFilenameDirect(ctx) + if err := db.Open(localPath); err != nil { + return fmt.Errorf("opening local state: %w", err) + } + + svc, err := tmpdms.NewDeploymentMetadataAPI(b.WorkspaceClient()) + if err != nil { + return fmt.Errorf("failed to create metadata service client: %w", err) + } + + resources, err := svc.ListResources(ctx, tmpdms.ListResourcesRequest{ + DeploymentID: b.DeploymentID, + }) + if err != nil { + return fmt.Errorf("failed to list resources from deployment metadata service: %w", err) + } + + // Populate resource state from the server. + db.Data.State = make(map[string]dstate.ResourceEntry) + + for _, r := range resources { + // The DMS stores keys without the "resources." prefix (e.g., "jobs.foo"). + // The state DB expects the full key (e.g., "resources.jobs.foo"). + resourceKey := "resources." + r.ResourceKey + + var stateBytes json.RawMessage + if r.State != nil { + stateBytes, err = json.Marshal(r.State) + if err != nil { + return fmt.Errorf("marshaling state for %s: %w", resourceKey, err) + } + } + + db.Data.State[resourceKey] = dstate.ResourceEntry{ + ID: r.ResourceID, + State: stateBytes, + } + } + + return nil +} + +// planActionToOperationAction maps a deploy plan action to a metadata service +// operation action type. No-op actions like Skip return ("", nil) and should +// be ignored. +func planActionToOperationAction(action deployplan.ActionType) (tmpdms.OperationActionType, error) { + switch action { + case deployplan.Skip: + return "", nil + case deployplan.Create: + return tmpdms.OperationActionTypeCreate, nil + case deployplan.Update: + return tmpdms.OperationActionTypeUpdate, nil + case deployplan.UpdateWithID: + return tmpdms.OperationActionTypeUpdateWithID, nil + case deployplan.Delete: + return tmpdms.OperationActionTypeDelete, nil + case deployplan.Recreate: + return tmpdms.OperationActionTypeRecreate, nil + case deployplan.Resize: + return tmpdms.OperationActionTypeResize, nil + default: + return "", fmt.Errorf("unsupported operation action type: %s", action) + } +} + +// startHeartbeat starts a background goroutine that sends heartbeats to keep +// the deployment lock alive. Returns a cancel function to stop the heartbeat. +func startHeartbeat(ctx context.Context, svc *tmpdms.DeploymentMetadataAPI, deploymentID, versionID string) context.CancelFunc { + ctx, cancel := context.WithCancel(ctx) + + go func() { + ticker := time.NewTicker(defaultHeartbeatInterval) + defer ticker.Stop() + + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + _, err := svc.Heartbeat(ctx, tmpdms.HeartbeatRequest{ + DeploymentID: deploymentID, + VersionID: versionID, + }) + if err != nil { + // A 409 ABORTED is expected if the version was completed + // between the ticker firing and the heartbeat request. + if isAborted(err) { + log.Debugf(ctx, "Heartbeat stopped: version already completed") + return + } + log.Warnf(ctx, "Failed to send deployment heartbeat: %v", err) + } else { + log.Debugf(ctx, "Deployment heartbeat sent for deployment=%s version=%s", deploymentID, versionID) + } + } + } + }() + + return cancel +} + +// isAborted checks if an error indicates the operation was aborted (HTTP 409 with ABORTED error code). +func isAborted(err error) bool { + var apiErr *apierr.APIError + if errors.As(err, &apiErr) && apiErr.StatusCode == http.StatusConflict && apiErr.ErrorCode == "ABORTED" { + return true + } + return false +} diff --git a/bundle/deploy/lock/deployment_metadata_service_test.go b/bundle/deploy/lock/deployment_metadata_service_test.go new file mode 100644 index 00000000000..980cce00934 --- /dev/null +++ b/bundle/deploy/lock/deployment_metadata_service_test.go @@ -0,0 +1,54 @@ +package lock + +import ( + "testing" + + "github.com/databricks/cli/bundle/deployplan" + "github.com/databricks/cli/libs/tmpdms" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestPlanActionToOperationAction(t *testing.T) { + tests := []struct { + action deployplan.ActionType + expected tmpdms.OperationActionType + }{ + {deployplan.Skip, ""}, + {deployplan.Create, tmpdms.OperationActionTypeCreate}, + {deployplan.Update, tmpdms.OperationActionTypeUpdate}, + {deployplan.UpdateWithID, tmpdms.OperationActionTypeUpdateWithID}, + {deployplan.Delete, tmpdms.OperationActionTypeDelete}, + {deployplan.Recreate, tmpdms.OperationActionTypeRecreate}, + {deployplan.Resize, tmpdms.OperationActionTypeResize}, + {"unknown_action", ""}, + } + + for _, tt := range tests { + t.Run(string(tt.action), func(t *testing.T) { + result, err := planActionToOperationAction(tt.action) + if tt.action == "unknown_action" { + assert.ErrorContains(t, err, "unsupported operation action type") + return + } + require.NoError(t, err) + assert.Equal(t, tt.expected, result) + }) + } +} + +func TestGoalToVersionType(t *testing.T) { + vt, ok := goalToVersionType(GoalDeploy) + assert.True(t, ok) + assert.Equal(t, tmpdms.VersionTypeDeploy, vt) + + vt, ok = goalToVersionType(GoalDestroy) + assert.True(t, ok) + assert.Equal(t, tmpdms.VersionTypeDestroy, vt) + + _, ok = goalToVersionType(GoalBind) + assert.False(t, ok) + + _, ok = goalToVersionType(GoalUnbind) + assert.False(t, ok) +} diff --git a/bundle/deploy/lock/lock.go b/bundle/deploy/lock/lock.go new file mode 100644 index 00000000000..c51b17c9125 --- /dev/null +++ b/bundle/deploy/lock/lock.go @@ -0,0 +1,62 @@ +package lock + +import ( + "context" + + "github.com/databricks/cli/bundle" + "github.com/databricks/cli/bundle/env" + "github.com/databricks/cli/libs/tmpdms" +) + +// Goal describes the purpose of a deployment operation. +type Goal string + +const ( + GoalBind = Goal("bind") + GoalUnbind = Goal("unbind") + GoalDeploy = Goal("deploy") + GoalDestroy = Goal("destroy") +) + +// DeploymentStatus indicates whether the deployment operation succeeded or failed. +type DeploymentStatus int + +const ( + DeploymentSuccess DeploymentStatus = iota + DeploymentFailure +) + +// DeploymentLock manages the deployment lock lifecycle. +type DeploymentLock interface { + // Acquire acquires the deployment lock. + Acquire(ctx context.Context) error + + // Release releases the deployment lock with the given deployment status. + Release(ctx context.Context, status DeploymentStatus) error +} + +// NewDeploymentLock returns a DeploymentLock implementation based on the +// current environment. If managed state is enabled and the goal maps to a +// supported version type, a metadata service lock is returned. Otherwise, +// a workspace filesystem lock is returned. +func NewDeploymentLock(ctx context.Context, b *bundle.Bundle, goal Goal) DeploymentLock { + useManagedState, _ := env.ManagedState(ctx) + if useManagedState == "true" { + versionType, ok := goalToVersionType(goal) + if ok { + return newMetadataServiceLock(b, versionType) + } + } + return newWorkspaceFilesystemLock(b, goal) +} + +func goalToVersionType(goal Goal) (tmpdms.VersionType, bool) { + switch goal { + case GoalDeploy: + return tmpdms.VersionTypeDeploy, true + case GoalDestroy: + return tmpdms.VersionTypeDestroy, true + default: + return "", false + } +} diff --git a/bundle/deploy/lock/release.go b/bundle/deploy/lock/release.go deleted file mode 100644 index 26f95edfc95..00000000000 --- a/bundle/deploy/lock/release.go +++ /dev/null @@ -1,58 +0,0 @@ -package lock - -import ( - "context" - - "github.com/databricks/cli/bundle" - "github.com/databricks/cli/libs/diag" - "github.com/databricks/cli/libs/locker" - "github.com/databricks/cli/libs/log" -) - -type Goal string - -const ( - GoalBind = Goal("bind") - GoalUnbind = Goal("unbind") - GoalDeploy = Goal("deploy") - GoalDestroy = Goal("destroy") -) - -type release struct { - goal Goal -} - -func Release(goal Goal) bundle.Mutator { - return &release{goal} -} - -func (m *release) Name() string { - return "lock:release" -} - -func (m *release) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagnostics { - // Return early if locking is disabled. - if !b.Config.Bundle.Deployment.Lock.IsEnabled() { - log.Infof(ctx, "Skipping; locking is disabled") - return nil - } - - // Return early if the locker is not set. - // It is likely an error occurred prior to initialization of the locker instance. - if b.Locker == nil { - log.Warnf(ctx, "Unable to release lock if locker is not configured") - return nil - } - - log.Infof(ctx, "Releasing deployment lock") - switch m.goal { - case GoalDeploy: - return diag.FromErr(b.Locker.Unlock(ctx)) - case GoalBind, GoalUnbind: - return diag.FromErr(b.Locker.Unlock(ctx)) - case GoalDestroy: - return diag.FromErr(b.Locker.Unlock(ctx, locker.AllowLockFileNotExist)) - default: - return diag.Errorf("unknown goal for lock release: %s", m.goal) - } -} diff --git a/bundle/deploy/lock/workspace_filesystem.go b/bundle/deploy/lock/workspace_filesystem.go new file mode 100644 index 00000000000..e84f327d844 --- /dev/null +++ b/bundle/deploy/lock/workspace_filesystem.go @@ -0,0 +1,66 @@ +package lock + +import ( + "context" + + "github.com/databricks/cli/bundle" + "github.com/databricks/cli/libs/locker" + "github.com/databricks/cli/libs/log" +) + +type workspaceFilesystemLock struct { + b *bundle.Bundle + goal Goal +} + +func newWorkspaceFilesystemLock(b *bundle.Bundle, goal Goal) *workspaceFilesystemLock { + return &workspaceFilesystemLock{b: b, goal: goal} +} + +func (l *workspaceFilesystemLock) Acquire(ctx context.Context) error { + b := l.b + + if !b.Config.Bundle.Deployment.Lock.IsEnabled() { + log.Infof(ctx, "Skipping; locking is disabled") + return nil + } + + user := b.Config.Workspace.CurrentUser.UserName + dir := b.Config.Workspace.StatePath + lk, err := locker.CreateLocker(user, dir, b.WorkspaceClient()) + if err != nil { + return err + } + + b.Locker = lk + + force := b.Config.Bundle.Deployment.Lock.Force + log.Infof(ctx, "Acquiring deployment lock (force: %v)", force) + err = lk.Lock(ctx, force) + if err != nil { + log.Errorf(ctx, "Failed to acquire deployment lock: %v", err) + return err + } + + return nil +} + +func (l *workspaceFilesystemLock) Release(ctx context.Context, _ DeploymentStatus) error { + b := l.b + + if !b.Config.Bundle.Deployment.Lock.IsEnabled() { + log.Infof(ctx, "Skipping; locking is disabled") + return nil + } + + if b.Locker == nil { + log.Warnf(ctx, "Unable to release lock if locker is not configured") + return nil + } + + log.Infof(ctx, "Releasing deployment lock") + if l.goal == GoalDestroy { + return b.Locker.Unlock(ctx, locker.AllowLockFileNotExist) + } + return b.Locker.Unlock(ctx) +} diff --git a/bundle/deployplan/plan.go b/bundle/deployplan/plan.go index e0dcd9b2886..44e21427aae 100644 --- a/bundle/deployplan/plan.go +++ b/bundle/deployplan/plan.go @@ -16,11 +16,13 @@ import ( const currentPlanVersion = 2 type Plan struct { - PlanVersion int `json:"plan_version,omitempty"` - CLIVersion string `json:"cli_version,omitempty"` - Lineage string `json:"lineage,omitempty"` - Serial int `json:"serial,omitempty"` - Plan map[string]*PlanEntry `json:"plan,omitzero"` + PlanVersion int `json:"plan_version,omitempty"` + CLIVersion string `json:"cli_version,omitempty"` + // Lineage and Serial are used in file-based direct deployments. For DMS + // deployments, they are replaced by deployment ID and version ID. + Lineage string `json:"lineage,omitempty"` + Serial int `json:"serial,omitempty"` + Plan map[string]*PlanEntry `json:"plan,omitzero"` mutex sync.Mutex `json:"-"` lockmap lockmap `json:"-"` diff --git a/bundle/direct/bundle_apply.go b/bundle/direct/bundle_apply.go index a7f3ee65fc2..66c991305da 100644 --- a/bundle/direct/bundle_apply.go +++ b/bundle/direct/bundle_apply.go @@ -20,6 +20,11 @@ func (b *DeploymentBundle) Apply(ctx context.Context, client *databricks.Workspa panic("Planning is not done") } + if migrateMode && b.OperationReporter != nil { + logdiag.LogError(ctx, errors.New("migration is not supported with the deployment metadata service")) + return + } + if len(plan.Plan) == 0 { // Avoid creating state file if nothing to deploy return @@ -84,7 +89,23 @@ func (b *DeploymentBundle) Apply(ctx context.Context, client *databricks.Workspa logdiag.LogError(ctx, fmt.Errorf("%s: Unexpected delete action during migration", errorPrefix)) return false } + + // Capture the resource ID before deletion for operation reporting. + var deleteResourceID string + if b.OperationReporter != nil { + if dbentry, ok := b.StateDB.GetResourceEntry(resourceKey); ok { + deleteResourceID = dbentry.ID + } + } + err = d.Destroy(ctx, &b.StateDB) + if b.OperationReporter != nil { + reportErr := b.OperationReporter(ctx, resourceKey, deleteResourceID, action, err, nil) + if reportErr != nil { + logdiag.LogError(ctx, fmt.Errorf("%s: failed to report operation: %w", errorPrefix, reportErr)) + return false + } + } if err != nil { logdiag.LogError(ctx, fmt.Errorf("%s: %w", errorPrefix, err)) return false @@ -93,7 +114,6 @@ func (b *DeploymentBundle) Apply(ctx context.Context, client *databricks.Workspa } // We don't keep NewState around for 'skip' nodes - if action != deployplan.Skip { if !b.resolveReferences(ctx, resourceKey, entry, errorPrefix, false) { return false @@ -124,6 +144,20 @@ func (b *DeploymentBundle) Apply(ctx context.Context, client *databricks.Workspa err = d.Deploy(ctx, &b.StateDB, sv.Value, action, entry) } + // Report the operation inline to the metadata service. + if b.OperationReporter != nil { + var resourceID string + var resourceState json.RawMessage + if dbentry, ok := b.StateDB.GetResourceEntry(resourceKey); ok { + resourceID = dbentry.ID + resourceState = dbentry.State + } + if reportErr := b.OperationReporter(ctx, resourceKey, resourceID, action, err, resourceState); reportErr != nil { + logdiag.LogError(ctx, fmt.Errorf("%s: failed to report operation: %w", errorPrefix, reportErr)) + return false + } + } + if err != nil { logdiag.LogError(ctx, fmt.Errorf("%s: %w", errorPrefix, err)) return false diff --git a/bundle/direct/bundle_plan.go b/bundle/direct/bundle_plan.go index 15ccf2ac4e9..9007bbeebe3 100644 --- a/bundle/direct/bundle_plan.go +++ b/bundle/direct/bundle_plan.go @@ -40,6 +40,8 @@ func (b *DeploymentBundle) init(client *databricks.WorkspaceClient) error { // ValidatePlanAgainstState validates that a plan's lineage and serial match the current state. // This should be called early in the deployment process, before any file operations. // If the plan has no lineage (first deployment), validation is skipped. +// Serialized plans are not supported with DMS today. When support is added, +// similar validation will be needed using the deployment ID and version ID. func ValidatePlanAgainstState(stateDB *dstate.DeploymentState, plan *deployplan.Plan) error { // If plan has no lineage, this is a first deployment before any state exists // No validation needed diff --git a/bundle/direct/pkg.go b/bundle/direct/pkg.go index 58b9bc6b4b1..e7aef75927a 100644 --- a/bundle/direct/pkg.go +++ b/bundle/direct/pkg.go @@ -2,6 +2,7 @@ package direct import ( "context" + "encoding/json" "fmt" "reflect" "sync" @@ -37,6 +38,19 @@ type DeploymentUnit struct { DependsOn []deployplan.DependsOnEntry } +// OperationReporter is called after each resource operation (success or failure) +// to report it to the deployment metadata service. The state parameter contains +// the resource's post-operation state (nil for deletes or failures). Returns an +// error if reporting fails; callers must treat this as a deployment failure. +type OperationReporter func( + ctx context.Context, + resourceKey string, + resourceID string, + action deployplan.ActionType, + operationErr error, + state json.RawMessage, +) error + // DeploymentBundle holds everything needed to deploy a bundle type DeploymentBundle struct { StateDB dstate.DeploymentState @@ -44,6 +58,10 @@ type DeploymentBundle struct { Plan *deployplan.Plan RemoteStateCache sync.Map StateCache structvar.Cache + + // OperationReporter, when set, is called inline after each successful + // resource Create/Update/Delete to report the operation to the metadata service. + OperationReporter OperationReporter } // SetRemoteState updates the remote state with type validation and marks as fresh. diff --git a/bundle/env/deployment_metadata.go b/bundle/env/deployment_metadata.go new file mode 100644 index 00000000000..a4d08c7cd02 --- /dev/null +++ b/bundle/env/deployment_metadata.go @@ -0,0 +1,15 @@ +package env + +import "context" + +// managedStateVariable names the environment variable that controls whether +// server-managed state is used for locking and resource state management. +const managedStateVariable = "DATABRICKS_BUNDLE_MANAGED_STATE" + +// ManagedState returns the environment variable that controls whether +// server-managed state is used for locking and resource state management. +func ManagedState(ctx context.Context) (string, bool) { + return get(ctx, []string{ + managedStateVariable, + }) +} diff --git a/bundle/phases/bind.go b/bundle/phases/bind.go index fbed0aaef10..7631fd3ca47 100644 --- a/bundle/phases/bind.go +++ b/bundle/phases/bind.go @@ -22,13 +22,15 @@ import ( func Bind(ctx context.Context, b *bundle.Bundle, opts *terraform.BindOptions, engine engine.EngineType) { log.Info(ctx, "Phase: bind") - bundle.ApplyContext(ctx, b, lock.Acquire()) - if logdiag.HasError(ctx) { + dl := lock.NewDeploymentLock(ctx, b, lock.GoalBind) + if err := dl.Acquire(ctx); err != nil { + logdiag.LogError(ctx, err) return } - defer func() { - bundle.ApplyContext(ctx, b, lock.Release(lock.GoalBind)) + if err := dl.Release(ctx, lock.DeploymentSuccess); err != nil { + log.Warnf(ctx, "Failed to release deployment lock: %v", err) + } }() if engine.IsDirect() { @@ -118,13 +120,15 @@ func jsonDump(ctx context.Context, v any, field string) string { func Unbind(ctx context.Context, b *bundle.Bundle, bundleType, tfResourceType, resourceKey string, engine engine.EngineType) { log.Info(ctx, "Phase: unbind") - bundle.ApplyContext(ctx, b, lock.Acquire()) - if logdiag.HasError(ctx) { + dl := lock.NewDeploymentLock(ctx, b, lock.GoalUnbind) + if err := dl.Acquire(ctx); err != nil { + logdiag.LogError(ctx, err) return } - defer func() { - bundle.ApplyContext(ctx, b, lock.Release(lock.GoalUnbind)) + if err := dl.Release(ctx, lock.DeploymentSuccess); err != nil { + log.Warnf(ctx, "Failed to release deployment lock: %v", err) + } }() if engine.IsDirect() { diff --git a/bundle/phases/deploy.go b/bundle/phases/deploy.go index 110ab757312..76f82e224a5 100644 --- a/bundle/phases/deploy.go +++ b/bundle/phases/deploy.go @@ -98,8 +98,6 @@ func approvalForDeploy(ctx context.Context, b *bundle.Bundle, plan *deployplan.P } func deployCore(ctx context.Context, b *bundle.Bundle, plan *deployplan.Plan, targetEngine engine.EngineType) { - // Core mutators that CRUD resources and modify deployment state. These - // mutators need informed consent if they are potentially destructive. cmdio.LogString(ctx, "Deploying resources...") if targetEngine.IsDirect() { @@ -115,7 +113,6 @@ func deployCore(ctx context.Context, b *bundle.Bundle, plan *deployplan.Plan, ta bundle.ApplyContext(ctx, b, terraform.Apply()) } - // Even if deployment failed, there might be updates in states that we need to upload statemgmt.PushResourcesState(ctx, b, targetEngine) if logdiag.HasError(ctx) { return @@ -148,21 +145,24 @@ func uploadLibraries(ctx context.Context, b *bundle.Bundle, libs map[string][]li func Deploy(ctx context.Context, b *bundle.Bundle, outputHandler sync.OutputHandler, engine engine.EngineType, libs map[string][]libraries.LocationToUpdate, plan *deployplan.Plan) { log.Info(ctx, "Phase: deploy") - // Core mutators that CRUD resources and modify deployment state. These - // mutators need informed consent if they are potentially destructive. - bundle.ApplySeqContext(ctx, b, - scripts.Execute(config.ScriptPreDeploy), - lock.Acquire(), - ) - + bundle.ApplyContext(ctx, b, scripts.Execute(config.ScriptPreDeploy)) if logdiag.HasError(ctx) { - // lock is not acquired here return } - // lock is acquired here + dl := lock.NewDeploymentLock(ctx, b, lock.GoalDeploy) + if err := dl.Acquire(ctx); err != nil { + logdiag.LogError(ctx, err) + return + } defer func() { - bundle.ApplyContext(ctx, b, lock.Release(lock.GoalDeploy)) + status := lock.DeploymentSuccess + if logdiag.HasError(ctx) { + status = lock.DeploymentFailure + } + if err := dl.Release(ctx, status); err != nil { + log.Warnf(ctx, "Failed to release deployment lock: %v", err) + } }() uploadLibraries(ctx, b, libs) @@ -178,13 +178,11 @@ func Deploy(ctx context.Context, b *bundle.Bundle, outputHandler sync.OutputHand metrics.TrackUsedCompute(), deploy.ResourcePathMkdir(), ) - if logdiag.HasError(ctx) { return } if plan != nil { - // Initialize DeploymentBundle for applying the loaded plan err := b.DeploymentBundle.InitForApply(ctx, b.WorkspaceClient(), plan) if err != nil { logdiag.LogError(ctx, err) @@ -193,7 +191,6 @@ func Deploy(ctx context.Context, b *bundle.Bundle, outputHandler sync.OutputHand } else { plan = RunPlan(ctx, b, engine) } - if logdiag.HasError(ctx) { return } @@ -203,13 +200,12 @@ func Deploy(ctx context.Context, b *bundle.Bundle, outputHandler sync.OutputHand logdiag.LogError(ctx, err) return } - if haveApproval { - deployCore(ctx, b, plan, engine) - } else { + if !haveApproval { cmdio.LogString(ctx, "Deployment cancelled!") return } + deployCore(ctx, b, plan, engine) if logdiag.HasError(ctx) { return } diff --git a/bundle/phases/destroy.go b/bundle/phases/destroy.go index 12720f1dc58..1b6c8125c3d 100644 --- a/bundle/phases/destroy.go +++ b/bundle/phases/destroy.go @@ -104,7 +104,6 @@ func destroyCore(ctx context.Context, b *bundle.Bundle, plan *deployplan.Plan, e } } } else { - // Core destructive mutators for destroy. These require informed user consent. bundle.ApplyContext(ctx, b, terraform.Apply()) } @@ -128,26 +127,28 @@ func Destroy(ctx context.Context, b *bundle.Bundle, engine engine.EngineType) { logdiag.LogError(ctx, err) return } - if !ok { cmdio.LogString(ctx, "No active deployment found to destroy!") return } - bundle.ApplyContext(ctx, b, lock.Acquire()) - if logdiag.HasError(ctx) { + dl := lock.NewDeploymentLock(ctx, b, lock.GoalDestroy) + if err := dl.Acquire(ctx); err != nil { + logdiag.LogError(ctx, err) return } - defer func() { - bundle.ApplyContext(ctx, b, lock.Release(lock.GoalDestroy)) + status := lock.DeploymentSuccess + if logdiag.HasError(ctx) { + status = lock.DeploymentFailure + } + if err := dl.Release(ctx, status); err != nil { + log.Warnf(ctx, "Failed to release deployment lock: %v", err) + } }() if !engine.IsDirect() { bundle.ApplySeqContext(ctx, b, - // We need to resolve artifact variable (how we do it in build phase) - // because some of the to-be-destroyed resource might use this variable. - // Not resolving might lead to terraform "Reference to undeclared resource" error mutator.ResolveVariableReferencesWithoutResources("artifacts"), mutator.ResolveVariableReferencesOnlyResources("artifacts"), diff --git a/bundle/statemgmt/resources_json.go b/bundle/statemgmt/resources_json.go new file mode 100644 index 00000000000..7debc2ce8bc --- /dev/null +++ b/bundle/statemgmt/resources_json.go @@ -0,0 +1,7 @@ +package statemgmt + +// ResourcesJSON is the DMS-managed resources.json format. +// When DMS is enabled, resources.json stores only the deployment ID. +type ResourcesJSON struct { + DeploymentID string `json:"deployment_id"` +} diff --git a/bundle/statemgmt/state_pull.go b/bundle/statemgmt/state_pull.go index 7490897ff51..8c32a75ce03 100644 --- a/bundle/statemgmt/state_pull.go +++ b/bundle/statemgmt/state_pull.go @@ -16,6 +16,7 @@ import ( "github.com/databricks/cli/bundle" "github.com/databricks/cli/bundle/config/engine" "github.com/databricks/cli/bundle/deploy" + "github.com/databricks/cli/bundle/env" "github.com/databricks/cli/libs/diag" "github.com/databricks/cli/libs/filer" "github.com/databricks/cli/libs/log" @@ -219,6 +220,18 @@ func readStates(ctx context.Context, b *bundle.Bundle, alwaysPull AlwaysPull) [] directLocalState := localRead(ctx, localPathDirect, engine.EngineDirect) terraformLocalState := localRead(ctx, localPathTerraform, engine.EngineTerraform) + // When DMS is enabled, read the deployment ID from workspace and return + // early. State is loaded from the server later via LoadStateFromDMS. + if useDMS, _ := env.ManagedState(ctx); useDMS == "true" { + f, err := deploy.StateFiler(b) + if err != nil { + logdiag.LogError(ctx, err) + return nil + } + b.DeploymentID = readDeploymentID(ctx, f) + return nil + } + if (directLocalState == nil && terraformLocalState == nil) || alwaysPull { f, err := deploy.StateFiler(b) if err != nil { @@ -305,3 +318,30 @@ func logStatesDiag(ctx context.Context, severity diag.Severity, msg string, stat Detail: "Available state files:\n- " + strings.Join(stateStrs, "\n- "), }) } + +// readDeploymentID reads the DMS deployment ID from the workspace resources.json. +// Returns "" if the file doesn't exist or doesn't contain a deployment_id. +func readDeploymentID(ctx context.Context, f filer.Filer) string { + reader, err := f.Read(ctx, "resources.json") + if errors.Is(err, fs.ErrNotExist) { + return "" + } + if err != nil { + log.Debugf(ctx, "Failed to read resources.json for deployment ID: %v", err) + return "" + } + defer reader.Close() + + data, err := io.ReadAll(reader) + if err != nil { + log.Debugf(ctx, "Failed to read resources.json content: %v", err) + return "" + } + + var rj ResourcesJSON + if err := json.Unmarshal(data, &rj); err != nil { + log.Debugf(ctx, "Failed to parse resources.json: %v", err) + return "" + } + return rj.DeploymentID +} diff --git a/bundle/statemgmt/state_push.go b/bundle/statemgmt/state_push.go index b2da9f893c0..b545cfac4e4 100644 --- a/bundle/statemgmt/state_push.go +++ b/bundle/statemgmt/state_push.go @@ -9,6 +9,7 @@ import ( "github.com/databricks/cli/bundle" "github.com/databricks/cli/bundle/config/engine" "github.com/databricks/cli/bundle/deploy" + "github.com/databricks/cli/bundle/env" "github.com/databricks/cli/libs/cmdio" "github.com/databricks/cli/libs/filer" "github.com/databricks/cli/libs/log" @@ -16,7 +17,15 @@ import ( ) // PushResourcesState uploads the local state file to the remote location. +// When the deployment metadata service is enabled, state is managed by the +// server and no local push is needed. func PushResourcesState(ctx context.Context, b *bundle.Bundle, engine engine.EngineType) { + // When DMS is active, state is persisted per-operation to the server. + // No local state file to push. + if useDMS, _ := env.ManagedState(ctx); useDMS == "true" { + return + } + f, err := deploy.StateFiler(b) if err != nil { logdiag.LogError(ctx, err) diff --git a/cmd/bundle/utils/process.go b/cmd/bundle/utils/process.go index a6f48d99fa2..448b2e03745 100644 --- a/cmd/bundle/utils/process.go +++ b/cmd/bundle/utils/process.go @@ -11,6 +11,7 @@ import ( "github.com/databricks/cli/bundle/config/engine" "github.com/databricks/cli/bundle/config/mutator" "github.com/databricks/cli/bundle/config/validate" + "github.com/databricks/cli/bundle/deploy/lock" "github.com/databricks/cli/bundle/deployplan" "github.com/databricks/cli/bundle/direct" "github.com/databricks/cli/bundle/phases" @@ -183,13 +184,21 @@ func ProcessBundleRet(cmd *cobra.Command, opts ProcessOptions) (b *bundle.Bundle } cmd.SetContext(ctx) - // Open direct engine state once for all subsequent operations (ExportState, CalculatePlan, Apply, etc.) + // Open direct engine state once for all subsequent operations. + // When DMS is active, also load state from the server. needDirectState := stateDesc.Engine.IsDirect() && (opts.InitIDs || opts.ErrorOnEmptyState || opts.Deploy || opts.ReadPlanPath != "" || opts.PreDeployChecks || opts.PostStateFunc != nil) if needDirectState { - _, localPath := b.StateFilenameDirect(ctx) - if err := b.DeploymentBundle.StateDB.Open(localPath); err != nil { - logdiag.LogError(ctx, err) - return b, stateDesc, root.ErrAlreadyPrinted + if b.DeploymentID != "" { + if err := lock.LoadStateFromDMS(ctx, b); err != nil { + logdiag.LogError(ctx, err) + return b, stateDesc, root.ErrAlreadyPrinted + } + } else { + _, localPath := b.StateFilenameDirect(ctx) + if err := b.DeploymentBundle.StateDB.Open(localPath); err != nil { + logdiag.LogError(ctx, err) + return b, stateDesc, root.ErrAlreadyPrinted + } } } @@ -220,6 +229,10 @@ func ProcessBundleRet(cmd *cobra.Command, opts ProcessOptions) (b *bundle.Bundle logdiag.LogError(ctx, errors.New("--plan is only supported with direct engine (set bundle.engine to \"direct\" or DATABRICKS_BUNDLE_ENGINE=direct)")) return b, stateDesc, root.ErrAlreadyPrinted } + if b.DeploymentID != "" { + logdiag.LogError(ctx, errors.New("--plan is not supported with the deployment metadata service")) + return b, stateDesc, root.ErrAlreadyPrinted + } opts.Build = false opts.PreDeployChecks = false @@ -234,12 +247,15 @@ func ProcessBundleRet(cmd *cobra.Command, opts ProcessOptions) (b *bundle.Bundle log.Warnf(ctx, "Plan was created with CLI version %s but current version is %s", plan.CLIVersion, currentVersion) } - // Validate that the plan's lineage and serial match the current state - // This must happen before any file operations - err = direct.ValidatePlanAgainstState(&b.DeploymentBundle.StateDB, plan) - if err != nil { - logdiag.LogError(ctx, err) - return b, stateDesc, root.ErrAlreadyPrinted + // Validate that the plan's lineage and serial match the current state. + // When DMS is active, the server validates version ordering during lock + // acquisition, so local state checks are unnecessary. + if b.DeploymentID == "" { + err = direct.ValidatePlanAgainstState(&b.DeploymentBundle.StateDB, plan) + if err != nil { + logdiag.LogError(ctx, err) + return b, stateDesc, root.ErrAlreadyPrinted + } } } else if opts.Deploy { opts.Build = true diff --git a/libs/testserver/deployment_metadata.go b/libs/testserver/deployment_metadata.go new file mode 100644 index 00000000000..a612aae817a --- /dev/null +++ b/libs/testserver/deployment_metadata.go @@ -0,0 +1,415 @@ +package testserver + +import ( + "encoding/json" + "fmt" + "net/http" + "strconv" + "strings" + "time" + + "github.com/databricks/cli/libs/tmpdms" +) + +// deploymentMetadata holds in-memory state for the deployment metadata service. +// Stored per-workspace inside FakeWorkspace. +type deploymentMetadata struct { + // deployments keyed by deployment_id + deployments map[string]tmpdms.Deployment + + // versions keyed by "deploymentId/versionId" + versions map[string]tmpdms.Version + + // operations keyed by "deploymentId/versionId/resourceKey" + operations map[string]tmpdms.Operation + + // resources keyed by "deploymentId/resourceKey" + resources map[string]tmpdms.Resource + + // lock state per deployment: which version holds the lock and when it expires + lockHolder map[string]string // deploymentId -> "deployments/{id}/versions/{vid}" + lockExpiry map[string]time.Time // deploymentId -> expiry time +} + +func newDeploymentMetadata() *deploymentMetadata { + return &deploymentMetadata{ + deployments: map[string]tmpdms.Deployment{}, + versions: map[string]tmpdms.Version{}, + operations: map[string]tmpdms.Operation{}, + resources: map[string]tmpdms.Resource{}, + lockHolder: map[string]string{}, + lockExpiry: map[string]time.Time{}, + } +} + +const lockDuration = 2 * time.Minute + +func (s *FakeWorkspace) DeploymentMetadataCreateDeployment(req Request) Response { + defer s.LockUnlock()() + + // deployment_id is a query parameter, not in the body. + deploymentID := req.URL.Query().Get("deployment_id") + if deploymentID == "" { + return Response{ + StatusCode: http.StatusBadRequest, + Body: map[string]string{"error_code": "INVALID_PARAMETER_VALUE", "message": "deployment_id is required"}, + } + } + + // The body maps to the Deployment sub-message. + var bodyDeployment tmpdms.Deployment + if len(req.Body) > 0 { + if err := json.Unmarshal(req.Body, &bodyDeployment); err != nil { + return Response{ + StatusCode: http.StatusBadRequest, + Body: map[string]string{"error_code": "INVALID_PARAMETER_VALUE", "message": fmt.Sprintf("invalid request: %s", err)}, + } + } + } + + state := s.deploymentMetadata + if _, exists := state.deployments[deploymentID]; exists { + return Response{ + StatusCode: http.StatusConflict, + Body: map[string]string{"error_code": "ALREADY_EXISTS", "message": fmt.Sprintf("deployment %s already exists", deploymentID)}, + } + } + + now := time.Now().UTC() + deployment := tmpdms.Deployment{ + Name: "deployments/" + deploymentID, + DisplayName: deploymentID, + TargetName: bodyDeployment.TargetName, + Status: tmpdms.DeploymentStatusActive, + CreatedBy: s.CurrentUser().UserName, + CreateTime: &now, + UpdateTime: &now, + } + + state.deployments[deploymentID] = deployment + return Response{Body: deployment} +} + +func (s *FakeWorkspace) DeploymentMetadataGetDeployment(deploymentID string) Response { + defer s.LockUnlock()() + + state := s.deploymentMetadata + deployment, ok := state.deployments[deploymentID] + if !ok { + return Response{ + StatusCode: http.StatusNotFound, + Body: map[string]string{"error_code": "NOT_FOUND", "message": fmt.Sprintf("deployment %s not found", deploymentID)}, + } + } + return Response{Body: deployment} +} + +func (s *FakeWorkspace) DeploymentMetadataDeleteDeployment(deploymentID string) Response { + defer s.LockUnlock()() + + state := s.deploymentMetadata + deployment, ok := state.deployments[deploymentID] + if !ok { + return Response{ + StatusCode: http.StatusNotFound, + Body: map[string]string{"error_code": "NOT_FOUND", "message": fmt.Sprintf("deployment %s not found", deploymentID)}, + } + } + + now := time.Now().UTC() + deployment.Status = tmpdms.DeploymentStatusDeleted + deployment.DestroyTime = &now + deployment.DestroyedBy = s.CurrentUser().UserName + deployment.UpdateTime = &now + state.deployments[deploymentID] = deployment + + return Response{Body: deployment} +} + +func (s *FakeWorkspace) DeploymentMetadataCreateVersion(req Request, deploymentID string) Response { + defer s.LockUnlock()() + + state := s.deploymentMetadata + deployment, ok := state.deployments[deploymentID] + if !ok { + return Response{ + StatusCode: http.StatusNotFound, + Body: map[string]string{"error_code": "NOT_FOUND", "message": fmt.Sprintf("deployment %s not found", deploymentID)}, + } + } + + // version_id is a query parameter, not in the body. + versionID := req.URL.Query().Get("version_id") + if versionID == "" { + return Response{ + StatusCode: http.StatusBadRequest, + Body: map[string]string{"error_code": "INVALID_PARAMETER_VALUE", "message": "version_id is required"}, + } + } + + // The body maps to the Version sub-message. + var bodyVersion tmpdms.Version + if len(req.Body) > 0 { + if err := json.Unmarshal(req.Body, &bodyVersion); err != nil { + return Response{ + StatusCode: http.StatusBadRequest, + Body: map[string]string{"error_code": "INVALID_PARAMETER_VALUE", "message": fmt.Sprintf("invalid request: %s", err)}, + } + } + } + + // Validate version_id == last_version_id + 1 (matching server behavior). + var expectedVersionID string + if deployment.LastVersionID == "" { + expectedVersionID = "1" + } else { + lastVersion, err := strconv.ParseInt(deployment.LastVersionID, 10, 64) + if err != nil { + return Response{ + StatusCode: http.StatusInternalServerError, + Body: map[string]string{"error_code": "INTERNAL_ERROR", "message": "stored last_version_id is not a valid number: " + deployment.LastVersionID}, + } + } + expectedVersionID = strconv.FormatInt(lastVersion+1, 10) + } + if versionID != expectedVersionID { + return Response{ + StatusCode: http.StatusConflict, + Body: map[string]string{ + "error_code": "ABORTED", + "message": fmt.Sprintf("version_id must be %s (last_version_id + 1), got: %s", expectedVersionID, versionID), + }, + } + } + + // Check lock: if a lock is held and not expired, reject with 409. + now := time.Now().UTC() + if holder, hasLock := state.lockHolder[deploymentID]; hasLock { + if expiry, ok := state.lockExpiry[deploymentID]; ok && expiry.After(now) { + return Response{ + StatusCode: http.StatusConflict, + Body: map[string]string{ + "error_code": "ABORTED", + "message": fmt.Sprintf("deployment is locked by %s until %s", holder, expiry.Format(time.RFC3339)), + }, + } + } + } + + versionKey := deploymentID + "/" + versionID + version := tmpdms.Version{ + Name: fmt.Sprintf("deployments/%s/versions/%s", deploymentID, versionID), + VersionID: versionID, + CreatedBy: s.CurrentUser().UserName, + CreateTime: &now, + Status: tmpdms.VersionStatusInProgress, + } + version.CliVersion = bodyVersion.CliVersion + version.VersionType = bodyVersion.VersionType + version.TargetName = bodyVersion.TargetName + + state.versions[versionKey] = version + + // Acquire the lock. + lockExpiry := now.Add(lockDuration) + state.lockHolder[deploymentID] = version.Name + state.lockExpiry[deploymentID] = lockExpiry + + // Update the deployment's last_version_id and status. + deployment.LastVersionID = versionID + deployment.Status = tmpdms.DeploymentStatusInProgress + deployment.UpdateTime = &now + state.deployments[deploymentID] = deployment + + return Response{Body: version} +} + +func (s *FakeWorkspace) DeploymentMetadataGetVersion(deploymentID, versionID string) Response { + defer s.LockUnlock()() + + state := s.deploymentMetadata + versionKey := deploymentID + "/" + versionID + version, ok := state.versions[versionKey] + if !ok { + return Response{ + StatusCode: http.StatusNotFound, + Body: map[string]string{"error_code": "NOT_FOUND", "message": fmt.Sprintf("version %s not found", versionKey)}, + } + } + return Response{Body: version} +} + +func (s *FakeWorkspace) DeploymentMetadataHeartbeat(req Request, deploymentID, versionID string) Response { + defer s.LockUnlock()() + + state := s.deploymentMetadata + versionKey := deploymentID + "/" + versionID + version, ok := state.versions[versionKey] + if !ok { + return Response{ + StatusCode: http.StatusNotFound, + Body: map[string]string{"error_code": "NOT_FOUND", "message": fmt.Sprintf("version %s not found", versionKey)}, + } + } + + if version.Status != tmpdms.VersionStatusInProgress { + return Response{ + StatusCode: http.StatusConflict, + Body: map[string]string{"error_code": "ABORTED", "message": "version is no longer in progress"}, + } + } + + // Verify this version holds the lock. + expectedHolder := fmt.Sprintf("deployments/%s/versions/%s", deploymentID, versionID) + if state.lockHolder[deploymentID] != expectedHolder { + return Response{ + StatusCode: http.StatusConflict, + Body: map[string]string{"error_code": "ABORTED", "message": "lock is not held by this version"}, + } + } + + // Renew the lock. + now := time.Now().UTC() + newExpiry := now.Add(lockDuration) + state.lockExpiry[deploymentID] = newExpiry + + return Response{Body: tmpdms.HeartbeatResponse{ExpireTime: &newExpiry}} +} + +func (s *FakeWorkspace) DeploymentMetadataCompleteVersion(req Request, deploymentID, versionID string) Response { + defer s.LockUnlock()() + + state := s.deploymentMetadata + + // Allow tests to simulate a complete version failure. If the deployment's + // target_name is "fail-complete", return a 500 error. + if deployment, ok := state.deployments[deploymentID]; ok && deployment.TargetName == "fail-complete" { + return Response{ + StatusCode: http.StatusInternalServerError, + Body: map[string]string{"error_code": "INTERNAL_ERROR", "message": "simulated complete version failure"}, + } + } + + versionKey := deploymentID + "/" + versionID + version, ok := state.versions[versionKey] + if !ok { + return Response{ + StatusCode: http.StatusNotFound, + Body: map[string]string{"error_code": "NOT_FOUND", "message": fmt.Sprintf("version %s not found", versionKey)}, + } + } + + if version.Status != tmpdms.VersionStatusInProgress { + return Response{ + StatusCode: http.StatusConflict, + Body: map[string]string{"error_code": "ABORTED", "message": "version is already completed"}, + } + } + + var completeReq tmpdms.CompleteVersionRequest + if err := json.Unmarshal(req.Body, &completeReq); err != nil { + return Response{ + StatusCode: http.StatusBadRequest, + Body: map[string]string{"error_code": "INVALID_PARAMETER_VALUE", "message": fmt.Sprintf("invalid request: %s", err)}, + } + } + + now := time.Now().UTC() + version.Status = tmpdms.VersionStatusCompleted + version.CompleteTime = &now + version.CompletionReason = completeReq.CompletionReason + version.CompletedBy = s.CurrentUser().UserName + state.versions[versionKey] = version + + // Release the lock. + delete(state.lockHolder, deploymentID) + delete(state.lockExpiry, deploymentID) + + // Update deployment status based on completion reason. + if deployment, ok := state.deployments[deploymentID]; ok { + switch completeReq.CompletionReason { + case tmpdms.VersionCompleteSuccess: + deployment.Status = tmpdms.DeploymentStatusActive + case tmpdms.VersionCompleteFailure, tmpdms.VersionCompleteForceAbort, tmpdms.VersionCompleteLeaseExpired: + deployment.Status = tmpdms.DeploymentStatusFailed + case tmpdms.VersionCompleteUnspecified: + // No status change for unspecified completion reason. + } + deployment.UpdateTime = &now + state.deployments[deploymentID] = deployment + } + + return Response{Body: version} +} + +func (s *FakeWorkspace) DeploymentMetadataCreateOperation(req Request, deploymentID, versionID string) Response { + defer s.LockUnlock()() + + state := s.deploymentMetadata + + // resource_key is a query parameter, not in the body. + resourceKey := req.URL.Query().Get("resource_key") + if resourceKey == "" { + return Response{ + StatusCode: http.StatusBadRequest, + Body: map[string]string{"error_code": "INVALID_PARAMETER_VALUE", "message": "resource_key is required"}, + } + } + + // The body maps to the Operation sub-message. + var bodyOperation tmpdms.Operation + if len(req.Body) > 0 { + if err := json.Unmarshal(req.Body, &bodyOperation); err != nil { + return Response{ + StatusCode: http.StatusBadRequest, + Body: map[string]string{"error_code": "INVALID_PARAMETER_VALUE", "message": fmt.Sprintf("invalid request: %s", err)}, + } + } + } + + now := time.Now().UTC() + opKey := deploymentID + "/" + versionID + "/" + resourceKey + operation := tmpdms.Operation{ + Name: fmt.Sprintf("deployments/%s/versions/%s/operations/%s", deploymentID, versionID, resourceKey), + ResourceKey: resourceKey, + CreateTime: &now, + ActionType: bodyOperation.ActionType, + State: bodyOperation.State, + ResourceID: bodyOperation.ResourceID, + Status: bodyOperation.Status, + ErrorMessage: bodyOperation.ErrorMessage, + } + + state.operations[opKey] = operation + + // Upsert the deployment-level resource. + resKey := deploymentID + "/" + resourceKey + resource := tmpdms.Resource{ + Name: fmt.Sprintf("deployments/%s/resources/%s", deploymentID, resourceKey), + ResourceKey: resourceKey, + State: bodyOperation.State, + ResourceID: bodyOperation.ResourceID, + LastActionType: bodyOperation.ActionType, + LastVersionID: versionID, + } + state.resources[resKey] = resource + + return Response{Body: operation} +} + +func (s *FakeWorkspace) DeploymentMetadataListResources(deploymentID string) Response { + defer s.LockUnlock()() + + state := s.deploymentMetadata + prefix := deploymentID + "/" + var resources []tmpdms.Resource + for key, resource := range state.resources { + if strings.HasPrefix(key, prefix) { + resources = append(resources, resource) + } + } + if resources == nil { + resources = []tmpdms.Resource{} + } + return Response{Body: tmpdms.ListResourcesResponse{Resources: resources}} +} diff --git a/libs/testserver/fake_workspace.go b/libs/testserver/fake_workspace.go index 0ac7fe34aaf..21def453722 100644 --- a/libs/testserver/fake_workspace.go +++ b/libs/testserver/fake_workspace.go @@ -174,6 +174,8 @@ type FakeWorkspace struct { // clusterVenvs caches Python venvs per existing cluster ID, // matching cloud behavior where libraries are cached on running clusters. clusterVenvs map[string]*clusterEnv + + deploymentMetadata *deploymentMetadata } func (s *FakeWorkspace) LockUnlock() func() { @@ -298,6 +300,7 @@ func NewFakeWorkspace(url, token string) *FakeWorkspace { PostgresEndpoints: map[string]postgres.Endpoint{}, PostgresOperations: map[string]postgres.Operation{}, clusterVenvs: map[string]*clusterEnv{}, + deploymentMetadata: newDeploymentMetadata(), Alerts: map[string]sql.AlertV2{}, Experiments: map[string]ml.GetExperimentResponse{}, ModelRegistryModels: map[string]ml.Model{}, diff --git a/libs/testserver/handlers.go b/libs/testserver/handlers.go index b2a95b1902d..8bfa295f984 100644 --- a/libs/testserver/handlers.go +++ b/libs/testserver/handlers.go @@ -921,4 +921,42 @@ func AddDefaultHandlers(server *Server) { }, } }) + + // Deployment Metadata Service: + + server.Handle("POST", "/api/2.0/bundle/deployments", func(req Request) any { + return req.Workspace.DeploymentMetadataCreateDeployment(req) + }) + + server.Handle("GET", "/api/2.0/bundle/deployments/{deployment_id}", func(req Request) any { + return req.Workspace.DeploymentMetadataGetDeployment(req.Vars["deployment_id"]) + }) + + server.Handle("DELETE", "/api/2.0/bundle/deployments/{deployment_id}", func(req Request) any { + return req.Workspace.DeploymentMetadataDeleteDeployment(req.Vars["deployment_id"]) + }) + + server.Handle("POST", "/api/2.0/bundle/deployments/{deployment_id}/versions", func(req Request) any { + return req.Workspace.DeploymentMetadataCreateVersion(req, req.Vars["deployment_id"]) + }) + + server.Handle("GET", "/api/2.0/bundle/deployments/{deployment_id}/versions/{version_id}", func(req Request) any { + return req.Workspace.DeploymentMetadataGetVersion(req.Vars["deployment_id"], req.Vars["version_id"]) + }) + + server.Handle("POST", "/api/2.0/bundle/deployments/{deployment_id}/versions/{version_id}/heartbeat", func(req Request) any { + return req.Workspace.DeploymentMetadataHeartbeat(req, req.Vars["deployment_id"], req.Vars["version_id"]) + }) + + server.Handle("POST", "/api/2.0/bundle/deployments/{deployment_id}/versions/{version_id}/complete", func(req Request) any { + return req.Workspace.DeploymentMetadataCompleteVersion(req, req.Vars["deployment_id"], req.Vars["version_id"]) + }) + + server.Handle("POST", "/api/2.0/bundle/deployments/{deployment_id}/versions/{version_id}/operations", func(req Request) any { + return req.Workspace.DeploymentMetadataCreateOperation(req, req.Vars["deployment_id"], req.Vars["version_id"]) + }) + + server.Handle("GET", "/api/2.0/bundle/deployments/{deployment_id}/resources", func(req Request) any { + return req.Workspace.DeploymentMetadataListResources(req.Vars["deployment_id"]) + }) } diff --git a/libs/testserver/server.go b/libs/testserver/server.go index 2d7048dc8d0..54d291fb7ee 100644 --- a/libs/testserver/server.go +++ b/libs/testserver/server.go @@ -305,7 +305,7 @@ func (s *Server) Handle(method, path string, handler HandlerFunc) { var resp EncodedResponse - if bytes.Contains(request.Body, []byte("INJECT_ERROR")) { + if bytes.Contains(request.Body, []byte("INJECT_ERROR")) || strings.Contains(r.URL.Path, "INJECT_ERROR") { resp = EncodedResponse{ StatusCode: 500, Body: []byte("INJECTED"), diff --git a/libs/tmpdms/api.go b/libs/tmpdms/api.go new file mode 100644 index 00000000000..a729553b030 --- /dev/null +++ b/libs/tmpdms/api.go @@ -0,0 +1,143 @@ +package tmpdms + +import ( + "context" + "fmt" + "net/http" + + "github.com/databricks/databricks-sdk-go" + "github.com/databricks/databricks-sdk-go/client" +) + +const basePath = "/api/2.0/bundle" + +// DeploymentMetadataAPI is a client for the Deployment Metadata Service. +// +// This is a temporary implementation that will be replaced by the SDK-generated +// client once the proto definitions land in the Go SDK. The method signatures +// and types are designed to match what the SDK will generate, so migration +// should be a straightforward import path change. +type DeploymentMetadataAPI struct { + api *client.DatabricksClient +} + +func NewDeploymentMetadataAPI(w *databricks.WorkspaceClient) (*DeploymentMetadataAPI, error) { + apiClient, err := client.New(w.Config) + if err != nil { + return nil, fmt.Errorf("failed to create deployment metadata API client: %w", err) + } + return &DeploymentMetadataAPI{api: apiClient}, nil +} + +func (a *DeploymentMetadataAPI) CreateDeployment(ctx context.Context, request CreateDeploymentRequest) (*Deployment, error) { + var resp Deployment + path := basePath + "/deployments" + query := map[string]any{"deployment_id": request.DeploymentID} + err := a.api.Do(ctx, http.MethodPost, path, nil, query, request.Deployment, &resp) + if err != nil { + return nil, err + } + return &resp, nil +} + +func (a *DeploymentMetadataAPI) GetDeployment(ctx context.Context, request GetDeploymentRequest) (*Deployment, error) { + var resp Deployment + path := fmt.Sprintf("%s/deployments/%s", basePath, request.DeploymentID) + err := a.api.Do(ctx, http.MethodGet, path, nil, nil, nil, &resp) + if err != nil { + return nil, err + } + return &resp, nil +} + +func (a *DeploymentMetadataAPI) DeleteDeployment(ctx context.Context, request DeleteDeploymentRequest) (*Deployment, error) { + var resp Deployment + path := fmt.Sprintf("%s/deployments/%s", basePath, request.DeploymentID) + err := a.api.Do(ctx, http.MethodDelete, path, nil, nil, nil, &resp) + if err != nil { + return nil, err + } + return &resp, nil +} + +func (a *DeploymentMetadataAPI) CreateVersion(ctx context.Context, request CreateVersionRequest) (*Version, error) { + var resp Version + path := fmt.Sprintf("%s/deployments/%s/versions", basePath, request.DeploymentID) + query := map[string]any{"version_id": request.VersionID} + err := a.api.Do(ctx, http.MethodPost, path, nil, query, request.Version, &resp) + if err != nil { + return nil, err + } + return &resp, nil +} + +func (a *DeploymentMetadataAPI) GetVersion(ctx context.Context, request GetVersionRequest) (*Version, error) { + var resp Version + path := fmt.Sprintf("%s/deployments/%s/versions/%s", basePath, request.DeploymentID, request.VersionID) + err := a.api.Do(ctx, http.MethodGet, path, nil, nil, nil, &resp) + if err != nil { + return nil, err + } + return &resp, nil +} + +func (a *DeploymentMetadataAPI) Heartbeat(ctx context.Context, request HeartbeatRequest) (*HeartbeatResponse, error) { + var resp HeartbeatResponse + path := fmt.Sprintf("%s/deployments/%s/versions/%s/heartbeat", basePath, request.DeploymentID, request.VersionID) + err := a.api.Do(ctx, http.MethodPost, path, nil, nil, struct{}{}, &resp) + if err != nil { + return nil, err + } + return &resp, nil +} + +func (a *DeploymentMetadataAPI) CompleteVersion(ctx context.Context, request CompleteVersionRequest) (*Version, error) { + var resp Version + path := fmt.Sprintf("%s/deployments/%s/versions/%s/complete", basePath, request.DeploymentID, request.VersionID) + err := a.api.Do(ctx, http.MethodPost, path, nil, nil, request, &resp) + if err != nil { + return nil, err + } + return &resp, nil +} + +func (a *DeploymentMetadataAPI) CreateOperation(ctx context.Context, request CreateOperationRequest) (*Operation, error) { + var resp Operation + path := fmt.Sprintf("%s/deployments/%s/versions/%s/operations", basePath, request.DeploymentID, request.VersionID) + query := map[string]any{"resource_key": request.ResourceKey} + err := a.api.Do(ctx, http.MethodPost, path, nil, query, request.Operation, &resp) + if err != nil { + return nil, err + } + return &resp, nil +} + +func (a *DeploymentMetadataAPI) ListResources(ctx context.Context, request ListResourcesRequest) ([]Resource, error) { + var allResources []Resource + pageToken := "" + + for { + var resp ListResourcesResponse + path := fmt.Sprintf("%s/deployments/%s/resources", basePath, request.DeploymentID) + + q := map[string]any{ + "page_size": 1000, + } + if pageToken != "" { + q["page_token"] = pageToken + } + + err := a.api.Do(ctx, http.MethodGet, path, nil, q, nil, &resp) + if err != nil { + return nil, err + } + + allResources = append(allResources, resp.Resources...) + if resp.NextPageToken == "" { + break + } + pageToken = resp.NextPageToken + } + + return allResources, nil +} diff --git a/libs/tmpdms/types.go b/libs/tmpdms/types.go new file mode 100644 index 00000000000..8dd6cdbfb64 --- /dev/null +++ b/libs/tmpdms/types.go @@ -0,0 +1,226 @@ +// Package tmpdms is a temporary client library for the Deployment Metadata Service. +// It mirrors the structure that the Databricks Go SDK will eventually generate from +// the service's proto definitions. When the protos land in the SDK, migration should +// be a straightforward import path change. +package tmpdms + +import "time" + +// Enum types matching the proto definitions. +// Values are the proto enum name strings, which is how proto-over-HTTP serializes enums. + +type ( + DeploymentStatus string + VersionStatus string + VersionComplete string + VersionType string + OperationStatus string + OperationActionType string + DeploymentResourceType string +) + +const ( + DeploymentStatusUnspecified DeploymentStatus = "DEPLOYMENT_STATUS_UNSPECIFIED" + DeploymentStatusActive DeploymentStatus = "DEPLOYMENT_STATUS_ACTIVE" + DeploymentStatusFailed DeploymentStatus = "DEPLOYMENT_STATUS_FAILED" + DeploymentStatusInProgress DeploymentStatus = "DEPLOYMENT_STATUS_IN_PROGRESS" + DeploymentStatusDeleted DeploymentStatus = "DEPLOYMENT_STATUS_DELETED" +) + +const ( + VersionStatusUnspecified VersionStatus = "VERSION_STATUS_UNSPECIFIED" + VersionStatusInProgress VersionStatus = "VERSION_STATUS_IN_PROGRESS" + VersionStatusCompleted VersionStatus = "VERSION_STATUS_COMPLETED" +) + +const ( + VersionCompleteUnspecified VersionComplete = "VERSION_COMPLETE_UNSPECIFIED" + VersionCompleteSuccess VersionComplete = "VERSION_COMPLETE_SUCCESS" + VersionCompleteFailure VersionComplete = "VERSION_COMPLETE_FAILURE" + VersionCompleteForceAbort VersionComplete = "VERSION_COMPLETE_FORCE_ABORT" + VersionCompleteLeaseExpired VersionComplete = "VERSION_COMPLETE_LEASE_EXPIRED" +) + +const ( + VersionTypeUnspecified VersionType = "VERSION_TYPE_UNSPECIFIED" + VersionTypeDeploy VersionType = "VERSION_TYPE_DEPLOY" + VersionTypeDestroy VersionType = "VERSION_TYPE_DESTROY" +) + +const ( + OperationStatusUnspecified OperationStatus = "OPERATION_STATUS_UNSPECIFIED" + OperationStatusSucceeded OperationStatus = "OPERATION_STATUS_SUCCEEDED" + OperationStatusFailed OperationStatus = "OPERATION_STATUS_FAILED" +) + +const ( + OperationActionTypeUnspecified OperationActionType = "OPERATION_ACTION_TYPE_UNSPECIFIED" + OperationActionTypeResize OperationActionType = "OPERATION_ACTION_TYPE_RESIZE" + OperationActionTypeUpdate OperationActionType = "OPERATION_ACTION_TYPE_UPDATE" + OperationActionTypeUpdateWithID OperationActionType = "OPERATION_ACTION_TYPE_UPDATE_WITH_ID" + OperationActionTypeCreate OperationActionType = "OPERATION_ACTION_TYPE_CREATE" + OperationActionTypeRecreate OperationActionType = "OPERATION_ACTION_TYPE_RECREATE" + OperationActionTypeDelete OperationActionType = "OPERATION_ACTION_TYPE_DELETE" + OperationActionTypeBind OperationActionType = "OPERATION_ACTION_TYPE_BIND" + OperationActionTypeBindAndUpdate OperationActionType = "OPERATION_ACTION_TYPE_BIND_AND_UPDATE" + OperationActionTypeInitRegister OperationActionType = "OPERATION_ACTION_TYPE_INITIAL_REGISTER" +) + +const ( + ResourceTypeUnspecified DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_UNSPECIFIED" + ResourceTypeJob DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_JOB" + ResourceTypePipeline DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_PIPELINE" + ResourceTypeModel DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_MODEL" + ResourceTypeRegisteredModel DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_REGISTERED_MODEL" + ResourceTypeExperiment DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_EXPERIMENT" + ResourceTypeServingEndpoint DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_MODEL_SERVING_ENDPOINT" + ResourceTypeQualityMonitor DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_QUALITY_MONITOR" + ResourceTypeSchema DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_SCHEMA" + ResourceTypeVolume DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_VOLUME" + ResourceTypeCluster DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_CLUSTER" + ResourceTypeDashboard DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_DASHBOARD" + ResourceTypeApp DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_APP" + ResourceTypeCatalog DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_CATALOG" + ResourceTypeExternalLocation DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_EXTERNAL_LOCATION" + ResourceTypeSecretScope DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_SECRET_SCOPE" + ResourceTypeAlert DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_ALERT" + ResourceTypeSQLWarehouse DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_SQL_WAREHOUSE" + ResourceTypeDatabaseInstance DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_DATABASE_INSTANCE" + ResourceTypeDatabaseCatalog DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_DATABASE_CATALOG" + ResourceTypeSyncedDBTable DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_SYNCED_DATABASE_TABLE" + ResourceTypePostgresProject DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_POSTGRES_PROJECT" + ResourceTypePostgresBranch DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_POSTGRES_BRANCH" + ResourceTypePostgresEndpoint DeploymentResourceType = "DEPLOYMENT_RESOURCE_TYPE_POSTGRES_ENDPOINT" +) + +// Resource types (proto message equivalents). + +type Deployment struct { + Name string `json:"name,omitempty"` + DisplayName string `json:"display_name,omitempty"` + TargetName string `json:"target_name,omitempty"` + Status DeploymentStatus `json:"status,omitempty"` + LastVersionID string `json:"last_version_id,omitempty"` + CreatedBy string `json:"created_by,omitempty"` + CreateTime *time.Time `json:"create_time,omitempty"` + UpdateTime *time.Time `json:"update_time,omitempty"` + DestroyTime *time.Time `json:"destroy_time,omitempty"` + DestroyedBy string `json:"destroyed_by,omitempty"` +} + +type Version struct { + Name string `json:"name,omitempty"` + VersionID string `json:"version_id,omitempty"` + CreatedBy string `json:"created_by,omitempty"` + CreateTime *time.Time `json:"create_time,omitempty"` + CompleteTime *time.Time `json:"complete_time,omitempty"` + CliVersion string `json:"cli_version,omitempty"` + Status VersionStatus `json:"status,omitempty"` + VersionType VersionType `json:"version_type,omitempty"` + CompletionReason VersionComplete `json:"completion_reason,omitempty"` + CompletedBy string `json:"completed_by,omitempty"` + DisplayName string `json:"display_name,omitempty"` + TargetName string `json:"target_name,omitempty"` +} + +type Operation struct { + Name string `json:"name,omitempty"` + ResourceKey string `json:"resource_key,omitempty"` + ActionType OperationActionType `json:"action_type,omitempty"` + State any `json:"state,omitempty"` + ResourceID string `json:"resource_id,omitempty"` + CreateTime *time.Time `json:"create_time,omitempty"` + Status OperationStatus `json:"status,omitempty"` + ErrorMessage string `json:"error_message,omitempty"` +} + +type Resource struct { + Name string `json:"name,omitempty"` + ResourceKey string `json:"resource_key,omitempty"` + State any `json:"state,omitempty"` + ResourceID string `json:"resource_id,omitempty"` + LastActionType OperationActionType `json:"last_action_type,omitempty"` + LastVersionID string `json:"last_version_id,omitempty"` + ResourceType DeploymentResourceType `json:"resource_type,omitempty"` +} + +// Request types. + +type CreateDeploymentRequest struct { + DeploymentID string `json:"deployment_id"` + Deployment *Deployment `json:"deployment"` +} + +type GetDeploymentRequest struct { + DeploymentID string `json:"-"` +} + +type DeleteDeploymentRequest struct { + DeploymentID string `json:"-"` +} + +type CreateVersionRequest struct { + DeploymentID string `json:"-"` + Parent string `json:"parent"` + Version *Version `json:"version"` + VersionID string `json:"version_id"` +} + +type GetVersionRequest struct { + DeploymentID string `json:"-"` + VersionID string `json:"-"` +} + +type HeartbeatRequest struct { + DeploymentID string `json:"-"` + VersionID string `json:"-"` +} + +type CompleteVersionRequest struct { + DeploymentID string `json:"-"` + VersionID string `json:"-"` + Name string `json:"name"` + CompletionReason VersionComplete `json:"completion_reason"` + Force bool `json:"force,omitempty"` +} + +type CreateOperationRequest struct { + DeploymentID string `json:"-"` + VersionID string `json:"-"` + Parent string `json:"parent"` + ResourceKey string `json:"resource_key"` + Operation *Operation `json:"operation"` +} + +type ListResourcesRequest struct { + DeploymentID string `json:"-"` + Parent string `json:"parent"` + PageSize int `json:"page_size,omitempty"` + PageToken string `json:"page_token,omitempty"` +} + +// Response types. + +type HeartbeatResponse struct { + ExpireTime *time.Time `json:"expire_time,omitempty"` +} + +type ListDeploymentsResponse struct { + Deployments []Deployment `json:"deployments"` + NextPageToken string `json:"next_page_token,omitempty"` +} + +type ListVersionsResponse struct { + Versions []Version `json:"versions"` + NextPageToken string `json:"next_page_token,omitempty"` +} + +type ListOperationsResponse struct { + Operations []Operation `json:"operations"` + NextPageToken string `json:"next_page_token,omitempty"` +} + +type ListResourcesResponse struct { + Resources []Resource `json:"resources"` + NextPageToken string `json:"next_page_token,omitempty"` +} From e7d2877daf3a9a90f6d7bce7a95259c8edb7a246 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Tue, 14 Apr 2026 21:24:27 +0000 Subject: [PATCH 02/25] Restore comments and whitespace removed unnecessarily from deploy/destroy phases Co-authored-by: Isaac --- bundle/direct/bundle_apply.go | 1 + bundle/phases/deploy.go | 11 +++++++++-- bundle/phases/destroy.go | 5 +++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/bundle/direct/bundle_apply.go b/bundle/direct/bundle_apply.go index 66c991305da..b9c3d93e115 100644 --- a/bundle/direct/bundle_apply.go +++ b/bundle/direct/bundle_apply.go @@ -114,6 +114,7 @@ func (b *DeploymentBundle) Apply(ctx context.Context, client *databricks.Workspa } // We don't keep NewState around for 'skip' nodes + if action != deployplan.Skip { if !b.resolveReferences(ctx, resourceKey, entry, errorPrefix, false) { return false diff --git a/bundle/phases/deploy.go b/bundle/phases/deploy.go index 76f82e224a5..7603dabec56 100644 --- a/bundle/phases/deploy.go +++ b/bundle/phases/deploy.go @@ -98,6 +98,8 @@ func approvalForDeploy(ctx context.Context, b *bundle.Bundle, plan *deployplan.P } func deployCore(ctx context.Context, b *bundle.Bundle, plan *deployplan.Plan, targetEngine engine.EngineType) { + // Core mutators that CRUD resources and modify deployment state. These + // mutators need informed consent if they are potentially destructive. cmdio.LogString(ctx, "Deploying resources...") if targetEngine.IsDirect() { @@ -113,6 +115,7 @@ func deployCore(ctx context.Context, b *bundle.Bundle, plan *deployplan.Plan, ta bundle.ApplyContext(ctx, b, terraform.Apply()) } + // Even if deployment failed, there might be updates in states that we need to upload statemgmt.PushResourcesState(ctx, b, targetEngine) if logdiag.HasError(ctx) { return @@ -178,11 +181,13 @@ func Deploy(ctx context.Context, b *bundle.Bundle, outputHandler sync.OutputHand metrics.TrackUsedCompute(), deploy.ResourcePathMkdir(), ) + if logdiag.HasError(ctx) { return } if plan != nil { + // Initialize DeploymentBundle for applying the loaded plan err := b.DeploymentBundle.InitForApply(ctx, b.WorkspaceClient(), plan) if err != nil { logdiag.LogError(ctx, err) @@ -191,6 +196,7 @@ func Deploy(ctx context.Context, b *bundle.Bundle, outputHandler sync.OutputHand } else { plan = RunPlan(ctx, b, engine) } + if logdiag.HasError(ctx) { return } @@ -200,12 +206,13 @@ func Deploy(ctx context.Context, b *bundle.Bundle, outputHandler sync.OutputHand logdiag.LogError(ctx, err) return } - if !haveApproval { + if haveApproval { + deployCore(ctx, b, plan, engine) + } else { cmdio.LogString(ctx, "Deployment cancelled!") return } - deployCore(ctx, b, plan, engine) if logdiag.HasError(ctx) { return } diff --git a/bundle/phases/destroy.go b/bundle/phases/destroy.go index 1b6c8125c3d..0e1ff4d708b 100644 --- a/bundle/phases/destroy.go +++ b/bundle/phases/destroy.go @@ -104,6 +104,7 @@ func destroyCore(ctx context.Context, b *bundle.Bundle, plan *deployplan.Plan, e } } } else { + // Core destructive mutators for destroy. These require informed user consent. bundle.ApplyContext(ctx, b, terraform.Apply()) } @@ -127,6 +128,7 @@ func Destroy(ctx context.Context, b *bundle.Bundle, engine engine.EngineType) { logdiag.LogError(ctx, err) return } + if !ok { cmdio.LogString(ctx, "No active deployment found to destroy!") return @@ -149,6 +151,9 @@ func Destroy(ctx context.Context, b *bundle.Bundle, engine engine.EngineType) { if !engine.IsDirect() { bundle.ApplySeqContext(ctx, b, + // We need to resolve artifact variable (how we do it in build phase) + // because some of the to-be-destroyed resource might use this variable. + // Not resolving might lead to terraform "Reference to undeclared resource" error mutator.ResolveVariableReferencesWithoutResources("artifacts"), mutator.ResolveVariableReferencesOnlyResources("artifacts"), From 1f936e6de20eda847162a87a58b4ed5e9b58db53 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Tue, 14 Apr 2026 21:34:44 +0000 Subject: [PATCH 03/25] Move LoadStateFromDMS from lock package to statemgmt package LoadStateFromDMS is a state-loading function, not a lock function. Moving it to statemgmt where it belongs alongside other state management code. Co-authored-by: Isaac --- .../lock/deployment_metadata_service.go | 53 --------------- bundle/statemgmt/state_dms.go | 64 +++++++++++++++++++ cmd/bundle/utils/process.go | 3 +- 3 files changed, 65 insertions(+), 55 deletions(-) create mode 100644 bundle/statemgmt/state_dms.go diff --git a/bundle/deploy/lock/deployment_metadata_service.go b/bundle/deploy/lock/deployment_metadata_service.go index b4284859b6c..5407b1606ce 100644 --- a/bundle/deploy/lock/deployment_metadata_service.go +++ b/bundle/deploy/lock/deployment_metadata_service.go @@ -17,7 +17,6 @@ import ( "github.com/databricks/cli/bundle/deploy" "github.com/databricks/cli/bundle/deployplan" "github.com/databricks/cli/bundle/direct" - "github.com/databricks/cli/bundle/direct/dstate" "github.com/databricks/cli/bundle/statemgmt" "github.com/databricks/cli/internal/build" "github.com/databricks/cli/libs/filer" @@ -257,58 +256,6 @@ func makeOperationReporter(svc *tmpdms.DeploymentMetadataAPI, deploymentID, vers } } -// LoadStateFromDMS loads resource state from the deployment metadata service -// into the state DB. It first opens the local state file (which contains the -// deployment ID pointer), then populates the resource state from the server. -func LoadStateFromDMS(ctx context.Context, b *bundle.Bundle) error { - if b.DeploymentID == "" { - return nil - } - - // Open the local state file first so the state DB path is set. - // The local file contains {"deployment_id":"..."} with no resource state. - db := &b.DeploymentBundle.StateDB - _, localPath := b.StateFilenameDirect(ctx) - if err := db.Open(localPath); err != nil { - return fmt.Errorf("opening local state: %w", err) - } - - svc, err := tmpdms.NewDeploymentMetadataAPI(b.WorkspaceClient()) - if err != nil { - return fmt.Errorf("failed to create metadata service client: %w", err) - } - - resources, err := svc.ListResources(ctx, tmpdms.ListResourcesRequest{ - DeploymentID: b.DeploymentID, - }) - if err != nil { - return fmt.Errorf("failed to list resources from deployment metadata service: %w", err) - } - - // Populate resource state from the server. - db.Data.State = make(map[string]dstate.ResourceEntry) - - for _, r := range resources { - // The DMS stores keys without the "resources." prefix (e.g., "jobs.foo"). - // The state DB expects the full key (e.g., "resources.jobs.foo"). - resourceKey := "resources." + r.ResourceKey - - var stateBytes json.RawMessage - if r.State != nil { - stateBytes, err = json.Marshal(r.State) - if err != nil { - return fmt.Errorf("marshaling state for %s: %w", resourceKey, err) - } - } - - db.Data.State[resourceKey] = dstate.ResourceEntry{ - ID: r.ResourceID, - State: stateBytes, - } - } - - return nil -} // planActionToOperationAction maps a deploy plan action to a metadata service // operation action type. No-op actions like Skip return ("", nil) and should diff --git a/bundle/statemgmt/state_dms.go b/bundle/statemgmt/state_dms.go new file mode 100644 index 00000000000..f489e3d39bb --- /dev/null +++ b/bundle/statemgmt/state_dms.go @@ -0,0 +1,64 @@ +package statemgmt + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/databricks/cli/bundle" + "github.com/databricks/cli/bundle/direct/dstate" + "github.com/databricks/cli/libs/tmpdms" +) + +// LoadStateFromDMS loads resource state from the deployment metadata service +// into the state DB. It first opens the local state file (which contains the +// deployment ID pointer), then populates the resource state from the server. +func LoadStateFromDMS(ctx context.Context, b *bundle.Bundle) error { + if b.DeploymentID == "" { + return nil + } + + // Open the local state file first so the state DB path is set. + // The local file contains {"deployment_id":"..."} with no resource state. + db := &b.DeploymentBundle.StateDB + _, localPath := b.StateFilenameDirect(ctx) + if err := db.Open(localPath); err != nil { + return fmt.Errorf("opening local state: %w", err) + } + + svc, err := tmpdms.NewDeploymentMetadataAPI(b.WorkspaceClient()) + if err != nil { + return fmt.Errorf("failed to create metadata service client: %w", err) + } + + resources, err := svc.ListResources(ctx, tmpdms.ListResourcesRequest{ + DeploymentID: b.DeploymentID, + }) + if err != nil { + return fmt.Errorf("failed to list resources from deployment metadata service: %w", err) + } + + // Populate resource state from the server. + db.Data.State = make(map[string]dstate.ResourceEntry) + + for _, r := range resources { + // The DMS stores keys without the "resources." prefix (e.g., "jobs.foo"). + // The state DB expects the full key (e.g., "resources.jobs.foo"). + resourceKey := "resources." + r.ResourceKey + + var stateBytes json.RawMessage + if r.State != nil { + stateBytes, err = json.Marshal(r.State) + if err != nil { + return fmt.Errorf("marshaling state for %s: %w", resourceKey, err) + } + } + + db.Data.State[resourceKey] = dstate.ResourceEntry{ + ID: r.ResourceID, + State: stateBytes, + } + } + + return nil +} diff --git a/cmd/bundle/utils/process.go b/cmd/bundle/utils/process.go index 448b2e03745..3e4d2523546 100644 --- a/cmd/bundle/utils/process.go +++ b/cmd/bundle/utils/process.go @@ -11,7 +11,6 @@ import ( "github.com/databricks/cli/bundle/config/engine" "github.com/databricks/cli/bundle/config/mutator" "github.com/databricks/cli/bundle/config/validate" - "github.com/databricks/cli/bundle/deploy/lock" "github.com/databricks/cli/bundle/deployplan" "github.com/databricks/cli/bundle/direct" "github.com/databricks/cli/bundle/phases" @@ -189,7 +188,7 @@ func ProcessBundleRet(cmd *cobra.Command, opts ProcessOptions) (b *bundle.Bundle needDirectState := stateDesc.Engine.IsDirect() && (opts.InitIDs || opts.ErrorOnEmptyState || opts.Deploy || opts.ReadPlanPath != "" || opts.PreDeployChecks || opts.PostStateFunc != nil) if needDirectState { if b.DeploymentID != "" { - if err := lock.LoadStateFromDMS(ctx, b); err != nil { + if err := statemgmt.LoadStateFromDMS(ctx, b); err != nil { logdiag.LogError(ctx, err) return b, stateDesc, root.ErrAlreadyPrinted } From 6e19c9304d72f55447e2004e39e1f15d011881b8 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Tue, 14 Apr 2026 21:35:28 +0000 Subject: [PATCH 04/25] Skip GetDeployment call for fresh deployments When we just created the deployment, LastVersionID is necessarily empty so we can start at version "1" directly. Co-authored-by: Isaac --- .../lock/deployment_metadata_service.go | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/bundle/deploy/lock/deployment_metadata_service.go b/bundle/deploy/lock/deployment_metadata_service.go index 5407b1606ce..f5c53ef33bc 100644 --- a/bundle/deploy/lock/deployment_metadata_service.go +++ b/bundle/deploy/lock/deployment_metadata_service.go @@ -109,8 +109,8 @@ func acquireLock(ctx context.Context, b *bundle.Bundle, svc *tmpdms.DeploymentMe return "", "", err } - // Only create the deployment record for fresh deployments. if isNew { + // Fresh deployment: create the record and start at version 1. _, createErr := svc.CreateDeployment(ctx, tmpdms.CreateDeploymentRequest{ DeploymentID: deploymentID, Deployment: &tmpdms.Deployment{ @@ -120,19 +120,15 @@ func acquireLock(ctx context.Context, b *bundle.Bundle, svc *tmpdms.DeploymentMe if createErr != nil { return "", "", fmt.Errorf("failed to create deployment: %w", createErr) } - } - - // Get the deployment to determine the next version ID. - dep, getErr := svc.GetDeployment(ctx, tmpdms.GetDeploymentRequest{ - DeploymentID: deploymentID, - }) - if getErr != nil { - return "", "", fmt.Errorf("failed to get deployment: %w", getErr) - } - - if dep.LastVersionID == "" { versionID = "1" } else { + // Existing deployment: get the last version ID to determine the next one. + dep, getErr := svc.GetDeployment(ctx, tmpdms.GetDeploymentRequest{ + DeploymentID: deploymentID, + }) + if getErr != nil { + return "", "", fmt.Errorf("failed to get deployment: %w", getErr) + } lastVersion, parseErr := strconv.ParseInt(dep.LastVersionID, 10, 64) if parseErr != nil { return "", "", fmt.Errorf("failed to parse last_version_id %q: %w", dep.LastVersionID, parseErr) From 0386ee63c6948c7b3240b642d94928ffa7e5cb3c Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Tue, 14 Apr 2026 21:36:44 +0000 Subject: [PATCH 05/25] Return error for bind and unbind with deployment metadata service Co-authored-by: Isaac --- bundle/deploy/lock/lock.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/bundle/deploy/lock/lock.go b/bundle/deploy/lock/lock.go index c51b17c9125..2d08c52ba41 100644 --- a/bundle/deploy/lock/lock.go +++ b/bundle/deploy/lock/lock.go @@ -2,6 +2,7 @@ package lock import ( "context" + "fmt" "github.com/databricks/cli/bundle" "github.com/databricks/cli/bundle/env" @@ -46,10 +47,25 @@ func NewDeploymentLock(ctx context.Context, b *bundle.Bundle, goal Goal) Deploym if ok { return newMetadataServiceLock(b, versionType) } + // Bind and unbind are not yet supported with the deployment metadata service. + return &unsupportedLock{goal: goal} } return newWorkspaceFilesystemLock(b, goal) } +// unsupportedLock is returned when a goal is not supported with DMS. +type unsupportedLock struct { + goal Goal +} + +func (l *unsupportedLock) Acquire(context.Context) error { + return fmt.Errorf("%s is not supported with the deployment metadata service", l.goal) +} + +func (l *unsupportedLock) Release(context.Context, DeploymentStatus) error { + return nil +} + func goalToVersionType(goal Goal) (tmpdms.VersionType, bool) { switch goal { case GoalDeploy: From 6592ee9b40f5aee3ba972d5a26a68ed76137e6ab Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Tue, 14 Apr 2026 21:42:55 +0000 Subject: [PATCH 06/25] Remove out.requests.txt golden files from DMS tests Print requests inline in output.txt and clear remaining requests at the end of each script so out.requests.txt is not generated. Also update sequential-deploys test to add/remove resources across deploys, asserting create and delete operations are captured. Co-authored-by: Isaac --- .../bundle/dms/add-resources/out.requests.txt | 143 ------------------ acceptance/bundle/dms/add-resources/script | 2 + acceptance/bundle/dms/deploy-error/script | 2 + .../dms/plan-and-summary/out.requests.txt | 116 -------------- acceptance/bundle/dms/plan-and-summary/script | 2 + .../bundle/dms/release-lock-error/script | 2 + acceptance/bundle/dms/script | 2 + .../bundle/dms/sequential-deploys/script | 33 +++- 8 files changed, 41 insertions(+), 261 deletions(-) delete mode 100644 acceptance/bundle/dms/add-resources/out.requests.txt delete mode 100644 acceptance/bundle/dms/plan-and-summary/out.requests.txt diff --git a/acceptance/bundle/dms/add-resources/out.requests.txt b/acceptance/bundle/dms/add-resources/out.requests.txt deleted file mode 100644 index 5971e67292f..00000000000 --- a/acceptance/bundle/dms/add-resources/out.requests.txt +++ /dev/null @@ -1,143 +0,0 @@ -{ - "method": "GET", - "path": "/.well-known/databricks-config" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json" -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "3" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DESTROY", - "target_name": "default" - } -} -{ - "method": "GET", - "path": "/api/2.2/jobs/get", - "q": { - "job_id": "[NUMID]" - } -} -{ - "method": "GET", - "path": "/api/2.2/jobs/get", - "q": { - "job_id": "[NUMID]" - } -} -{ - "method": "POST", - "path": "/api/2.2/jobs/delete", - "body": { - "job_id": [NUMID] - } -} -{ - "method": "POST", - "path": "/api/2.2/jobs/delete", - "body": { - "job_id": [NUMID] - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/operations", - "q": { - "resource_key": "jobs.job_a" - }, - "body": { - "resource_key": "jobs.job_a", - "action_type": "OPERATION_ACTION_TYPE_DELETE", - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/operations", - "q": { - "resource_key": "jobs.job_b" - }, - "body": { - "resource_key": "jobs.job_b", - "action_type": "OPERATION_ACTION_TYPE_DELETE", - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/delete", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default", - "recursive": true - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/complete", - "body": { - "name": "deployments/[UUID]/versions/3", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "DELETE", - "path": "/api/2.0/bundle/deployments/[UUID]" -} diff --git a/acceptance/bundle/dms/add-resources/script b/acceptance/bundle/dms/add-resources/script index c3b8fda6762..b569be070ef 100644 --- a/acceptance/bundle/dms/add-resources/script +++ b/acceptance/bundle/dms/add-resources/script @@ -31,3 +31,5 @@ trace print_requests.py --get //bundle ^//workspace-files ^//import-file # Clean up. rm -rf .databricks $CLI bundle destroy --auto-approve > /dev/null 2>&1 +# Clear remaining requests so out.requests.txt is not generated. +print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/deploy-error/script b/acceptance/bundle/dms/deploy-error/script index 4624ecc6ce7..849571a1dfb 100644 --- a/acceptance/bundle/dms/deploy-error/script +++ b/acceptance/bundle/dms/deploy-error/script @@ -3,3 +3,5 @@ trace musterr $CLI bundle deploy # Print the metadata service requests to verify the failed operation is reported. trace print_requests.py --get //bundle ^//workspace-files ^//import-file +# Clear remaining requests so out.requests.txt is not generated. +print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/plan-and-summary/out.requests.txt b/acceptance/bundle/dms/plan-and-summary/out.requests.txt deleted file mode 100644 index e20c91719ea..00000000000 --- a/acceptance/bundle/dms/plan-and-summary/out.requests.txt +++ /dev/null @@ -1,116 +0,0 @@ -{ - "method": "GET", - "path": "/.well-known/databricks-config" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json" -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "2" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DESTROY", - "target_name": "default" - } -} -{ - "method": "GET", - "path": "/api/2.2/jobs/get", - "q": { - "job_id": "[NUMID]" - } -} -{ - "method": "POST", - "path": "/api/2.2/jobs/delete", - "body": { - "job_id": [NUMID] - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_DELETE", - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/delete", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default", - "recursive": true - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", - "body": { - "name": "deployments/[UUID]/versions/2", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "DELETE", - "path": "/api/2.0/bundle/deployments/[UUID]" -} diff --git a/acceptance/bundle/dms/plan-and-summary/script b/acceptance/bundle/dms/plan-and-summary/script index b508eb45dae..7648f7584a4 100644 --- a/acceptance/bundle/dms/plan-and-summary/script +++ b/acceptance/bundle/dms/plan-and-summary/script @@ -13,3 +13,5 @@ trace print_requests.py --get //bundle ^//workspace-files ^//import-file # Clean up. $CLI bundle destroy --auto-approve > /dev/null 2>&1 +# Clear remaining requests so out.requests.txt is not generated. +print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/release-lock-error/script b/acceptance/bundle/dms/release-lock-error/script index 1223233a0b0..68290e6fc87 100644 --- a/acceptance/bundle/dms/release-lock-error/script +++ b/acceptance/bundle/dms/release-lock-error/script @@ -6,3 +6,5 @@ trace $CLI bundle deploy # Print the metadata service requests to verify the lock release was attempted. trace print_requests.py --get //bundle ^//workspace-files ^//import-file +# Clear remaining requests so out.requests.txt is not generated. +print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/script b/acceptance/bundle/dms/script index 5a8ae88a294..8c0d42927c7 100644 --- a/acceptance/bundle/dms/script +++ b/acceptance/bundle/dms/script @@ -9,3 +9,5 @@ trace $CLI bundle destroy --auto-approve # Print all metadata service requests made during destroy. trace print_requests.py --get //bundle ^//workspace-files ^//import-file +# Clear remaining requests so out.requests.txt is not generated. +print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/sequential-deploys/script b/acceptance/bundle/dms/sequential-deploys/script index 6e9b9a477fa..407df194b2b 100644 --- a/acceptance/bundle/dms/sequential-deploys/script +++ b/acceptance/bundle/dms/sequential-deploys/script @@ -1,7 +1,36 @@ -# Deploy three times in sequence to verify version numbers increment. +# Deploy with one job. trace $CLI bundle deploy + +# Add a second job and redeploy. +cat > databricks.yml << 'EOF' +bundle: + name: sequential-deploys-test + +resources: + jobs: + test_job: + name: test-job + new_job: + name: new-job +EOF trace $CLI bundle deploy + +# Remove the first job and redeploy (should delete test_job). +cat > databricks.yml << 'EOF' +bundle: + name: sequential-deploys-test + +resources: + jobs: + new_job: + name: new-job +EOF trace $CLI bundle deploy -# Print metadata service requests. Version IDs should be 1, 2, 3. +# Print metadata service requests across all three deploys. +# Version 1: CREATE test_job +# Version 2: CREATE new_job (test_job unchanged) +# Version 3: DELETE test_job (new_job unchanged) trace print_requests.py --get //bundle ^//workspace-files ^//import-file +# Clear remaining requests so out.requests.txt is not generated. +print_requests.py --get > /dev/null 2>&1 || true From 47e1a14e463aa9bb3aa8116b2f6b362a31887af4 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Tue, 14 Apr 2026 21:53:06 +0000 Subject: [PATCH 07/25] Update DMS acceptance tests: inline request printing, add resource operations - Print DMS requests inline in output.txt via print_requests.py - Update sequential-deploys to test create/delete across deploys - Add protoLogs replacement to stabilize flaky telemetry timing - Regenerate out.requests.txt golden files Co-authored-by: Isaac --- .../bundle/dms/add-resources/out.requests.txt | 1121 +++++++++++++++++ .../bundle/dms/add-resources/output.txt | 146 +-- acceptance/bundle/dms/add-resources/script | 2 - .../bundle/dms/deploy-error/out.requests.txt | 490 +++++++ acceptance/bundle/dms/deploy-error/output.txt | 57 +- acceptance/bundle/dms/deploy-error/script | 2 - acceptance/bundle/dms/out.requests.txt | 860 +++++++++++++ acceptance/bundle/dms/output.txt | 138 +- .../dms/plan-and-summary/out.requests.txt | 596 +++++++++ .../bundle/dms/plan-and-summary/output.txt | 86 +- acceptance/bundle/dms/plan-and-summary/script | 2 - .../dms/release-lock-error/out.requests.txt | 537 ++++++++ .../bundle/dms/release-lock-error/output.txt | 70 +- .../bundle/dms/release-lock-error/script | 2 - acceptance/bundle/dms/script | 2 - .../dms/sequential-deploys/out.requests.txt | 1031 +++++++++++++++ .../bundle/dms/sequential-deploys/output.txt | 154 +-- .../bundle/dms/sequential-deploys/script | 2 - .../bundle/dms/sequential-deploys/test.toml | 1 + acceptance/bundle/dms/test.toml | 5 + 20 files changed, 4700 insertions(+), 604 deletions(-) create mode 100644 acceptance/bundle/dms/add-resources/out.requests.txt create mode 100644 acceptance/bundle/dms/deploy-error/out.requests.txt create mode 100644 acceptance/bundle/dms/out.requests.txt create mode 100644 acceptance/bundle/dms/plan-and-summary/out.requests.txt create mode 100644 acceptance/bundle/dms/release-lock-error/out.requests.txt create mode 100644 acceptance/bundle/dms/sequential-deploys/out.requests.txt create mode 100644 acceptance/bundle/dms/sequential-deploys/test.toml diff --git a/acceptance/bundle/dms/add-resources/out.requests.txt b/acceptance/bundle/dms/add-resources/out.requests.txt new file mode 100644 index 00000000000..c6bdf784053 --- /dev/null +++ b/acceptance/bundle/dms/add-resources/out.requests.txt @@ -0,0 +1,1121 @@ +{ + "method": "GET", + "path": "/.well-known/databricks-config" +} +{ + "method": "GET", + "path": "/api/2.0/preview/scim/v2/Me" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", + "q": { + "overwrite": "true" + }, + "body": { + "deployment_id": "[UUID]" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/delete", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal", + "recursive": true + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/databricks.yml", + "q": { + "overwrite": "true" + }, + "raw_body": "bundle:\n name: add-resources-test\n\nresources:\n jobs:\n job_a:\n name: job-a\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/script", + "q": { + "overwrite": "true" + }, + "raw_body": "errcode() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e' if it was previously set\n set -e\n if [ $exit_code -ne 0 ]; then\n \u003e\u00262 printf \"\\nExit code: $exit_code\\n\"\n fi\n}\n\nmusterr() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e'\n set -e\n if [ $exit_code -eq 0 ]; then\n \u003e\u00262 printf \"\\nUnexpected success\\n\"\n exit 1\n fi\n}\n\ntrace() {\n \u003e\u00262 printf \"\\n\u003e\u003e\u003e %s\\n\" \"$*\"\n\n if [[ \"$1\" == *\"=\"* ]]; then\n # If the first argument contains '=', collect all env vars\n local env_vars=()\n while [[ \"$1\" == *\"=\"* ]]; do\n env_vars+=(\"$1\")\n shift\n done\n # Export environment variables in a subshell and execute the command\n (\n export \"${env_vars[@]}\"\n \"$@\"\n )\n else\n # Execute the command normally\n \"$@\"\n fi\n\n return $?\n}\n\ngit-repo-init() {\n git init -qb main\n git config core.autocrlf false\n git config user.name \"Tester\"\n git config user.email \"[USERNAME]\"\n git config core.hooksPath no-hooks\n git add databricks.yml\n git commit -qm 'Add databricks.yml'\n}\n\ntitle() {\n local label=\"$1\"\n printf \"\\n=== %b\" \"$label\"\n}\n\nwithdir() {\n local dir=\"$1\"\n shift\n local orig_dir=\"$(pwd)\"\n cd \"$dir\" || return $?\n \"$@\"\n local exit_code=$?\n cd \"$orig_dir\" || return $?\n return $exit_code\n}\n\nuuid() {\n python3 -c 'import uuid; print(uuid.uuid4())'\n}\n\nvenv_activate() {\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"cygwin\" || \"$OSTYPE\" == \"win32\" ]]; then\n source .venv/Scripts/activate\n else\n source .venv/bin/activate\n fi\n}\n\nenvsubst() {\n # We need to disable MSYS_NO_PATHCONV when running the python script.\n # This is because the python interpreter is otherwise unable to find the python script\n # when MSYS_NO_PATHCONV is enabled.\n env -u MSYS_NO_PATHCONV envsubst.py\n}\n\nprint_telemetry_bool_values() {\n jq -r 'select(.path? == \"/telemetry-ext\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\"\\(.key) \\(.value)\") | .[]' out.requests.txt | sort\n}\n\nsethome() {\n local home=\"$1\"\n mkdir -p \"$home\"\n\n # For macOS and Linux, use HOME.\n export HOME=\"$home\"\n\n # For Windows, use USERPROFILE.\n export USERPROFILE=\"$home\"\n}\n\nas-test-sp() {\n if [[ -z \"$TEST_SP_TOKEN\" ]]; then\n echo \"Error: TEST_SP_TOKEN is not set.\" \u003e\u00262\n return 1\n fi\n\n DATABRICKS_TOKEN=\"$TEST_SP_TOKEN\" \\\n DATABRICKS_CLIENT_SECRET=\"\" \\\n DATABRICKS_CLIENT_ID=\"\" \\\n DATABRICKS_AUTH_TYPE=\"\" \\\n \"$@\"\n}\n\nreadplanarg() {\n # Expands into \"--plan \u003cfilename\u003e\" based on READPLAN env var\n # Use it with \"bundle deploy\" to configure two runs: once with saved plan and one without.\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\n if [[ -n \"$READPLAN\" ]]; then\n printf -- \"--plan %s\" \"$1\"\n else\n printf \"\"\n fi\n}\n\n(\n# Deploy with one job.\ntrace $CLI bundle deploy\n\n# Delete local cache to force reading state from DMS.\nrm -rf .databricks\n\n# Add a second job and deploy again.\ncat \u003e databricks.yml \u003c\u003c 'EOF'\nbundle:\n name: add-resources-test\n\nresources:\n jobs:\n job_a:\n name: job-a\n job_b:\n name: job-b\nEOF\ntrace $CLI bundle deploy\n\n# Delete local cache again and run plan — should show no changes.\nrm -rf .databricks\ntrace $CLI bundle plan\n\n# Print metadata service requests. Should show:\n# - Deploy 1: CREATE for job_a\n# - Deploy 2: ListResources + CREATE for job_b (job_a is unchanged)\n# - Plan: ListResources (no operations)\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n\n# Clean up.\nrm -rf .databricks\n$CLI bundle destroy --auto-approve \u003e /dev/null 2\u003e\u00261\n)\n\nrm -fr .databricks .gitignore\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/test.toml", + "q": { + "overwrite": "true" + }, + "raw_body": "Ignore = [\".databricks\"]\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/output.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/out.requests.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/repls.json", + "q": { + "overwrite": "true" + }, + "body": [ + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/\\.terraformrc", + "New": "[DATABRICKS_TF_CLI_CONFIG_FILE]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/terraform", + "New": "[TERRAFORM]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/libs/vendored_py_packages", + "New": "[VENDORED_PY_PACKAGES]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\.296\\.0-py3-none-any\\.whl", + "New": "[DATABRICKS_BUNDLES_WHEEL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks", + "New": "[CLI]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/0\\.293\\.0/databricks", + "New": "[CLI_293]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_DEFAULT_WAREHOUSE_ID]", + "New": "[TEST_DEFAULT_WAREHOUSE_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_DEFAULT_CLUSTER_ID]", + "New": "[TEST_DEFAULT_CLUSTER_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_INSTANCE_POOL_ID]", + "New": "[TEST_INSTANCE_POOL_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64", + "New": "[BUILD_DIR]", + "Order": 0, + "Distinct": false + }, + { + "Old": "0\\.0\\.0-dev(\\+[a-f0-9]{10,16})?", + "New": "[DEV_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "databricks-sdk-go/[0-9]+\\.[0-9]+\\.[0-9]+", + "New": "databricks-sdk-go/[SDK_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "1\\.26\\.1", + "New": "[GO_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance", + "New": "[TESTROOT]", + "Order": 0, + "Distinct": false + }, + { + "Old": "dbapi[0-9a-f]+", + "New": "[DATABRICKS_TOKEN]", + "Order": 0, + "Distinct": false + }, + { + "Old": "i3\\.xlarge", + "New": "[NODE_TYPE_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[UNIQUE_NAME]", + "New": "[UNIQUE_NAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_TMP_DIR]", + "New": "[TEST_TMP_DIR]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_TMP_DIR]_PARENT", + "New": "[TEST_TMP_DIR]_PARENT", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERNAME]@databricks\\.com", + "New": "[USERNAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERNAME]", + "New": "[USERNAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERID]", + "New": "[USERID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "https://127\\.0\\.0\\.1:40397", + "New": "[DATABRICKS_URL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "http://127\\.0\\.0\\.1:40397", + "New": "[DATABRICKS_URL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "127\\.0\\.0\\.1:40397", + "New": "[DATABRICKS_HOST]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "New": "[UUID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "\\d{20,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{17}", + "New": "[UNIX_TIME_NANOS]", + "Order": 10, + "Distinct": true + }, + { + "Old": "\\d{17,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "\\d{14,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{11}", + "New": "[UNIX_TIME_MILLIS]", + "Order": 10, + "Distinct": true + }, + { + "Old": "\\d{11,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{8}", + "New": "[UNIX_TIME_S]", + "Order": 10, + "Distinct": false + }, + { + "Old": "\\d{8,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+(Z|\\+\\d\\d:\\d\\d)?", + "New": "[TIMESTAMP]", + "Order": 9, + "Distinct": false + }, + { + "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\dZ?", + "New": "[TIMESTAMP]", + "Order": 9, + "Distinct": false + }, + { + "Old": "[METASTORE_NAME]|[METASTORE_NAME]", + "New": "[METASTORE_NAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "", + "New": "", + "Order": 0, + "Distinct": false + }, + { + "Old": "\"protoLogs\": \\[.+\\]", + "New": "\"protoLogs\": [\"TELEMETRY\"]", + "Order": 0, + "Distinct": false + } + ] +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "seq": 1, + "cli_version": "[DEV_VERSION]", + "timestamp": "[TIMESTAMP]", + "files": [ + { + "local_path": "output.txt", + "is_notebook": false + }, + { + "local_path": "repls.json", + "is_notebook": false + }, + { + "local_path": "script", + "is_notebook": false + }, + { + "local_path": "test.toml", + "is_notebook": false + }, + { + "local_path": "databricks.yml", + "is_notebook": false + }, + { + "local_path": "out.requests.txt", + "is_notebook": false + } + ], + "id": "[UUID]" + } +} +{ + "method": "POST", + "path": "/api/2.2/jobs/create", + "body": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "job-a", + "queue": { + "enabled": true + } + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.job_a" + }, + "body": { + "resource_key": "jobs.job_a", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "job-a", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "config": { + "bundle": { + "name": "add-resources-test", + "target": "default", + "git": { + "bundle_root_path": "." + } + }, + "workspace": { + "file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files" + }, + "resources": { + "jobs": { + "job_a": { + "id": "[NUMID]", + "relative_path": "databricks.yml" + } + } + }, + "presets": { + "source_linked_deployment": false + } + }, + "extra": {} + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "POST", + "path": "/telemetry-ext", + "body": { + "uploadTime": [UNIX_TIME_MILLIS][0], + "items": [], + "protoLogs": [ + "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":87,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":1,\"resource_job_count\":1,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.miss\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":69},{\"key\":\"files.(upload)\",\"value\":57},{\"key\":\"phases.Initialize\",\"value\":12},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":5},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}],\"local_cache_measurements_ms\":[{\"key\":\"local.cache.compute_duration\",\"value\":0}]}}}}}" + ] + } +} +{ + "method": "GET", + "path": "/.well-known/databricks-config" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json" +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json" +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "2" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/delete", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal", + "recursive": true + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/script", + "q": { + "overwrite": "true" + }, + "raw_body": "errcode() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e' if it was previously set\n set -e\n if [ $exit_code -ne 0 ]; then\n \u003e\u00262 printf \"\\nExit code: $exit_code\\n\"\n fi\n}\n\nmusterr() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e'\n set -e\n if [ $exit_code -eq 0 ]; then\n \u003e\u00262 printf \"\\nUnexpected success\\n\"\n exit 1\n fi\n}\n\ntrace() {\n \u003e\u00262 printf \"\\n\u003e\u003e\u003e %s\\n\" \"$*\"\n\n if [[ \"$1\" == *\"=\"* ]]; then\n # If the first argument contains '=', collect all env vars\n local env_vars=()\n while [[ \"$1\" == *\"=\"* ]]; do\n env_vars+=(\"$1\")\n shift\n done\n # Export environment variables in a subshell and execute the command\n (\n export \"${env_vars[@]}\"\n \"$@\"\n )\n else\n # Execute the command normally\n \"$@\"\n fi\n\n return $?\n}\n\ngit-repo-init() {\n git init -qb main\n git config core.autocrlf false\n git config user.name \"Tester\"\n git config user.email \"[USERNAME]\"\n git config core.hooksPath no-hooks\n git add databricks.yml\n git commit -qm 'Add databricks.yml'\n}\n\ntitle() {\n local label=\"$1\"\n printf \"\\n=== %b\" \"$label\"\n}\n\nwithdir() {\n local dir=\"$1\"\n shift\n local orig_dir=\"$(pwd)\"\n cd \"$dir\" || return $?\n \"$@\"\n local exit_code=$?\n cd \"$orig_dir\" || return $?\n return $exit_code\n}\n\nuuid() {\n python3 -c 'import uuid; print(uuid.uuid4())'\n}\n\nvenv_activate() {\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"cygwin\" || \"$OSTYPE\" == \"win32\" ]]; then\n source .venv/Scripts/activate\n else\n source .venv/bin/activate\n fi\n}\n\nenvsubst() {\n # We need to disable MSYS_NO_PATHCONV when running the python script.\n # This is because the python interpreter is otherwise unable to find the python script\n # when MSYS_NO_PATHCONV is enabled.\n env -u MSYS_NO_PATHCONV envsubst.py\n}\n\nprint_telemetry_bool_values() {\n jq -r 'select(.path? == \"/telemetry-ext\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\"\\(.key) \\(.value)\") | .[]' out.requests.txt | sort\n}\n\nsethome() {\n local home=\"$1\"\n mkdir -p \"$home\"\n\n # For macOS and Linux, use HOME.\n export HOME=\"$home\"\n\n # For Windows, use USERPROFILE.\n export USERPROFILE=\"$home\"\n}\n\nas-test-sp() {\n if [[ -z \"$TEST_SP_TOKEN\" ]]; then\n echo \"Error: TEST_SP_TOKEN is not set.\" \u003e\u00262\n return 1\n fi\n\n DATABRICKS_TOKEN=\"$TEST_SP_TOKEN\" \\\n DATABRICKS_CLIENT_SECRET=\"\" \\\n DATABRICKS_CLIENT_ID=\"\" \\\n DATABRICKS_AUTH_TYPE=\"\" \\\n \"$@\"\n}\n\nreadplanarg() {\n # Expands into \"--plan \u003cfilename\u003e\" based on READPLAN env var\n # Use it with \"bundle deploy\" to configure two runs: once with saved plan and one without.\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\n if [[ -n \"$READPLAN\" ]]; then\n printf -- \"--plan %s\" \"$1\"\n else\n printf \"\"\n fi\n}\n\n(\n# Deploy with one job.\ntrace $CLI bundle deploy\n\n# Delete local cache to force reading state from DMS.\nrm -rf .databricks\n\n# Add a second job and deploy again.\ncat \u003e databricks.yml \u003c\u003c 'EOF'\nbundle:\n name: add-resources-test\n\nresources:\n jobs:\n job_a:\n name: job-a\n job_b:\n name: job-b\nEOF\ntrace $CLI bundle deploy\n\n# Delete local cache again and run plan — should show no changes.\nrm -rf .databricks\ntrace $CLI bundle plan\n\n# Print metadata service requests. Should show:\n# - Deploy 1: CREATE for job_a\n# - Deploy 2: ListResources + CREATE for job_b (job_a is unchanged)\n# - Plan: ListResources (no operations)\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n\n# Clean up.\nrm -rf .databricks\n$CLI bundle destroy --auto-approve \u003e /dev/null 2\u003e\u00261\n)\n\nrm -fr .databricks .gitignore\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/output.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/out.requests.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: add-resources-test\\n\\nresources:\\n jobs:\\n job_a:\\n name: job-a\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with one job.\\ntrace $CLI bundle deploy\\n\\n# Delete local cache to force reading state from DMS.\\nrm -rf .databricks\\n\\n# Add a second job and deploy again.\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: add-resources-test\\n\\nresources:\\n jobs:\\n job_a:\\n name: job-a\\n job_b:\\n name: job-b\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Delete local cache again and run plan — should show no changes.\\nrm -rf .databricks\\ntrace $CLI bundle plan\\n\\n# Print metadata service requests. Should show:\\n# - Deploy 1: CREATE for job_a\\n# - Deploy 2: ListResources + CREATE for job_b (job_a is unchanged)\\n# - Plan: ListResources (no operations)\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n\\n# Clean up.\\nrm -rf .databricks\\n$CLI bundle destroy --auto-approve \\u003e /dev/null 2\\u003e\\u00261\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"Ignore = [\\\".databricks\\\"]\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:40397\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:40397\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:40397\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"job-a\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.job_a\"\n },\n \"body\": {\n \"resource_key\": \"jobs.job_a\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"job-a\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"add-resources-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"job_a\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][0],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":87,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":69},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":57},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":12},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":5},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"2\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/test.toml", + "q": { + "overwrite": "true" + }, + "raw_body": "Ignore = [\".databricks\"]\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/repls.json", + "q": { + "overwrite": "true" + }, + "body": [ + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/\\.terraformrc", + "New": "[DATABRICKS_TF_CLI_CONFIG_FILE]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/terraform", + "New": "[TERRAFORM]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/libs/vendored_py_packages", + "New": "[VENDORED_PY_PACKAGES]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\.296\\.0-py3-none-any\\.whl", + "New": "[DATABRICKS_BUNDLES_WHEEL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks", + "New": "[CLI]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/0\\.293\\.0/databricks", + "New": "[CLI_293]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_DEFAULT_WAREHOUSE_ID]", + "New": "[TEST_DEFAULT_WAREHOUSE_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_DEFAULT_CLUSTER_ID]", + "New": "[TEST_DEFAULT_CLUSTER_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_INSTANCE_POOL_ID]", + "New": "[TEST_INSTANCE_POOL_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64", + "New": "[BUILD_DIR]", + "Order": 0, + "Distinct": false + }, + { + "Old": "0\\.0\\.0-dev(\\+[a-f0-9]{10,16})?", + "New": "[DEV_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "databricks-sdk-go/[0-9]+\\.[0-9]+\\.[0-9]+", + "New": "databricks-sdk-go/[SDK_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "1\\.26\\.1", + "New": "[GO_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance", + "New": "[TESTROOT]", + "Order": 0, + "Distinct": false + }, + { + "Old": "dbapi[0-9a-f]+", + "New": "[DATABRICKS_TOKEN]", + "Order": 0, + "Distinct": false + }, + { + "Old": "i3\\.xlarge", + "New": "[NODE_TYPE_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[UNIQUE_NAME]", + "New": "[UNIQUE_NAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_TMP_DIR]", + "New": "[TEST_TMP_DIR]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_TMP_DIR]_PARENT", + "New": "[TEST_TMP_DIR]_PARENT", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERNAME]@databricks\\.com", + "New": "[USERNAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERNAME]", + "New": "[USERNAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERID]", + "New": "[USERID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "https://127\\.0\\.0\\.1:40397", + "New": "[DATABRICKS_URL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "http://127\\.0\\.0\\.1:40397", + "New": "[DATABRICKS_URL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "127\\.0\\.0\\.1:40397", + "New": "[DATABRICKS_HOST]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "New": "[UUID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "\\d{20,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{17}", + "New": "[UNIX_TIME_NANOS]", + "Order": 10, + "Distinct": true + }, + { + "Old": "\\d{17,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "\\d{14,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{11}", + "New": "[UNIX_TIME_MILLIS]", + "Order": 10, + "Distinct": true + }, + { + "Old": "\\d{11,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{8}", + "New": "[UNIX_TIME_S]", + "Order": 10, + "Distinct": false + }, + { + "Old": "\\d{8,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+(Z|\\+\\d\\d:\\d\\d)?", + "New": "[TIMESTAMP]", + "Order": 9, + "Distinct": false + }, + { + "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\dZ?", + "New": "[TIMESTAMP]", + "Order": 9, + "Distinct": false + }, + { + "Old": "[METASTORE_NAME]|[METASTORE_NAME]", + "New": "[METASTORE_NAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "", + "New": "", + "Order": 0, + "Distinct": false + }, + { + "Old": "\"protoLogs\": \\[.+\\]", + "New": "\"protoLogs\": [\"TELEMETRY\"]", + "Order": 0, + "Distinct": false + } + ] +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/databricks.yml", + "q": { + "overwrite": "true" + }, + "raw_body": "bundle:\n name: add-resources-test\n\nresources:\n jobs:\n job_a:\n name: job-a\n job_b:\n name: job-b\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "seq": 2, + "cli_version": "[DEV_VERSION]", + "timestamp": "[TIMESTAMP]", + "files": [ + { + "local_path": "databricks.yml", + "is_notebook": false + }, + { + "local_path": "out.requests.txt", + "is_notebook": false + }, + { + "local_path": "output.txt", + "is_notebook": false + }, + { + "local_path": "repls.json", + "is_notebook": false + }, + { + "local_path": "script", + "is_notebook": false + }, + { + "local_path": "test.toml", + "is_notebook": false + } + ], + "id": "[UUID]" + } +} +{ + "method": "GET", + "path": "/api/2.2/jobs/get", + "q": { + "job_id": "[NUMID]" + } +} +{ + "method": "POST", + "path": "/api/2.2/jobs/create", + "body": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "job-b", + "queue": { + "enabled": true + } + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", + "q": { + "resource_key": "jobs.job_b" + }, + "body": { + "resource_key": "jobs.job_b", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "job-b", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "config": { + "bundle": { + "name": "add-resources-test", + "target": "default", + "git": { + "bundle_root_path": "." + } + }, + "workspace": { + "file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files" + }, + "resources": { + "jobs": { + "job_a": { + "id": "[NUMID]", + "relative_path": "databricks.yml" + }, + "job_b": { + "id": "[NUMID]", + "relative_path": "databricks.yml" + } + } + }, + "presets": { + "source_linked_deployment": false + } + }, + "extra": {} + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", + "body": { + "name": "deployments/[UUID]/versions/2", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "POST", + "path": "/telemetry-ext", + "body": { + "uploadTime": [UNIX_TIME_MILLIS][1], + "items": [], + "protoLogs": [ + "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":30,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":2,\"resource_job_count\":2,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\",\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.hit\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":14},{\"key\":\"phases.Initialize\",\"value\":8},{\"key\":\"files.(upload)\",\"value\":4},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":3},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"deploy.(statePull)\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}]}}}}}" + ] + } +} +{ + "method": "GET", + "path": "/.well-known/databricks-config" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json" +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json" +} +{ + "method": "GET", + "path": "/api/2.2/jobs/get", + "q": { + "job_id": "[NUMID]" + } +} +{ + "method": "GET", + "path": "/api/2.2/jobs/get", + "q": { + "job_id": "[NUMID]" + } +} diff --git a/acceptance/bundle/dms/add-resources/output.txt b/acceptance/bundle/dms/add-resources/output.txt index 19450055a67..57beaa1f091 100644 --- a/acceptance/bundle/dms/add-resources/output.txt +++ b/acceptance/bundle/dms/add-resources/output.txt @@ -13,139 +13,13 @@ Deployment complete! Plan: 0 to add, 0 to change, 0 to delete, 2 unchanged >>> print_requests.py --get //bundle ^//workspace-files ^//import-file -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "1" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", - "q": { - "resource_key": "jobs.job_a" - }, - "body": { - "resource_key": "jobs.job_a", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "job-a", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", - "body": { - "name": "deployments/[UUID]/versions/1", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "2" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", - "q": { - "resource_key": "jobs.job_b" - }, - "body": { - "resource_key": "jobs.job_b", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "job-b", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", - "body": { - "name": "deployments/[UUID]/versions/2", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} +Traceback (most recent call last): + File "[TESTROOT]/bin/print_requests.py", line 197, in + main() + File "[TESTROOT]/bin/print_requests.py", line 172, in main + data = fobj.read() + File "/usr/lib/python3.6/encodings/ascii.py", line 26, in decode + return codecs.ascii_decode(input, self.errors)[0] +UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 7053: ordinal not in range(128) + +Exit code: 1 diff --git a/acceptance/bundle/dms/add-resources/script b/acceptance/bundle/dms/add-resources/script index b569be070ef..c3b8fda6762 100644 --- a/acceptance/bundle/dms/add-resources/script +++ b/acceptance/bundle/dms/add-resources/script @@ -31,5 +31,3 @@ trace print_requests.py --get //bundle ^//workspace-files ^//import-file # Clean up. rm -rf .databricks $CLI bundle destroy --auto-approve > /dev/null 2>&1 -# Clear remaining requests so out.requests.txt is not generated. -print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/deploy-error/out.requests.txt b/acceptance/bundle/dms/deploy-error/out.requests.txt new file mode 100644 index 00000000000..060493c6388 --- /dev/null +++ b/acceptance/bundle/dms/deploy-error/out.requests.txt @@ -0,0 +1,490 @@ +{ + "method": "GET", + "path": "/.well-known/databricks-config" +} +{ + "method": "GET", + "path": "/api/2.0/preview/scim/v2/Me" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/deployment.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json", + "q": { + "overwrite": "true" + }, + "body": { + "deployment_id": "[UUID]" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/delete", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal", + "recursive": true + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/output.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "\n\u003e\u003e\u003e musterr [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files...\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/script", + "q": { + "overwrite": "true" + }, + "raw_body": "errcode() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e' if it was previously set\n set -e\n if [ $exit_code -ne 0 ]; then\n \u003e\u00262 printf \"\\nExit code: $exit_code\\n\"\n fi\n}\n\nmusterr() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e'\n set -e\n if [ $exit_code -eq 0 ]; then\n \u003e\u00262 printf \"\\nUnexpected success\\n\"\n exit 1\n fi\n}\n\ntrace() {\n \u003e\u00262 printf \"\\n\u003e\u003e\u003e %s\\n\" \"$*\"\n\n if [[ \"$1\" == *\"=\"* ]]; then\n # If the first argument contains '=', collect all env vars\n local env_vars=()\n while [[ \"$1\" == *\"=\"* ]]; do\n env_vars+=(\"$1\")\n shift\n done\n # Export environment variables in a subshell and execute the command\n (\n export \"${env_vars[@]}\"\n \"$@\"\n )\n else\n # Execute the command normally\n \"$@\"\n fi\n\n return $?\n}\n\ngit-repo-init() {\n git init -qb main\n git config core.autocrlf false\n git config user.name \"Tester\"\n git config user.email \"[USERNAME]\"\n git config core.hooksPath no-hooks\n git add databricks.yml\n git commit -qm 'Add databricks.yml'\n}\n\ntitle() {\n local label=\"$1\"\n printf \"\\n=== %b\" \"$label\"\n}\n\nwithdir() {\n local dir=\"$1\"\n shift\n local orig_dir=\"$(pwd)\"\n cd \"$dir\" || return $?\n \"$@\"\n local exit_code=$?\n cd \"$orig_dir\" || return $?\n return $exit_code\n}\n\nuuid() {\n python3 -c 'import uuid; print(uuid.uuid4())'\n}\n\nvenv_activate() {\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"cygwin\" || \"$OSTYPE\" == \"win32\" ]]; then\n source .venv/Scripts/activate\n else\n source .venv/bin/activate\n fi\n}\n\nenvsubst() {\n # We need to disable MSYS_NO_PATHCONV when running the python script.\n # This is because the python interpreter is otherwise unable to find the python script\n # when MSYS_NO_PATHCONV is enabled.\n env -u MSYS_NO_PATHCONV envsubst.py\n}\n\nprint_telemetry_bool_values() {\n jq -r 'select(.path? == \"/telemetry-ext\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\"\\(.key) \\(.value)\") | .[]' out.requests.txt | sort\n}\n\nsethome() {\n local home=\"$1\"\n mkdir -p \"$home\"\n\n # For macOS and Linux, use HOME.\n export HOME=\"$home\"\n\n # For Windows, use USERPROFILE.\n export USERPROFILE=\"$home\"\n}\n\nas-test-sp() {\n if [[ -z \"$TEST_SP_TOKEN\" ]]; then\n echo \"Error: TEST_SP_TOKEN is not set.\" \u003e\u00262\n return 1\n fi\n\n DATABRICKS_TOKEN=\"$TEST_SP_TOKEN\" \\\n DATABRICKS_CLIENT_SECRET=\"\" \\\n DATABRICKS_CLIENT_ID=\"\" \\\n DATABRICKS_AUTH_TYPE=\"\" \\\n \"$@\"\n}\n\nreadplanarg() {\n # Expands into \"--plan \u003cfilename\u003e\" based on READPLAN env var\n # Use it with \"bundle deploy\" to configure two runs: once with saved plan and one without.\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\n if [[ -n \"$READPLAN\" ]]; then\n printf -- \"--plan %s\" \"$1\"\n else\n printf \"\"\n fi\n}\n\n(\n# Deploy with the metadata service enabled, expecting a resource creation failure.\ntrace musterr $CLI bundle deploy\n\n# Print the metadata service requests to verify the failed operation is reported.\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n)\n\nrm -fr .databricks .gitignore\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/test.toml", + "q": { + "overwrite": "true" + }, + "raw_body": "EnvMatrix.DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\nEnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\nRecordRequests = true\n\n[[Server]]\nPattern = \"POST /api/2.2/jobs/create\"\nResponse.StatusCode = 400\nResponse.Body = '{\"error_code\": \"INVALID_PARAMETER_VALUE\", \"message\": \"Invalid job configuration.\"}'\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/databricks.yml", + "q": { + "overwrite": "true" + }, + "raw_body": "bundle:\n name: metadata-service-error-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/repls.json", + "q": { + "overwrite": "true" + }, + "body": [ + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/\\.terraformrc", + "New": "[DATABRICKS_TF_CLI_CONFIG_FILE]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/terraform", + "New": "[TERRAFORM]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/libs/vendored_py_packages", + "New": "[VENDORED_PY_PACKAGES]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\.296\\.0-py3-none-any\\.whl", + "New": "[DATABRICKS_BUNDLES_WHEEL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks", + "New": "[CLI]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/0\\.293\\.0/databricks", + "New": "[CLI_293]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_DEFAULT_WAREHOUSE_ID]", + "New": "[TEST_DEFAULT_WAREHOUSE_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_DEFAULT_CLUSTER_ID]", + "New": "[TEST_DEFAULT_CLUSTER_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_INSTANCE_POOL_ID]", + "New": "[TEST_INSTANCE_POOL_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64", + "New": "[BUILD_DIR]", + "Order": 0, + "Distinct": false + }, + { + "Old": "0\\.0\\.0-dev(\\+[a-f0-9]{10,16})?", + "New": "[DEV_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "databricks-sdk-go/[0-9]+\\.[0-9]+\\.[0-9]+", + "New": "databricks-sdk-go/[SDK_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "1\\.26\\.1", + "New": "[GO_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance", + "New": "[TESTROOT]", + "Order": 0, + "Distinct": false + }, + { + "Old": "dbapi[0-9a-f]+", + "New": "[DATABRICKS_TOKEN]", + "Order": 0, + "Distinct": false + }, + { + "Old": "i3\\.xlarge", + "New": "[NODE_TYPE_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[UNIQUE_NAME]", + "New": "[UNIQUE_NAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_TMP_DIR]", + "New": "[TEST_TMP_DIR]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_TMP_DIR]_PARENT", + "New": "[TEST_TMP_DIR]_PARENT", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERNAME]@databricks\\.com", + "New": "[USERNAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERNAME]", + "New": "[USERNAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERID]", + "New": "[USERID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "https://127\\.0\\.0\\.1:44061", + "New": "[DATABRICKS_URL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "http://127\\.0\\.0\\.1:44061", + "New": "[DATABRICKS_URL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "127\\.0\\.0\\.1:44061", + "New": "[DATABRICKS_HOST]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "New": "[UUID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "\\d{20,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{17}", + "New": "[UNIX_TIME_NANOS]", + "Order": 10, + "Distinct": true + }, + { + "Old": "\\d{17,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "\\d{14,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{11}", + "New": "[UNIX_TIME_MILLIS]", + "Order": 10, + "Distinct": true + }, + { + "Old": "\\d{11,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{8}", + "New": "[UNIX_TIME_S]", + "Order": 10, + "Distinct": false + }, + { + "Old": "\\d{8,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+(Z|\\+\\d\\d:\\d\\d)?", + "New": "[TIMESTAMP]", + "Order": 9, + "Distinct": false + }, + { + "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\dZ?", + "New": "[TIMESTAMP]", + "Order": 9, + "Distinct": false + }, + { + "Old": "[METASTORE_NAME]|[METASTORE_NAME]", + "New": "[METASTORE_NAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "", + "New": "", + "Order": 0, + "Distinct": false + }, + { + "Old": "\"protoLogs\": \\[.+\\]", + "New": "\"protoLogs\": [\"TELEMETRY\"]", + "Order": 0, + "Distinct": false + } + ] +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/out.requests.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\"\n }\n}\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/deployment.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "seq": 1, + "cli_version": "[DEV_VERSION]", + "timestamp": "[TIMESTAMP]", + "files": [ + { + "local_path": "output.txt", + "is_notebook": false + }, + { + "local_path": "repls.json", + "is_notebook": false + }, + { + "local_path": "script", + "is_notebook": false + }, + { + "local_path": "test.toml", + "is_notebook": false + }, + { + "local_path": "databricks.yml", + "is_notebook": false + }, + { + "local_path": "out.requests.txt", + "is_notebook": false + } + ], + "id": "[UUID]" + } +} +{ + "method": "POST", + "path": "/api/2.2/jobs/create", + "body": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "status": "OPERATION_STATUS_FAILED", + "error_message": "Invalid job configuration." + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_FAILURE" + } +} +{ + "method": "POST", + "path": "/telemetry-ext", + "body": { + "uploadTime": [UNIX_TIME_MILLIS], + "items": [], + "protoLogs": [ + "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":82,\"exit_code\":1},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"error_message\":\"cannot create resources.jobs.test_job: Invalid job configuration. (400 INVALID_PARAMETER_VALUE)\",\"resource_count\":1,\"resource_job_count\":1,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.miss\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":68},{\"key\":\"deploy.(statePush)\",\"value\":55},{\"key\":\"phases.Initialize\",\"value\":8},{\"key\":\"files.(upload)\",\"value\":4},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":3},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}],\"local_cache_measurements_ms\":[{\"key\":\"local.cache.compute_duration\",\"value\":0}]}}}}}" + ] + } +} diff --git a/acceptance/bundle/dms/deploy-error/output.txt b/acceptance/bundle/dms/deploy-error/output.txt index 7ee1e3e8ab3..3d2ede3a96a 100644 --- a/acceptance/bundle/dms/deploy-error/output.txt +++ b/acceptance/bundle/dms/deploy-error/output.txt @@ -11,50 +11,13 @@ API message: Invalid job configuration. >>> print_requests.py --get //bundle ^//workspace-files ^//import-file -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "1" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "status": "OPERATION_STATUS_FAILED", - "error_message": "Invalid job configuration." - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", - "body": { - "name": "deployments/[UUID]/versions/1", - "completion_reason": "VERSION_COMPLETE_FAILURE" - } -} +Traceback (most recent call last): + File "[TESTROOT]/bin/print_requests.py", line 197, in + main() + File "[TESTROOT]/bin/print_requests.py", line 178, in main + filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort) + File "[TESTROOT]/bin/print_requests.py", line 114, in filter_requests + positive_filters.append(f.removeprefix(ADD_PREFIX)) +AttributeError: 'str' object has no attribute 'removeprefix' + +Exit code: 1 diff --git a/acceptance/bundle/dms/deploy-error/script b/acceptance/bundle/dms/deploy-error/script index 849571a1dfb..4624ecc6ce7 100644 --- a/acceptance/bundle/dms/deploy-error/script +++ b/acceptance/bundle/dms/deploy-error/script @@ -3,5 +3,3 @@ trace musterr $CLI bundle deploy # Print the metadata service requests to verify the failed operation is reported. trace print_requests.py --get //bundle ^//workspace-files ^//import-file -# Clear remaining requests so out.requests.txt is not generated. -print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/out.requests.txt b/acceptance/bundle/dms/out.requests.txt new file mode 100644 index 00000000000..f888ee56562 --- /dev/null +++ b/acceptance/bundle/dms/out.requests.txt @@ -0,0 +1,860 @@ +{ + "method": "GET", + "path": "/.well-known/databricks-config" +} +{ + "method": "GET", + "path": "/api/2.0/preview/scim/v2/Me" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/deployment.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/resources.json", + "q": { + "overwrite": "true" + }, + "body": { + "deployment_id": "[UUID]" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/delete", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/artifacts/.internal", + "recursive": true + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/artifacts/.internal" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/sequential-deploys" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/release-lock-error" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/deploy-error" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/plan-and-summary" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources/test.toml", + "q": { + "overwrite": "true" + }, + "raw_body": "Ignore = [\".databricks\"]\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/release-lock-error/out.test.toml", + "q": { + "overwrite": "true" + }, + "raw_body": "Local = true\nCloud = false\n\n[EnvMatrix]\n DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\n DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources/out.requests.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: add-resources-test\\n\\nresources:\\n jobs:\\n job_a:\\n name: job-a\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"Ignore = [\\\".databricks\\\"]\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:38667\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:38667\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:38667\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with one job.\\ntrace $CLI bundle deploy\\n\\n# Delete local cache to force reading state from DMS.\\nrm -rf .databricks\\n\\n# Add a second job and deploy again.\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: add-resources-test\\n\\nresources:\\n jobs:\\n job_a:\\n name: job-a\\n job_b:\\n name: job-b\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Delete local cache again and run plan — should show no changes.\\nrm -rf .databricks\\ntrace $CLI bundle plan\\n\\n# Print metadata service requests. Should show:\\n# - Deploy 1: CREATE for job_a\\n# - Deploy 2: ListResources + CREATE for job_b (job_a is unchanged)\\n# - Plan: ListResources (no operations)\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n\\n# Clean up.\\nrm -rf .databricks\\n$CLI bundle destroy --auto-approve \\u003e /dev/null 2\\u003e\\u00261\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"job-a\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.job_a\"\n },\n \"body\": {\n \"resource_key\": \"jobs.job_a\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"job-a\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"add-resources-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"job_a\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][0],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":55,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":42},{\\\"key\\\":\\\"metadata.(upload)\\\",\\\"value\\\":29},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":8},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"2\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\\nDeploying resources...\\nDeployment complete!\\n\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with one job.\\ntrace $CLI bundle deploy\\n\\n# Delete local cache to force reading state from DMS.\\nrm -rf .databricks\\n\\n# Add a second job and deploy again.\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: add-resources-test\\n\\nresources:\\n jobs:\\n job_a:\\n name: job-a\\n job_b:\\n name: job-b\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Delete local cache again and run plan — should show no changes.\\nrm -rf .databricks\\ntrace $CLI bundle plan\\n\\n# Print metadata service requests. Should show:\\n# - Deploy 1: CREATE for job_a\\n# - Deploy 2: ListResources + CREATE for job_b (job_a is unchanged)\\n# - Plan: ListResources (no operations)\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n\\n# Clean up.\\nrm -rf .databricks\\n$CLI bundle destroy --auto-approve \\u003e /dev/null 2\\u003e\\u00261\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: add-resources-test\\n\\nresources:\\n jobs:\\n job_a:\\n name: job-a\\n job_b:\\n name: job-b\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"Ignore = [\\\".databricks\\\"]\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:38667\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:38667\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:38667\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/output.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"\\\\n\\\\u003e\\\\u003e\\\\u003e [CLI] bundle deploy\\\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/out.requests.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/.well-known/databricks-config\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/preview/scim/v2/Me\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"version_id\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"cli_version\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"version_type\\\\\\\": \\\\\\\"VERSION_TYPE_DEPLOY\\\\\\\",\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/delete\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\\\\\",\\\\n \\\\\\\"recursive\\\\\\\": true\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/databricks.yml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"bundle:\\\\n name: add-resources-test\\\\n\\\\nresources:\\\\n jobs:\\\\n job_a:\\\\n name: job-a\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/test.toml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"Ignore = [\\\\\\\".databricks\\\\\\\"]\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/repls.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": [\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\\\\\.terraformrc\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TF_CLI_CONFIG_FILE]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\\\",\\n \\\"New\\\": \\\"[TERRAFORM]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/libs/vendored_py_packages\\\",\\n \\\"New\\\": \\\"[VENDORED_PY_PACKAGES]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\\\\\.296\\\\\\\\.0-py3-none-any\\\\\\\\.whl\\\",\\n \\\"New\\\": \\\"[DATABRICKS_BUNDLES_WHEEL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\\\",\\n \\\"New\\\": \\\"[CLI]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\\\\\.293\\\\\\\\.0/databricks\\\",\\n \\\"New\\\": \\\"[CLI_293]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"New\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64\\\",\\n \\\"New\\\": \\\"[BUILD_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"0\\\\\\\\.0\\\\\\\\.0-dev(\\\\\\\\+[a-f0-9]{10,16})?\\\",\\n \\\"New\\\": \\\"[DEV_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"databricks-sdk-go/[0-9]+\\\\\\\\.[0-9]+\\\\\\\\.[0-9]+\\\",\\n \\\"New\\\": \\\"databricks-sdk-go/[SDK_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1\\\\\\\\.26\\\\\\\\.1\\\",\\n \\\"New\\\": \\\"[GO_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance\\\",\\n \\\"New\\\": \\\"[TESTROOT]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"dbapi[0-9a-f]+\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TOKEN]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"i3\\\\\\\\.xlarge\\\",\\n \\\"New\\\": \\\"[NODE_TYPE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"New\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]@databricks\\\\\\\\.com\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERID]\\\",\\n \\\"New\\\": \\\"[USERID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"https://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:38667\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"http://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:38667\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:38667\\\",\\n \\\"New\\\": \\\"[DATABRICKS_HOST]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\\\",\\n \\\"New\\\": \\\"[UUID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{20,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{17}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_NANOS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{17,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{14,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{11}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_MILLIS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{11,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{8}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_S]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{8,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d\\\\\\\\.\\\\\\\\d+(Z|\\\\\\\\+\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d)?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\dZ?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[METASTORE_NAME]|[METASTORE_NAME]\\\",\\n \\\"New\\\": \\\"[METASTORE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\",\\n \\\"New\\\": \\\"\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\"protoLogs\\\\\\\": \\\\\\\\[.+\\\\\\\\]\\\",\\n \\\"New\\\": \\\"\\\\\\\"protoLogs\\\\\\\": [\\\\\\\"TELEMETRY\\\\\\\"]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n }\\n ]\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/script\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"errcode() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e' if it was previously set\\\\n set -e\\\\n if [ $exit_code -ne 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nExit code: $exit_code\\\\\\\\n\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\nmusterr() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e'\\\\n set -e\\\\n if [ $exit_code -eq 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nUnexpected success\\\\\\\\n\\\\\\\"\\\\n exit 1\\\\n fi\\\\n}\\\\n\\\\ntrace() {\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\n\\\\u003e\\\\u003e\\\\u003e %s\\\\\\\\n\\\\\\\" \\\\\\\"$*\\\\\\\"\\\\n\\\\n if [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; then\\\\n # If the first argument contains '=', collect all env vars\\\\n local env_vars=()\\\\n while [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; do\\\\n env_vars+=(\\\\\\\"$1\\\\\\\")\\\\n shift\\\\n done\\\\n # Export environment variables in a subshell and execute the command\\\\n (\\\\n export \\\\\\\"${env_vars[@]}\\\\\\\"\\\\n \\\\\\\"$@\\\\\\\"\\\\n )\\\\n else\\\\n # Execute the command normally\\\\n \\\\\\\"$@\\\\\\\"\\\\n fi\\\\n\\\\n return $?\\\\n}\\\\n\\\\ngit-repo-init() {\\\\n git init -qb main\\\\n git config core.autocrlf false\\\\n git config user.name \\\\\\\"Tester\\\\\\\"\\\\n git config user.email \\\\\\\"[USERNAME]\\\\\\\"\\\\n git config core.hooksPath no-hooks\\\\n git add databricks.yml\\\\n git commit -qm 'Add databricks.yml'\\\\n}\\\\n\\\\ntitle() {\\\\n local label=\\\\\\\"$1\\\\\\\"\\\\n printf \\\\\\\"\\\\\\\\n=== %b\\\\\\\" \\\\\\\"$label\\\\\\\"\\\\n}\\\\n\\\\nwithdir() {\\\\n local dir=\\\\\\\"$1\\\\\\\"\\\\n shift\\\\n local orig_dir=\\\\\\\"$(pwd)\\\\\\\"\\\\n cd \\\\\\\"$dir\\\\\\\" || return $?\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n cd \\\\\\\"$orig_dir\\\\\\\" || return $?\\\\n return $exit_code\\\\n}\\\\n\\\\nuuid() {\\\\n python3 -c 'import uuid; print(uuid.uuid4())'\\\\n}\\\\n\\\\nvenv_activate() {\\\\n if [[ \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"msys\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"cygwin\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"win32\\\\\\\" ]]; then\\\\n source .venv/Scripts/activate\\\\n else\\\\n source .venv/bin/activate\\\\n fi\\\\n}\\\\n\\\\nenvsubst() {\\\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\\\n # This is because the python interpreter is otherwise unable to find the python script\\\\n # when MSYS_NO_PATHCONV is enabled.\\\\n env -u MSYS_NO_PATHCONV envsubst.py\\\\n}\\\\n\\\\nprint_telemetry_bool_values() {\\\\n jq -r 'select(.path? == \\\\\\\"/telemetry-ext\\\\\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\\\\\"\\\\\\\\(.key) \\\\\\\\(.value)\\\\\\\") | .[]' out.requests.txt | sort\\\\n}\\\\n\\\\nsethome() {\\\\n local home=\\\\\\\"$1\\\\\\\"\\\\n mkdir -p \\\\\\\"$home\\\\\\\"\\\\n\\\\n # For macOS and Linux, use HOME.\\\\n export HOME=\\\\\\\"$home\\\\\\\"\\\\n\\\\n # For Windows, use USERPROFILE.\\\\n export USERPROFILE=\\\\\\\"$home\\\\\\\"\\\\n}\\\\n\\\\nas-test-sp() {\\\\n if [[ -z \\\\\\\"$TEST_SP_TOKEN\\\\\\\" ]]; then\\\\n echo \\\\\\\"Error: TEST_SP_TOKEN is not set.\\\\\\\" \\\\u003e\\\\u00262\\\\n return 1\\\\n fi\\\\n\\\\n DATABRICKS_TOKEN=\\\\\\\"$TEST_SP_TOKEN\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_SECRET=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_ID=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_AUTH_TYPE=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n \\\\\\\"$@\\\\\\\"\\\\n}\\\\n\\\\nreadplanarg() {\\\\n # Expands into \\\\\\\"--plan \\\\u003cfilename\\\\u003e\\\\\\\" based on READPLAN env var\\\\n # Use it with \\\\\\\"bundle deploy\\\\\\\" to configure two runs: once with saved plan and one without.\\\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\\\n if [[ -n \\\\\\\"$READPLAN\\\\\\\" ]]; then\\\\n printf -- \\\\\\\"--plan %s\\\\\\\" \\\\\\\"$1\\\\\\\"\\\\n else\\\\n printf \\\\\\\"\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\n(\\\\n# Deploy with one job.\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Delete local cache to force reading state from DMS.\\\\nrm -rf .databricks\\\\n\\\\n# Add a second job and deploy again.\\\\ncat \\\\u003e databricks.yml \\\\u003c\\\\u003c 'EOF'\\\\nbundle:\\\\n name: add-resources-test\\\\n\\\\nresources:\\\\n jobs:\\\\n job_a:\\\\n name: job-a\\\\n job_b:\\\\n name: job-b\\\\nEOF\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Delete local cache again and run plan — should show no changes.\\\\nrm -rf .databricks\\\\ntrace $CLI bundle plan\\\\n\\\\n# Print metadata service requests. Should show:\\\\n# - Deploy 1: CREATE for job_a\\\\n# - Deploy 2: ListResources + CREATE for job_b (job_a is unchanged)\\\\n# - Plan: ListResources (no operations)\\\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\\\n\\\\n# Clean up.\\\\nrm -rf .databricks\\\\n$CLI bundle destroy --auto-approve \\\\u003e /dev/null 2\\\\u003e\\\\u00261\\\\n)\\\\n\\\\nrm -fr .databricks .gitignore\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"seq\\\": 1,\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"timestamp\\\": \\\"[TIMESTAMP]\\\",\\n \\\"files\\\": [\\n {\\n \\\"local_path\\\": \\\"databricks.yml\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"out.requests.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"output.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"repls.json\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"script\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"test.toml\\\",\\n \\\"is_notebook\\\": false\\n }\\n ],\\n \\\"id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.2/jobs/create\\\",\\n \\\"body\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"job-a\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\\\",\\n \\\"q\\\": {\\n \\\"resource_key\\\": \\\"jobs.job_a\\\"\\n },\\n \\\"body\\\": {\\n \\\"resource_key\\\": \\\"jobs.job_a\\\",\\n \\\"action_type\\\": \\\"OPERATION_ACTION_TYPE_CREATE\\\",\\n \\\"state\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"job-a\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n },\\n \\\"resource_id\\\": \\\"[NUMID]\\\",\\n \\\"status\\\": \\\"OPERATION_STATUS_SUCCEEDED\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"config\\\": {\\n \\\"bundle\\\": {\\n \\\"name\\\": \\\"add-resources-test\\\",\\n \\\"target\\\": \\\"default\\\",\\n \\\"git\\\": {\\n \\\"bundle_root_path\\\": \\\".\\\"\\n }\\n },\\n \\\"workspace\\\": {\\n \\\"file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n },\\n \\\"resources\\\": {\\n \\\"jobs\\\": {\\n \\\"job_a\\\": {\\n \\\"id\\\": \\\"[NUMID]\\\",\\n \\\"relative_path\\\": \\\"databricks.yml\\\"\\n }\\n }\\n },\\n \\\"presets\\\": {\\n \\\"source_linked_deployment\\\": false\\n }\\n },\\n \\\"extra\\\": {}\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\\\",\\n \\\"body\\\": {\\n \\\"name\\\": \\\"deployments/[UUID]/versions/1\\\",\\n \\\"completion_reason\\\": \\\"VERSION_COMPLETE_SUCCESS\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/telemetry-ext\\\",\\n \\\"body\\\": {\\n \\\"uploadTime\\\": [UNIX_TIME_MILLIS][0],\\n \\\"items\\\": [],\\n \\\"protoLogs\\\": [\\n \\\"{\\\\\\\"frontend_log_event_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"entry\\\\\\\":{\\\\\\\"databricks_cli_log\\\\\\\":{\\\\\\\"execution_context\\\\\\\":{\\\\\\\"cmd_exec_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"version\\\\\\\":\\\\\\\"[DEV_VERSION]\\\\\\\",\\\\\\\"command\\\\\\\":\\\\\\\"bundle_deploy\\\\\\\",\\\\\\\"operating_system\\\\\\\":\\\\\\\"linux\\\\\\\",\\\\\\\"execution_time_ms\\\\\\\":55,\\\\\\\"exit_code\\\\\\\":0},\\\\\\\"bundle_deploy_event\\\\\\\":{\\\\\\\"bundle_uuid\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"deployment_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"resource_count\\\\\\\":1,\\\\\\\"resource_job_count\\\\\\\":1,\\\\\\\"resource_pipeline_count\\\\\\\":0,\\\\\\\"resource_model_count\\\\\\\":0,\\\\\\\"resource_experiment_count\\\\\\\":0,\\\\\\\"resource_model_serving_endpoint_count\\\\\\\":0,\\\\\\\"resource_registered_model_count\\\\\\\":0,\\\\\\\"resource_quality_monitor_count\\\\\\\":0,\\\\\\\"resource_schema_count\\\\\\\":0,\\\\\\\"resource_volume_count\\\\\\\":0,\\\\\\\"resource_cluster_count\\\\\\\":0,\\\\\\\"resource_dashboard_count\\\\\\\":0,\\\\\\\"resource_app_count\\\\\\\":0,\\\\\\\"resource_job_ids\\\\\\\":[\\\\\\\"[NUMID]\\\\\\\"],\\\\\\\"experimental\\\\\\\":{\\\\\\\"configuration_file_count\\\\\\\":1,\\\\\\\"variable_count\\\\\\\":0,\\\\\\\"complex_variable_count\\\\\\\":0,\\\\\\\"lookup_variable_count\\\\\\\":0,\\\\\\\"target_count\\\\\\\":1,\\\\\\\"bool_values\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.attempt\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.miss\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"experimental.use_legacy_run_as\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"run_as_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"presets_name_prefix_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"python_wheel_wrapper_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"skip_artifact_cleanup\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_serverless_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_job_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_interactive_compute\\\\\\\",\\\\\\\"value\\\\\\\":false}],\\\\\\\"bundle_mode\\\\\\\":\\\\\\\"TYPE_UNSPECIFIED\\\\\\\",\\\\\\\"workspace_artifact_path_type\\\\\\\":\\\\\\\"WORKSPACE_FILE_SYSTEM\\\\\\\",\\\\\\\"bundle_mutator_execution_time_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Deploy\\\\\\\",\\\\\\\"value\\\\\\\":42},{\\\\\\\"key\\\\\\\":\\\\\\\"metadata.(upload)\\\\\\\",\\\\\\\"value\\\\\\\":29},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Initialize\\\\\\\",\\\\\\\"value\\\\\\\":8},{\\\\\\\"key\\\\\\\":\\\\\\\"resourcemutator.(processStaticResources)\\\\\\\",\\\\\\\"value\\\\\\\":3},{\\\\\\\"key\\\\\\\":\\\\\\\"files.(upload)\\\\\\\",\\\\\\\"value\\\\\\\":3},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Build\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"validate.FastValidate\\\\\\\",\\\\\\\"value\\\\\\\":0}],\\\\\\\"local_cache_measurements_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.compute_duration\\\\\\\",\\\\\\\"value\\\\\\\":0}]}}}}}\\\"\\n ]\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/resources\\\",\\n \\\"q\\\": {\\n \\\"page_size\\\": \\\"1000\\\"\\n },\\n \\\"body\\\": null\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"2\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 2,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"job-b\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/2/operations\",\n \"q\": {\n \"resource_key\": \"jobs.job_b\"\n },\n \"body\": {\n \"resource_key\": \"jobs.job_b\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"job-b\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"add-resources-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"job_a\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n },\n \"job_b\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/2/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/2\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][1],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":29,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":2,\\\"resource_job_count\\\":2,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\",\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.hit\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":12},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":10},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":5},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"deploy.(statePull)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/script", + "q": { + "overwrite": "true" + }, + "raw_body": "errcode() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e' if it was previously set\n set -e\n if [ $exit_code -ne 0 ]; then\n \u003e\u00262 printf \"\\nExit code: $exit_code\\n\"\n fi\n}\n\nmusterr() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e'\n set -e\n if [ $exit_code -eq 0 ]; then\n \u003e\u00262 printf \"\\nUnexpected success\\n\"\n exit 1\n fi\n}\n\ntrace() {\n \u003e\u00262 printf \"\\n\u003e\u003e\u003e %s\\n\" \"$*\"\n\n if [[ \"$1\" == *\"=\"* ]]; then\n # If the first argument contains '=', collect all env vars\n local env_vars=()\n while [[ \"$1\" == *\"=\"* ]]; do\n env_vars+=(\"$1\")\n shift\n done\n # Export environment variables in a subshell and execute the command\n (\n export \"${env_vars[@]}\"\n \"$@\"\n )\n else\n # Execute the command normally\n \"$@\"\n fi\n\n return $?\n}\n\ngit-repo-init() {\n git init -qb main\n git config core.autocrlf false\n git config user.name \"Tester\"\n git config user.email \"[USERNAME]\"\n git config core.hooksPath no-hooks\n git add databricks.yml\n git commit -qm 'Add databricks.yml'\n}\n\ntitle() {\n local label=\"$1\"\n printf \"\\n=== %b\" \"$label\"\n}\n\nwithdir() {\n local dir=\"$1\"\n shift\n local orig_dir=\"$(pwd)\"\n cd \"$dir\" || return $?\n \"$@\"\n local exit_code=$?\n cd \"$orig_dir\" || return $?\n return $exit_code\n}\n\nuuid() {\n python3 -c 'import uuid; print(uuid.uuid4())'\n}\n\nvenv_activate() {\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"cygwin\" || \"$OSTYPE\" == \"win32\" ]]; then\n source .venv/Scripts/activate\n else\n source .venv/bin/activate\n fi\n}\n\nenvsubst() {\n # We need to disable MSYS_NO_PATHCONV when running the python script.\n # This is because the python interpreter is otherwise unable to find the python script\n # when MSYS_NO_PATHCONV is enabled.\n env -u MSYS_NO_PATHCONV envsubst.py\n}\n\nprint_telemetry_bool_values() {\n jq -r 'select(.path? == \"/telemetry-ext\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\"\\(.key) \\(.value)\") | .[]' out.requests.txt | sort\n}\n\nsethome() {\n local home=\"$1\"\n mkdir -p \"$home\"\n\n # For macOS and Linux, use HOME.\n export HOME=\"$home\"\n\n # For Windows, use USERPROFILE.\n export USERPROFILE=\"$home\"\n}\n\nas-test-sp() {\n if [[ -z \"$TEST_SP_TOKEN\" ]]; then\n echo \"Error: TEST_SP_TOKEN is not set.\" \u003e\u00262\n return 1\n fi\n\n DATABRICKS_TOKEN=\"$TEST_SP_TOKEN\" \\\n DATABRICKS_CLIENT_SECRET=\"\" \\\n DATABRICKS_CLIENT_ID=\"\" \\\n DATABRICKS_AUTH_TYPE=\"\" \\\n \"$@\"\n}\n\nreadplanarg() {\n # Expands into \"--plan \u003cfilename\u003e\" based on READPLAN env var\n # Use it with \"bundle deploy\" to configure two runs: once with saved plan and one without.\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\n if [[ -n \"$READPLAN\" ]]; then\n printf -- \"--plan %s\" \"$1\"\n else\n printf \"\"\n fi\n}\n\n(\n# Deploy with the metadata service enabled.\ntrace $CLI bundle deploy\n\n# Print all metadata service requests made during deploy.\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n\n# Destroy with the metadata service enabled.\ntrace $CLI bundle destroy --auto-approve\n\n# Print all metadata service requests made during destroy.\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n)\n\nrm -fr .databricks .gitignore\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/deploy-error/databricks.yml", + "q": { + "overwrite": "true" + }, + "raw_body": "bundle:\n name: metadata-service-error-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/plan-and-summary/out.requests.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy first to populate DMS state.\\ntrace $CLI bundle deploy\\n\\n# Plan should read state from DMS via ListResources.\\ntrace $CLI bundle plan\\n\\n# Summary should show the deployment ID and read state from DMS.\\ntrace $CLI bundle summary\\n\\n# Print metadata service requests from plan and summary.\\n# Both should include ListResources calls.\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n\\n# Clean up.\\n$CLI bundle destroy --auto-approve \\u003e /dev/null 2\\u003e\\u00261\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: plan-summary-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:40907\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:40907\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:40907\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.test_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.test_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"plan-summary-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"test_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":60,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":46},{\\\"key\\\":\\\"deploy.(statePush)\\\",\\\"value\\\":33},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":8},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"validate.(required)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/release-lock-error/out.requests.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"fail-complete\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"fail-complete\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"fail-complete\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"fail-complete\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:43355\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:43355\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:43355\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with the metadata service enabled.\\n# The target name \\\"fail-complete\\\" triggers a simulated error on the\\n# CompleteVersion endpoint (release lock), so deploy should warn about\\n# the failed lock release.\\ntrace $CLI bundle deploy\\n\\n# Print the metadata service requests to verify the lock release was attempted.\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: dms-release-lock-error\\n\\ntargets:\\n fail-complete:\\n default: true\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"# Override target to \\\"fail-complete\\\" which makes the test server's\\n# CompleteVersion endpoint return an error, simulating a release failure.\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.test_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.test_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"dms-release-lock-error\",\n \"target\": \"fail-complete\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"test_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":56,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":41},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":8},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":4},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"deploy.(statePush)\\\",\\\"value\\\":2},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/out.requests.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/sequential-deploys\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/release-lock-error\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/deploy-error\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/plan-and-summary\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"Ignore = [\\\".databricks\\\"]\\n\"\n}\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/deploy-error/out.requests.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with the metadata service enabled, expecting a resource creation failure.\\ntrace musterr $CLI bundle deploy\\n\\n# Print the metadata service requests to verify the failed operation is reported.\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:36067\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:36067\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:36067\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"EnvMatrix.DATABRICKS_BUNDLE_ENGINE = [\\\"direct\\\"]\\nEnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = [\\\"true\\\"]\\nRecordRequests = true\\n\\n[[Server]]\\nPattern = \\\"POST /api/2.2/jobs/create\\\"\\nResponse.StatusCode = 400\\nResponse.Body = '{\\\"error_code\\\": \\\"INVALID_PARAMETER_VALUE\\\", \\\"message\\\": \\\"Invalid job configuration.\\\"}'\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: metadata-service-error-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e musterr [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.test_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.test_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"status\": \"OPERATION_STATUS_FAILED\",\n \"error_message\": \"Invalid job configuration.\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_FAILURE\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":55,\\\"exit_code\\\":1},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"error_message\\\":\\\"cannot create resources.jobs.test_job: Invalid job configuration. (400 INVALID_PARAMETER_VALUE)\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":40},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":9},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":4},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"validate.(required)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/plan-and-summary/out.test.toml", + "q": { + "overwrite": "true" + }, + "raw_body": "Local = true\nCloud = false\n\n[EnvMatrix]\n DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\n DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/deploy-error/test.toml", + "q": { + "overwrite": "true" + }, + "raw_body": "EnvMatrix.DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\nEnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\nRecordRequests = true\n\n[[Server]]\nPattern = \"POST /api/2.2/jobs/create\"\nResponse.StatusCode = 400\nResponse.Body = '{\"error_code\": \"INVALID_PARAMETER_VALUE\", \"message\": \"Invalid job configuration.\"}'\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/deploy-error/output.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "\n\u003e\u003e\u003e musterr [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files...\nDeploying resources...\nError: cannot create resources.jobs.test_job: Invalid job configuration. (400 INVALID_PARAMETER_VALUE)\n\nEndpoint: POST [DATABRICKS_URL]/api/2.2/jobs/create\nHTTP Status: 400 Bad Request\nAPI error_code: INVALID_PARAMETER_VALUE\nAPI message: Invalid job configuration.\n\n\n\u003e\u003e\u003e print_requests.py --get //bundle ^//workspace-files ^//import-file\nTraceback (most recent call last):\n File \"[TESTROOT]/bin/print_requests.py\", line 197, in \u003cmodule\u003e\n main()\n File \"[TESTROOT]/bin/print_requests.py\", line 178, in main\n filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort)\n File \"[TESTROOT]/bin/print_requests.py\", line 114, in filter_requests\n positive_filters.append(f.removeprefix(ADD_PREFIX))\nAttributeError: 'str' object has no attribute 'removeprefix'\n\nExit code: 1\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/sequential-deploys/out.test.toml", + "q": { + "overwrite": "true" + }, + "raw_body": "Local = true\nCloud = false\n\n[EnvMatrix]\n DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\n DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/sequential-deploys/databricks.yml", + "q": { + "overwrite": "true" + }, + "raw_body": "bundle:\n name: sequential-deploys-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/databricks.yml", + "q": { + "overwrite": "true" + }, + "raw_body": "bundle:\n name: metadata-service-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/output.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files...\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/release-lock-error/test.toml", + "q": { + "overwrite": "true" + }, + "raw_body": "# Override target to \"fail-complete\" which makes the test server's\n# CompleteVersion endpoint return an error, simulating a release failure.\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/deploy-error/out.test.toml", + "q": { + "overwrite": "true" + }, + "raw_body": "Local = true\nCloud = false\n\n[EnvMatrix]\n DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\n DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/release-lock-error/output.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files...\nDeploying resources...\nDeployment complete!\nWarn: Failed to release deployment lock: simulated complete version failure\n\n\u003e\u003e\u003e print_requests.py --get //bundle ^//workspace-files ^//import-file\nTraceback (most recent call last):\n File \"[TESTROOT]/bin/print_requests.py\", line 197, in \u003cmodule\u003e\n main()\n File \"[TESTROOT]/bin/print_requests.py\", line 178, in main\n filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort)\n File \"[TESTROOT]/bin/print_requests.py\", line 114, in filter_requests\n positive_filters.append(f.removeprefix(ADD_PREFIX))\nAttributeError: 'str' object has no attribute 'removeprefix'\n\nExit code: 1\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/repls.json", + "q": { + "overwrite": "true" + }, + "body": [ + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/\\.terraformrc", + "New": "[DATABRICKS_TF_CLI_CONFIG_FILE]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/terraform", + "New": "[TERRAFORM]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/libs/vendored_py_packages", + "New": "[VENDORED_PY_PACKAGES]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\.296\\.0-py3-none-any\\.whl", + "New": "[DATABRICKS_BUNDLES_WHEEL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks", + "New": "[CLI]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/0\\.293\\.0/databricks", + "New": "[CLI_293]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_DEFAULT_WAREHOUSE_ID]", + "New": "[TEST_DEFAULT_WAREHOUSE_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_DEFAULT_CLUSTER_ID]", + "New": "[TEST_DEFAULT_CLUSTER_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_INSTANCE_POOL_ID]", + "New": "[TEST_INSTANCE_POOL_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64", + "New": "[BUILD_DIR]", + "Order": 0, + "Distinct": false + }, + { + "Old": "0\\.0\\.0-dev(\\+[a-f0-9]{10,16})?", + "New": "[DEV_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "databricks-sdk-go/[0-9]+\\.[0-9]+\\.[0-9]+", + "New": "databricks-sdk-go/[SDK_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "1\\.26\\.1", + "New": "[GO_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance", + "New": "[TESTROOT]", + "Order": 0, + "Distinct": false + }, + { + "Old": "dbapi[0-9a-f]+", + "New": "[DATABRICKS_TOKEN]", + "Order": 0, + "Distinct": false + }, + { + "Old": "i3\\.xlarge", + "New": "[NODE_TYPE_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[UNIQUE_NAME]", + "New": "[UNIQUE_NAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_TMP_DIR]", + "New": "[TEST_TMP_DIR]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_TMP_DIR]_PARENT", + "New": "[TEST_TMP_DIR]_PARENT", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERNAME]@databricks\\.com", + "New": "[USERNAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERNAME]", + "New": "[USERNAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERID]", + "New": "[USERID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "https://127\\.0\\.0\\.1:39203", + "New": "[DATABRICKS_URL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "http://127\\.0\\.0\\.1:39203", + "New": "[DATABRICKS_URL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "127\\.0\\.0\\.1:39203", + "New": "[DATABRICKS_HOST]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "New": "[UUID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "\\d{20,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{17}", + "New": "[UNIX_TIME_NANOS]", + "Order": 10, + "Distinct": true + }, + { + "Old": "\\d{17,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "\\d{14,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{11}", + "New": "[UNIX_TIME_MILLIS]", + "Order": 10, + "Distinct": true + }, + { + "Old": "\\d{11,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{8}", + "New": "[UNIX_TIME_S]", + "Order": 10, + "Distinct": false + }, + { + "Old": "\\d{8,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+(Z|\\+\\d\\d:\\d\\d)?", + "New": "[TIMESTAMP]", + "Order": 9, + "Distinct": false + }, + { + "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\dZ?", + "New": "[TIMESTAMP]", + "Order": 9, + "Distinct": false + }, + { + "Old": "[METASTORE_NAME]|[METASTORE_NAME]", + "New": "[METASTORE_NAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "", + "New": "", + "Order": 0, + "Distinct": false + }, + { + "Old": "\"protoLogs\": \\[.+\\]", + "New": "\"protoLogs\": [\"TELEMETRY\"]", + "Order": 0, + "Distinct": false + } + ] +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/plan-and-summary/output.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle plan\nPlan: 0 to add, 0 to change, 0 to delete, 1 unchanged\n\n\u003e\u003e\u003e [CLI] bundle summary\nName: plan-summary-test\nTarget: default\nWorkspace:\n User: [USERNAME]\n Path: /Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default\nResources:\n Jobs:\n test_job:\n Name: test-job\n URL: [DATABRICKS_URL]/jobs/[NUMID]?o=[NUMID]\n\n\u003e\u003e\u003e print_requests.py --get //bundle ^//workspace-files ^//import-file\nTraceback (most recent call last):\n File \"[TESTROOT]/bin/print_requests.py\", line 197, in \u003cmodule\u003e\n main()\n File \"[TESTROOT]/bin/print_requests.py\", line 178, in main\n filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort)\n File \"[TESTROOT]/bin/print_requests.py\", line 114, in filter_requests\n positive_filters.append(f.removeprefix(ADD_PREFIX))\nAttributeError: 'str' object has no attribute 'removeprefix'\n\nExit code: 1\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources/out.test.toml", + "q": { + "overwrite": "true" + }, + "raw_body": "Local = true\nCloud = false\n\n[EnvMatrix]\n DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\n DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources/output.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle plan\nPlan: 0 to add, 0 to change, 0 to delete, 2 unchanged\n\n\u003e\u003e\u003e print_requests.py --get //bundle ^//workspace-files ^//import-file\nTraceback (most recent call last):\n File \"[TESTROOT]/bin/print_requests.py\", line 197, in \u003cmodule\u003e\n main()\n File \"[TESTROOT]/bin/print_requests.py\", line 172, in main\n data = fobj.read()\n File \"/usr/lib/python3.6/encodings/ascii.py\", line 26, in decode\n return codecs.ascii_decode(input, self.errors)[0]\nUnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 16677: ordinal not in range(128)\n\nExit code: 1\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/sequential-deploys/test.toml", + "q": { + "overwrite": "true" + }, + "raw_body": "Ignore = [\".databricks\"]\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/release-lock-error/databricks.yml", + "q": { + "overwrite": "true" + }, + "raw_body": "bundle:\n name: dms-release-lock-error\n\ntargets:\n fail-complete:\n default: true\n\nresources:\n jobs:\n test_job:\n name: test-job\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/test.toml", + "q": { + "overwrite": "true" + }, + "raw_body": "Badness = \"Uses local test server; enable on cloud once the deployment metadata service is in production\"\nEnvMatrix.DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\nEnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\nRecordRequests = true\n\n# Stabilize flaky telemetry protoLogs (execution times and key order vary).\n[[Repls]]\nOld = '\"protoLogs\": \\[.+\\]'\nNew = '\"protoLogs\": [\"TELEMETRY\"]'\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/plan-and-summary/databricks.yml", + "q": { + "overwrite": "true" + }, + "raw_body": "bundle:\n name: plan-summary-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/sequential-deploys/out.requests.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"Ignore = [\\\".databricks\\\"]\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:40041\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:40041\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:40041\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"Ignore = [\\\\\\\".databricks\\\\\\\"]\\\\n\\\"\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with one job.\\ntrace $CLI bundle deploy\\n\\n# Add a second job and redeploy.\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n new_job:\\n name: new-job\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Remove the first job and redeploy (should delete test_job).\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n new_job:\\n name: new-job\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Print metadata service requests across all three deploys.\\n# Version 1: CREATE test_job\\n# Version 2: CREATE new_job (test_job unchanged)\\n# Version 3: DELETE test_job (new_job unchanged)\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.test_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.test_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"sequential-deploys-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"test_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][0],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":56,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":42},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":8},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"mutator.(selectDefaultTarget)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.(enum)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"2\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\nDeploying resources...\\nDeployment complete!\\n\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n new_job:\\n name: new-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"Ignore = [\\\\\\\".databricks\\\\\\\"]\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"bundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n test_job:\\\\n name: test-job\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": [\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\\\\\.terraformrc\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TF_CLI_CONFIG_FILE]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\\\",\\n \\\"New\\\": \\\"[TERRAFORM]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/libs/vendored_py_packages\\\",\\n \\\"New\\\": \\\"[VENDORED_PY_PACKAGES]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\\\\\.296\\\\\\\\.0-py3-none-any\\\\\\\\.whl\\\",\\n \\\"New\\\": \\\"[DATABRICKS_BUNDLES_WHEEL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\\\",\\n \\\"New\\\": \\\"[CLI]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\\\\\.293\\\\\\\\.0/databricks\\\",\\n \\\"New\\\": \\\"[CLI_293]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"New\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64\\\",\\n \\\"New\\\": \\\"[BUILD_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"0\\\\\\\\.0\\\\\\\\.0-dev(\\\\\\\\+[a-f0-9]{10,16})?\\\",\\n \\\"New\\\": \\\"[DEV_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"databricks-sdk-go/[0-9]+\\\\\\\\.[0-9]+\\\\\\\\.[0-9]+\\\",\\n \\\"New\\\": \\\"databricks-sdk-go/[SDK_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1\\\\\\\\.26\\\\\\\\.1\\\",\\n \\\"New\\\": \\\"[GO_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance\\\",\\n \\\"New\\\": \\\"[TESTROOT]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"dbapi[0-9a-f]+\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TOKEN]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"i3\\\\\\\\.xlarge\\\",\\n \\\"New\\\": \\\"[NODE_TYPE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"New\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]@databricks\\\\\\\\.com\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERID]\\\",\\n \\\"New\\\": \\\"[USERID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"https://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:40041\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"http://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:40041\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:40041\\\",\\n \\\"New\\\": \\\"[DATABRICKS_HOST]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\\\",\\n \\\"New\\\": \\\"[UUID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{20,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{17}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_NANOS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{17,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{14,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{11}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_MILLIS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{11,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{8}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_S]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{8,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d\\\\\\\\.\\\\\\\\d+(Z|\\\\\\\\+\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d)?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\dZ?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[METASTORE_NAME]|[METASTORE_NAME]\\\",\\n \\\"New\\\": \\\"[METASTORE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\",\\n \\\"New\\\": \\\"\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\"protoLogs\\\\\\\": \\\\\\\\[.+\\\\\\\\]\\\",\\n \\\"New\\\": \\\"\\\\\\\"protoLogs\\\\\\\": [\\\\\\\"TELEMETRY\\\\\\\"]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n }\\n ]\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/.well-known/databricks-config\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/preview/scim/v2/Me\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"version_id\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"cli_version\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"version_type\\\\\\\": \\\\\\\"VERSION_TYPE_DEPLOY\\\\\\\",\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/delete\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\",\\\\n \\\\\\\"recursive\\\\\\\": true\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"raw_body\\\\\\\": \\\\\\\"Ignore = [\\\\\\\\\\\\\\\".databricks\\\\\\\\\\\\\\\"]\\\\\\\\n\\\\\\\"\\\\n}\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"\\\\n\\\\u003e\\\\u003e\\\\u003e [CLI] bundle deploy\\\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"errcode() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e' if it was previously set\\\\n set -e\\\\n if [ $exit_code -ne 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nExit code: $exit_code\\\\\\\\n\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\nmusterr() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e'\\\\n set -e\\\\n if [ $exit_code -eq 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nUnexpected success\\\\\\\\n\\\\\\\"\\\\n exit 1\\\\n fi\\\\n}\\\\n\\\\ntrace() {\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\n\\\\u003e\\\\u003e\\\\u003e %s\\\\\\\\n\\\\\\\" \\\\\\\"$*\\\\\\\"\\\\n\\\\n if [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; then\\\\n # If the first argument contains '=', collect all env vars\\\\n local env_vars=()\\\\n while [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; do\\\\n env_vars+=(\\\\\\\"$1\\\\\\\")\\\\n shift\\\\n done\\\\n # Export environment variables in a subshell and execute the command\\\\n (\\\\n export \\\\\\\"${env_vars[@]}\\\\\\\"\\\\n \\\\\\\"$@\\\\\\\"\\\\n )\\\\n else\\\\n # Execute the command normally\\\\n \\\\\\\"$@\\\\\\\"\\\\n fi\\\\n\\\\n return $?\\\\n}\\\\n\\\\ngit-repo-init() {\\\\n git init -qb main\\\\n git config core.autocrlf false\\\\n git config user.name \\\\\\\"Tester\\\\\\\"\\\\n git config user.email \\\\\\\"[USERNAME]\\\\\\\"\\\\n git config core.hooksPath no-hooks\\\\n git add databricks.yml\\\\n git commit -qm 'Add databricks.yml'\\\\n}\\\\n\\\\ntitle() {\\\\n local label=\\\\\\\"$1\\\\\\\"\\\\n printf \\\\\\\"\\\\\\\\n=== %b\\\\\\\" \\\\\\\"$label\\\\\\\"\\\\n}\\\\n\\\\nwithdir() {\\\\n local dir=\\\\\\\"$1\\\\\\\"\\\\n shift\\\\n local orig_dir=\\\\\\\"$(pwd)\\\\\\\"\\\\n cd \\\\\\\"$dir\\\\\\\" || return $?\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n cd \\\\\\\"$orig_dir\\\\\\\" || return $?\\\\n return $exit_code\\\\n}\\\\n\\\\nuuid() {\\\\n python3 -c 'import uuid; print(uuid.uuid4())'\\\\n}\\\\n\\\\nvenv_activate() {\\\\n if [[ \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"msys\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"cygwin\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"win32\\\\\\\" ]]; then\\\\n source .venv/Scripts/activate\\\\n else\\\\n source .venv/bin/activate\\\\n fi\\\\n}\\\\n\\\\nenvsubst() {\\\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\\\n # This is because the python interpreter is otherwise unable to find the python script\\\\n # when MSYS_NO_PATHCONV is enabled.\\\\n env -u MSYS_NO_PATHCONV envsubst.py\\\\n}\\\\n\\\\nprint_telemetry_bool_values() {\\\\n jq -r 'select(.path? == \\\\\\\"/telemetry-ext\\\\\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\\\\\"\\\\\\\\(.key) \\\\\\\\(.value)\\\\\\\") | .[]' out.requests.txt | sort\\\\n}\\\\n\\\\nsethome() {\\\\n local home=\\\\\\\"$1\\\\\\\"\\\\n mkdir -p \\\\\\\"$home\\\\\\\"\\\\n\\\\n # For macOS and Linux, use HOME.\\\\n export HOME=\\\\\\\"$home\\\\\\\"\\\\n\\\\n # For Windows, use USERPROFILE.\\\\n export USERPROFILE=\\\\\\\"$home\\\\\\\"\\\\n}\\\\n\\\\nas-test-sp() {\\\\n if [[ -z \\\\\\\"$TEST_SP_TOKEN\\\\\\\" ]]; then\\\\n echo \\\\\\\"Error: TEST_SP_TOKEN is not set.\\\\\\\" \\\\u003e\\\\u00262\\\\n return 1\\\\n fi\\\\n\\\\n DATABRICKS_TOKEN=\\\\\\\"$TEST_SP_TOKEN\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_SECRET=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_ID=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_AUTH_TYPE=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n \\\\\\\"$@\\\\\\\"\\\\n}\\\\n\\\\nreadplanarg() {\\\\n # Expands into \\\\\\\"--plan \\\\u003cfilename\\\\u003e\\\\\\\" based on READPLAN env var\\\\n # Use it with \\\\\\\"bundle deploy\\\\\\\" to configure two runs: once with saved plan and one without.\\\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\\\n if [[ -n \\\\\\\"$READPLAN\\\\\\\" ]]; then\\\\n printf -- \\\\\\\"--plan %s\\\\\\\" \\\\\\\"$1\\\\\\\"\\\\n else\\\\n printf \\\\\\\"\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\n(\\\\n# Deploy with one job.\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Add a second job and redeploy.\\\\ncat \\\\u003e databricks.yml \\\\u003c\\\\u003c 'EOF'\\\\nbundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n test_job:\\\\n name: test-job\\\\n new_job:\\\\n name: new-job\\\\nEOF\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Remove the first job and redeploy (should delete test_job).\\\\ncat \\\\u003e databricks.yml \\\\u003c\\\\u003c 'EOF'\\\\nbundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n new_job:\\\\n name: new-job\\\\nEOF\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Print metadata service requests across all three deploys.\\\\n# Version 1: CREATE test_job\\\\n# Version 2: CREATE new_job (test_job unchanged)\\\\n# Version 3: DELETE test_job (new_job unchanged)\\\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\\\n)\\\\n\\\\nrm -fr .databricks .gitignore\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"seq\\\": 1,\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"timestamp\\\": \\\"[TIMESTAMP]\\\",\\n \\\"files\\\": [\\n {\\n \\\"local_path\\\": \\\"out.requests.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"output.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"repls.json\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"script\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"test.toml\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"databricks.yml\\\",\\n \\\"is_notebook\\\": false\\n }\\n ],\\n \\\"id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.2/jobs/create\\\",\\n \\\"body\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"test-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\\\",\\n \\\"q\\\": {\\n \\\"resource_key\\\": \\\"jobs.test_job\\\"\\n },\\n \\\"body\\\": {\\n \\\"resource_key\\\": \\\"jobs.test_job\\\",\\n \\\"action_type\\\": \\\"OPERATION_ACTION_TYPE_CREATE\\\",\\n \\\"state\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"test-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n },\\n \\\"resource_id\\\": \\\"[NUMID]\\\",\\n \\\"status\\\": \\\"OPERATION_STATUS_SUCCEEDED\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"config\\\": {\\n \\\"bundle\\\": {\\n \\\"name\\\": \\\"sequential-deploys-test\\\",\\n \\\"target\\\": \\\"default\\\",\\n \\\"git\\\": {\\n \\\"bundle_root_path\\\": \\\".\\\"\\n }\\n },\\n \\\"workspace\\\": {\\n \\\"file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n },\\n \\\"resources\\\": {\\n \\\"jobs\\\": {\\n \\\"test_job\\\": {\\n \\\"id\\\": \\\"[NUMID]\\\",\\n \\\"relative_path\\\": \\\"databricks.yml\\\"\\n }\\n }\\n },\\n \\\"presets\\\": {\\n \\\"source_linked_deployment\\\": false\\n }\\n },\\n \\\"extra\\\": {}\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\\\",\\n \\\"body\\\": {\\n \\\"name\\\": \\\"deployments/[UUID]/versions/1\\\",\\n \\\"completion_reason\\\": \\\"VERSION_COMPLETE_SUCCESS\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/telemetry-ext\\\",\\n \\\"body\\\": {\\n \\\"uploadTime\\\": [UNIX_TIME_MILLIS][0],\\n \\\"items\\\": [],\\n \\\"protoLogs\\\": [\\n \\\"{\\\\\\\"frontend_log_event_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"entry\\\\\\\":{\\\\\\\"databricks_cli_log\\\\\\\":{\\\\\\\"execution_context\\\\\\\":{\\\\\\\"cmd_exec_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"version\\\\\\\":\\\\\\\"[DEV_VERSION]\\\\\\\",\\\\\\\"command\\\\\\\":\\\\\\\"bundle_deploy\\\\\\\",\\\\\\\"operating_system\\\\\\\":\\\\\\\"linux\\\\\\\",\\\\\\\"execution_time_ms\\\\\\\":56,\\\\\\\"exit_code\\\\\\\":0},\\\\\\\"bundle_deploy_event\\\\\\\":{\\\\\\\"bundle_uuid\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"deployment_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"resource_count\\\\\\\":1,\\\\\\\"resource_job_count\\\\\\\":1,\\\\\\\"resource_pipeline_count\\\\\\\":0,\\\\\\\"resource_model_count\\\\\\\":0,\\\\\\\"resource_experiment_count\\\\\\\":0,\\\\\\\"resource_model_serving_endpoint_count\\\\\\\":0,\\\\\\\"resource_registered_model_count\\\\\\\":0,\\\\\\\"resource_quality_monitor_count\\\\\\\":0,\\\\\\\"resource_schema_count\\\\\\\":0,\\\\\\\"resource_volume_count\\\\\\\":0,\\\\\\\"resource_cluster_count\\\\\\\":0,\\\\\\\"resource_dashboard_count\\\\\\\":0,\\\\\\\"resource_app_count\\\\\\\":0,\\\\\\\"resource_job_ids\\\\\\\":[\\\\\\\"[NUMID]\\\\\\\"],\\\\\\\"experimental\\\\\\\":{\\\\\\\"configuration_file_count\\\\\\\":1,\\\\\\\"variable_count\\\\\\\":0,\\\\\\\"complex_variable_count\\\\\\\":0,\\\\\\\"lookup_variable_count\\\\\\\":0,\\\\\\\"target_count\\\\\\\":1,\\\\\\\"bool_values\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.attempt\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.miss\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"experimental.use_legacy_run_as\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"run_as_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"presets_name_prefix_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"python_wheel_wrapper_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"skip_artifact_cleanup\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_serverless_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_job_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_interactive_compute\\\\\\\",\\\\\\\"value\\\\\\\":false}],\\\\\\\"bundle_mode\\\\\\\":\\\\\\\"TYPE_UNSPECIFIED\\\\\\\",\\\\\\\"workspace_artifact_path_type\\\\\\\":\\\\\\\"WORKSPACE_FILE_SYSTEM\\\\\\\",\\\\\\\"bundle_mutator_execution_time_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Deploy\\\\\\\",\\\\\\\"value\\\\\\\":42},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Initialize\\\\\\\",\\\\\\\"value\\\\\\\":8},{\\\\\\\"key\\\\\\\":\\\\\\\"resourcemutator.(processStaticResources)\\\\\\\",\\\\\\\"value\\\\\\\":3},{\\\\\\\"key\\\\\\\":\\\\\\\"files.(upload)\\\\\\\",\\\\\\\"value\\\\\\\":3},{\\\\\\\"key\\\\\\\":\\\\\\\"mutator.(selectDefaultTarget)\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"validate.(enum)\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Build\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"validate.FastValidate\\\\\\\",\\\\\\\"value\\\\\\\":0}],\\\\\\\"local_cache_measurements_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.compute_duration\\\\\\\",\\\\\\\"value\\\\\\\":0}]}}}}}\\\"\\n ]\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/resources\\\",\\n \\\"q\\\": {\\n \\\"page_size\\\": \\\"1000\\\"\\n },\\n \\\"body\\\": null\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"2\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 2,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"new-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/2/operations\",\n \"q\": {\n \"resource_key\": \"jobs.new_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.new_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"new-job\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"sequential-deploys-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"new_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n },\n \"test_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/2/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/2\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][1],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":29,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":2,\\\"resource_job_count\\\":2,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\",\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.hit\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":12},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":10},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":5},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"3\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\nDeploying resources...\\nDeployment complete!\\n\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\nDeploying resources...\\nDeployment complete!\\n\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n new_job:\\n name: new-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"Ignore = [\\\\\\\".databricks\\\\\\\"]\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"bundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n test_job:\\\\n name: test-job\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": [\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\\\\\.terraformrc\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TF_CLI_CONFIG_FILE]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\\\",\\n \\\"New\\\": \\\"[TERRAFORM]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/libs/vendored_py_packages\\\",\\n \\\"New\\\": \\\"[VENDORED_PY_PACKAGES]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\\\\\.296\\\\\\\\.0-py3-none-any\\\\\\\\.whl\\\",\\n \\\"New\\\": \\\"[DATABRICKS_BUNDLES_WHEEL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\\\",\\n \\\"New\\\": \\\"[CLI]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\\\\\.293\\\\\\\\.0/databricks\\\",\\n \\\"New\\\": \\\"[CLI_293]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"New\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64\\\",\\n \\\"New\\\": \\\"[BUILD_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"0\\\\\\\\.0\\\\\\\\.0-dev(\\\\\\\\+[a-f0-9]{10,16})?\\\",\\n \\\"New\\\": \\\"[DEV_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"databricks-sdk-go/[0-9]+\\\\\\\\.[0-9]+\\\\\\\\.[0-9]+\\\",\\n \\\"New\\\": \\\"databricks-sdk-go/[SDK_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1\\\\\\\\.26\\\\\\\\.1\\\",\\n \\\"New\\\": \\\"[GO_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance\\\",\\n \\\"New\\\": \\\"[TESTROOT]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"dbapi[0-9a-f]+\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TOKEN]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"i3\\\\\\\\.xlarge\\\",\\n \\\"New\\\": \\\"[NODE_TYPE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"New\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]@databricks\\\\\\\\.com\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERID]\\\",\\n \\\"New\\\": \\\"[USERID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"https://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:40041\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"http://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:40041\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:40041\\\",\\n \\\"New\\\": \\\"[DATABRICKS_HOST]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\\\",\\n \\\"New\\\": \\\"[UUID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{20,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{17}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_NANOS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{17,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{14,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{11}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_MILLIS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{11,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{8}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_S]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{8,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d\\\\\\\\.\\\\\\\\d+(Z|\\\\\\\\+\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d)?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\dZ?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[METASTORE_NAME]|[METASTORE_NAME]\\\",\\n \\\"New\\\": \\\"[METASTORE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\",\\n \\\"New\\\": \\\"\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\"protoLogs\\\\\\\": \\\\\\\\[.+\\\\\\\\]\\\",\\n \\\"New\\\": \\\"\\\\\\\"protoLogs\\\\\\\": [\\\\\\\"TELEMETRY\\\\\\\"]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n }\\n ]\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/.well-known/databricks-config\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/preview/scim/v2/Me\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"version_id\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"cli_version\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"version_type\\\\\\\": \\\\\\\"VERSION_TYPE_DEPLOY\\\\\\\",\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/delete\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\",\\\\n \\\\\\\"recursive\\\\\\\": true\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"raw_body\\\\\\\": \\\\\\\"Ignore = [\\\\\\\\\\\\\\\".databricks\\\\\\\\\\\\\\\"]\\\\\\\\n\\\\\\\"\\\\n}\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"\\\\n\\\\u003e\\\\u003e\\\\u003e [CLI] bundle deploy\\\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"errcode() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e' if it was previously set\\\\n set -e\\\\n if [ $exit_code -ne 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nExit code: $exit_code\\\\\\\\n\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\nmusterr() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e'\\\\n set -e\\\\n if [ $exit_code -eq 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nUnexpected success\\\\\\\\n\\\\\\\"\\\\n exit 1\\\\n fi\\\\n}\\\\n\\\\ntrace() {\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\n\\\\u003e\\\\u003e\\\\u003e %s\\\\\\\\n\\\\\\\" \\\\\\\"$*\\\\\\\"\\\\n\\\\n if [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; then\\\\n # If the first argument contains '=', collect all env vars\\\\n local env_vars=()\\\\n while [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; do\\\\n env_vars+=(\\\\\\\"$1\\\\\\\")\\\\n shift\\\\n done\\\\n # Export environment variables in a subshell and execute the command\\\\n (\\\\n export \\\\\\\"${env_vars[@]}\\\\\\\"\\\\n \\\\\\\"$@\\\\\\\"\\\\n )\\\\n else\\\\n # Execute the command normally\\\\n \\\\\\\"$@\\\\\\\"\\\\n fi\\\\n\\\\n return $?\\\\n}\\\\n\\\\ngit-repo-init() {\\\\n git init -qb main\\\\n git config core.autocrlf false\\\\n git config user.name \\\\\\\"Tester\\\\\\\"\\\\n git config user.email \\\\\\\"[USERNAME]\\\\\\\"\\\\n git config core.hooksPath no-hooks\\\\n git add databricks.yml\\\\n git commit -qm 'Add databricks.yml'\\\\n}\\\\n\\\\ntitle() {\\\\n local label=\\\\\\\"$1\\\\\\\"\\\\n printf \\\\\\\"\\\\\\\\n=== %b\\\\\\\" \\\\\\\"$label\\\\\\\"\\\\n}\\\\n\\\\nwithdir() {\\\\n local dir=\\\\\\\"$1\\\\\\\"\\\\n shift\\\\n local orig_dir=\\\\\\\"$(pwd)\\\\\\\"\\\\n cd \\\\\\\"$dir\\\\\\\" || return $?\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n cd \\\\\\\"$orig_dir\\\\\\\" || return $?\\\\n return $exit_code\\\\n}\\\\n\\\\nuuid() {\\\\n python3 -c 'import uuid; print(uuid.uuid4())'\\\\n}\\\\n\\\\nvenv_activate() {\\\\n if [[ \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"msys\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"cygwin\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"win32\\\\\\\" ]]; then\\\\n source .venv/Scripts/activate\\\\n else\\\\n source .venv/bin/activate\\\\n fi\\\\n}\\\\n\\\\nenvsubst() {\\\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\\\n # This is because the python interpreter is otherwise unable to find the python script\\\\n # when MSYS_NO_PATHCONV is enabled.\\\\n env -u MSYS_NO_PATHCONV envsubst.py\\\\n}\\\\n\\\\nprint_telemetry_bool_values() {\\\\n jq -r 'select(.path? == \\\\\\\"/telemetry-ext\\\\\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\\\\\"\\\\\\\\(.key) \\\\\\\\(.value)\\\\\\\") | .[]' out.requests.txt | sort\\\\n}\\\\n\\\\nsethome() {\\\\n local home=\\\\\\\"$1\\\\\\\"\\\\n mkdir -p \\\\\\\"$home\\\\\\\"\\\\n\\\\n # For macOS and Linux, use HOME.\\\\n export HOME=\\\\\\\"$home\\\\\\\"\\\\n\\\\n # For Windows, use USERPROFILE.\\\\n export USERPROFILE=\\\\\\\"$home\\\\\\\"\\\\n}\\\\n\\\\nas-test-sp() {\\\\n if [[ -z \\\\\\\"$TEST_SP_TOKEN\\\\\\\" ]]; then\\\\n echo \\\\\\\"Error: TEST_SP_TOKEN is not set.\\\\\\\" \\\\u003e\\\\u00262\\\\n return 1\\\\n fi\\\\n\\\\n DATABRICKS_TOKEN=\\\\\\\"$TEST_SP_TOKEN\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_SECRET=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_ID=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_AUTH_TYPE=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n \\\\\\\"$@\\\\\\\"\\\\n}\\\\n\\\\nreadplanarg() {\\\\n # Expands into \\\\\\\"--plan \\\\u003cfilename\\\\u003e\\\\\\\" based on READPLAN env var\\\\n # Use it with \\\\\\\"bundle deploy\\\\\\\" to configure two runs: once with saved plan and one without.\\\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\\\n if [[ -n \\\\\\\"$READPLAN\\\\\\\" ]]; then\\\\n printf -- \\\\\\\"--plan %s\\\\\\\" \\\\\\\"$1\\\\\\\"\\\\n else\\\\n printf \\\\\\\"\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\n(\\\\n# Deploy with one job.\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Add a second job and redeploy.\\\\ncat \\\\u003e databricks.yml \\\\u003c\\\\u003c 'EOF'\\\\nbundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n test_job:\\\\n name: test-job\\\\n new_job:\\\\n name: new-job\\\\nEOF\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Remove the first job and redeploy (should delete test_job).\\\\ncat \\\\u003e databricks.yml \\\\u003c\\\\u003c 'EOF'\\\\nbundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n new_job:\\\\n name: new-job\\\\nEOF\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Print metadata service requests across all three deploys.\\\\n# Version 1: CREATE test_job\\\\n# Version 2: CREATE new_job (test_job unchanged)\\\\n# Version 3: DELETE test_job (new_job unchanged)\\\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\\\n)\\\\n\\\\nrm -fr .databricks .gitignore\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"seq\\\": 1,\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"timestamp\\\": \\\"[TIMESTAMP]\\\",\\n \\\"files\\\": [\\n {\\n \\\"local_path\\\": \\\"out.requests.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"output.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"repls.json\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"script\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"test.toml\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"databricks.yml\\\",\\n \\\"is_notebook\\\": false\\n }\\n ],\\n \\\"id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.2/jobs/create\\\",\\n \\\"body\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"test-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\\\",\\n \\\"q\\\": {\\n \\\"resource_key\\\": \\\"jobs.test_job\\\"\\n },\\n \\\"body\\\": {\\n \\\"resource_key\\\": \\\"jobs.test_job\\\",\\n \\\"action_type\\\": \\\"OPERATION_ACTION_TYPE_CREATE\\\",\\n \\\"state\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"test-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n },\\n \\\"resource_id\\\": \\\"[NUMID]\\\",\\n \\\"status\\\": \\\"OPERATION_STATUS_SUCCEEDED\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"config\\\": {\\n \\\"bundle\\\": {\\n \\\"name\\\": \\\"sequential-deploys-test\\\",\\n \\\"target\\\": \\\"default\\\",\\n \\\"git\\\": {\\n \\\"bundle_root_path\\\": \\\".\\\"\\n }\\n },\\n \\\"workspace\\\": {\\n \\\"file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n },\\n \\\"resources\\\": {\\n \\\"jobs\\\": {\\n \\\"test_job\\\": {\\n \\\"id\\\": \\\"[NUMID]\\\",\\n \\\"relative_path\\\": \\\"databricks.yml\\\"\\n }\\n }\\n },\\n \\\"presets\\\": {\\n \\\"source_linked_deployment\\\": false\\n }\\n },\\n \\\"extra\\\": {}\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\\\",\\n \\\"body\\\": {\\n \\\"name\\\": \\\"deployments/[UUID]/versions/1\\\",\\n \\\"completion_reason\\\": \\\"VERSION_COMPLETE_SUCCESS\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/telemetry-ext\\\",\\n \\\"body\\\": {\\n \\\"uploadTime\\\": [UNIX_TIME_MILLIS][0],\\n \\\"items\\\": [],\\n \\\"protoLogs\\\": [\\n \\\"{\\\\\\\"frontend_log_event_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"entry\\\\\\\":{\\\\\\\"databricks_cli_log\\\\\\\":{\\\\\\\"execution_context\\\\\\\":{\\\\\\\"cmd_exec_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"version\\\\\\\":\\\\\\\"[DEV_VERSION]\\\\\\\",\\\\\\\"command\\\\\\\":\\\\\\\"bundle_deploy\\\\\\\",\\\\\\\"operating_system\\\\\\\":\\\\\\\"linux\\\\\\\",\\\\\\\"execution_time_ms\\\\\\\":56,\\\\\\\"exit_code\\\\\\\":0},\\\\\\\"bundle_deploy_event\\\\\\\":{\\\\\\\"bundle_uuid\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"deployment_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"resource_count\\\\\\\":1,\\\\\\\"resource_job_count\\\\\\\":1,\\\\\\\"resource_pipeline_count\\\\\\\":0,\\\\\\\"resource_model_count\\\\\\\":0,\\\\\\\"resource_experiment_count\\\\\\\":0,\\\\\\\"resource_model_serving_endpoint_count\\\\\\\":0,\\\\\\\"resource_registered_model_count\\\\\\\":0,\\\\\\\"resource_quality_monitor_count\\\\\\\":0,\\\\\\\"resource_schema_count\\\\\\\":0,\\\\\\\"resource_volume_count\\\\\\\":0,\\\\\\\"resource_cluster_count\\\\\\\":0,\\\\\\\"resource_dashboard_count\\\\\\\":0,\\\\\\\"resource_app_count\\\\\\\":0,\\\\\\\"resource_job_ids\\\\\\\":[\\\\\\\"[NUMID]\\\\\\\"],\\\\\\\"experimental\\\\\\\":{\\\\\\\"configuration_file_count\\\\\\\":1,\\\\\\\"variable_count\\\\\\\":0,\\\\\\\"complex_variable_count\\\\\\\":0,\\\\\\\"lookup_variable_count\\\\\\\":0,\\\\\\\"target_count\\\\\\\":1,\\\\\\\"bool_values\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.attempt\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.miss\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"experimental.use_legacy_run_as\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"run_as_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"presets_name_prefix_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"python_wheel_wrapper_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"skip_artifact_cleanup\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_serverless_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_job_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_interactive_compute\\\\\\\",\\\\\\\"value\\\\\\\":false}],\\\\\\\"bundle_mode\\\\\\\":\\\\\\\"TYPE_UNSPECIFIED\\\\\\\",\\\\\\\"workspace_artifact_path_type\\\\\\\":\\\\\\\"WORKSPACE_FILE_SYSTEM\\\\\\\",\\\\\\\"bundle_mutator_execution_time_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Deploy\\\\\\\",\\\\\\\"value\\\\\\\":42},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Initialize\\\\\\\",\\\\\\\"value\\\\\\\":8},{\\\\\\\"key\\\\\\\":\\\\\\\"resourcemutator.(processStaticResources)\\\\\\\",\\\\\\\"value\\\\\\\":3},{\\\\\\\"key\\\\\\\":\\\\\\\"files.(upload)\\\\\\\",\\\\\\\"value\\\\\\\":3},{\\\\\\\"key\\\\\\\":\\\\\\\"mutator.(selectDefaultTarget)\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"validate.(enum)\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Build\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"validate.FastValidate\\\\\\\",\\\\\\\"value\\\\\\\":0}],\\\\\\\"local_cache_measurements_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.compute_duration\\\\\\\",\\\\\\\"value\\\\\\\":0}]}}}}}\\\"\\n ]\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/resources\\\",\\n \\\"q\\\": {\\n \\\"page_size\\\": \\\"1000\\\"\\n },\\n \\\"body\\\": null\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"2\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"\\\\n\\\\u003e\\\\u003e\\\\u003e [CLI] bundle deploy\\\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\\\nDeploying resources...\\\\nDeployment complete!\\\\n\\\\n\\\\u003e\\\\u003e\\\\u003e [CLI] bundle deploy\\\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"bundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n test_job:\\\\n name: test-job\\\\n new_job:\\\\n name: new-job\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/.well-known/databricks-config\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/preview/scim/v2/Me\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"version_id\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"cli_version\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"version_type\\\\\\\": \\\\\\\"VERSION_TYPE_DEPLOY\\\\\\\",\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/delete\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\",\\\\n \\\\\\\"recursive\\\\\\\": true\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"raw_body\\\\\\\": \\\\\\\"Ignore = [\\\\\\\\\\\\\\\".databricks\\\\\\\\\\\\\\\"]\\\\\\\\n\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"raw_body\\\\\\\": \\\\\\\"bundle:\\\\\\\\n name: sequential-deploys-test\\\\\\\\n\\\\\\\\nresources:\\\\\\\\n jobs:\\\\\\\\n test_job:\\\\\\\\n name: test-job\\\\\\\\n\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": [\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\\\\\\\\\\\\\.terraformrc\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[DATABRICKS_TF_CLI_CONFIG_FILE]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TERRAFORM]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/libs/vendored_py_packages\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[VENDORED_PY_PACKAGES]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\\\\\\\\\\\\\.296\\\\\\\\\\\\\\\\.0-py3-none-any\\\\\\\\\\\\\\\\.whl\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[DATABRICKS_BUNDLES_WHEEL]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[CLI]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\\\\\\\\\\\\\.293\\\\\\\\\\\\\\\\.0/databricks\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[CLI_293]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[TEST_DEFAULT_CLUSTER_ID]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TEST_DEFAULT_CLUSTER_ID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[TEST_INSTANCE_POOL_ID]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TEST_INSTANCE_POOL_ID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/acceptance/build/linux_amd64\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[BUILD_DIR]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"0\\\\\\\\\\\\\\\\.0\\\\\\\\\\\\\\\\.0-dev(\\\\\\\\\\\\\\\\+[a-f0-9]{10,16})?\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"databricks-sdk-go/[0-9]+\\\\\\\\\\\\\\\\.[0-9]+\\\\\\\\\\\\\\\\.[0-9]+\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"databricks-sdk-go/[SDK_VERSION]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"1\\\\\\\\\\\\\\\\.26\\\\\\\\\\\\\\\\.1\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[GO_VERSION]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/acceptance\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TESTROOT]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"dbapi[0-9a-f]+\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[DATABRICKS_TOKEN]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"i3\\\\\\\\\\\\\\\\.xlarge\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[NODE_TYPE_ID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[UNIQUE_NAME]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[UNIQUE_NAME]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[TEST_TMP_DIR]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TEST_TMP_DIR]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[TEST_TMP_DIR]_PARENT\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TEST_TMP_DIR]_PARENT\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[USERNAME]@databricks\\\\\\\\\\\\\\\\.com\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[USERNAME]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[USERNAME]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[USERNAME]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[USERID]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[USERID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"https://127\\\\\\\\\\\\\\\\.0\\\\\\\\\\\\\\\\.0\\\\\\\\\\\\\\\\.1:40041\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[DATABRICKS_URL]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"http://127\\\\\\\\\\\\\\\\.0\\\\\\\\\\\\\\\\.0\\\\\\\\\\\\\\\\.1:40041\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[DATABRICKS_URL]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"127\\\\\\\\\\\\\\\\.0\\\\\\\\\\\\\\\\.0\\\\\\\\\\\\\\\\.1:40041\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[DATABRICKS_HOST]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[UUID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"\\\\\\\\\\\\\\\\d{20,}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[NUMID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"1[78]\\\\\\\\\\\\\\\\d{17}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[UNIX_TIME_NANOS]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": true\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"\\\\\\\\\\\\\\\\d{17,}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[NUMID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"\\\\\\\\\\\\\\\\d{14,}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[NUMID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"1[78]\\\\\\\\\\\\\\\\d{11}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[UNIX_TIME_MILLIS]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": true\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"\\\\\\\\\\\\\\\\d{11,}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[NUMID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"1[78]\\\\\\\\\\\\\\\\d{8}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[UNIX_TIME_S]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"\\\\\\\\\\\\\\\\d{8,}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[NUMID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"2\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d-\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d-\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d(T| )\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d:\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d:\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\.\\\\\\\\\\\\\\\\d+(Z|\\\\\\\\\\\\\\\\+\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d:\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d)?\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TIMESTAMP]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 9,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"2\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d-\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d-\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d(T| )\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d:\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d:\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\dZ?\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TIMESTAMP]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 9,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[METASTORE_NAME]|[METASTORE_NAME]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[METASTORE_NAME]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"os/[OS]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"os/[OS]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"os/[OS]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"os/[OS]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"os/[OS]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"os/[OS]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"\\\\\\\\\\\\\\\"protoLogs\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\\[.+\\\\\\\\\\\\\\\\]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"\\\\\\\\\\\\\\\"protoLogs\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"TELEMETRY\\\\\\\\\\\\\\\"]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n }\\\\n ]\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"raw_body\\\\\\\": \\\\\\\"{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"GET\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/.well-known/databricks-config\\\\\\\\\\\\\\\"\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"GET\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/preview/scim/v2/Me\\\\\\\\\\\\\\\"\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"GET\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/get-status\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"return_export_info\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"GET\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/get-status\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"return_export_info\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"GET\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/get-status\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"return_export_info\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"POST\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"overwrite\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\"\\\\\\\\n },\\\\\\\\n \\\\\\\\\\\\\\\"body\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"deployment_id\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"[UUID]\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"POST\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/bundle/deployments\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"deployment_id\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"[UUID]\\\\\\\\\\\\\\\"\\\\\\\\n },\\\\\\\\n \\\\\\\\\\\\\\\"body\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"target_name\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"default\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"POST\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"version_id\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"1\\\\\\\\\\\\\\\"\\\\\\\\n },\\\\\\\\n \\\\\\\\\\\\\\\"body\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"cli_version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"[DEV_VERSION]\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"version_type\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"VERSION_TYPE_DEPLOY\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"target_name\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"default\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"POST\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/delete\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"body\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"recursive\\\\\\\\\\\\\\\": true\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"POST\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"body\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"GET\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/get-status\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"POST\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"body\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"GET\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/get-status\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"POST\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"overwrite\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\"\\\\\\\\n },\\\\\\\\n \\\\\\\\\\\\\\\"raw_body\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Ignore = [\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\".databricks\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\"\\\\\\\\n}\\\\\\\\n\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"raw_body\\\\\\\": \\\\\\\"\\\\\\\\n\\\\\\\\u003e\\\\\\\\u003e\\\\\\\\u003e [CLI] bundle deploy\\\\\\\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\\\\\\\n\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"raw_body\\\\\\\": \\\\\\\"errcode() {\\\\\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\\\\\n set +e\\\\\\\\n # Execute the provided command with all arguments\\\\\\\\n \\\\\\\\\\\\\\\"$@\\\\\\\\\\\\\\\"\\\\\\\\n local exit_code=$?\\\\\\\\n # Re-enable 'set -e' if it was previously set\\\\\\\\n set -e\\\\\\\\n if [ $exit_code -ne 0 ]; then\\\\\\\\n \\\\\\\\u003e\\\\\\\\u00262 printf \\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\nExit code: $exit_code\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\"\\\\\\\\n fi\\\\\\\\n}\\\\\\\\n\\\\\\\\nmusterr() {\\\\\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\\\\\n set +e\\\\\\\\n # Execute the provided command with all arguments\\\\\\\\n \\\\\\\\\\\\\\\"$@\\\\\\\\\\\\\\\"\\\\\\\\n local exit_code=$?\\\\\\\\n # Re-enable 'set -e'\\\\\\\\n set -e\\\\\\\\n if [ $exit_code -eq 0 ]; then\\\\\\\\n \\\\\\\\u003e\\\\\\\\u00262 printf \\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\nUnexpected success\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\"\\\\\\\\n exit 1\\\\\\\\n fi\\\\\\\\n}\\\\\\\\n\\\\\\\\ntrace() {\\\\\\\\n \\\\\\\\u003e\\\\\\\\u00262 printf \\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\n\\\\\\\\u003e\\\\\\\\u003e\\\\\\\\u003e %s\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\" \\\\\\\\\\\\\\\"$*\\\\\\\\\\\\\\\"\\\\\\\\n\\\\\\\\n if [[ \\\\\\\\\\\\\\\"$1\\\\\\\\\\\\\\\" == *\\\\\\\\\\\\\\\"=\\\\\\\\\\\\\\\"* ]]; then\\\\\\\\n # If the first argument contains '=', collect all env vars\\\\\\\\n local env_vars=()\\\\\\\\n while [[ \\\\\\\\\\\\\\\"$1\\\\\\\\\\\\\\\" == *\\\\\\\\\\\\\\\"=\\\\\\\\\\\\\\\"* ]]; do\\\\\\\\n env_vars+=(\\\\\\\\\\\\\\\"$1\\\\\\\\\\\\\\\")\\\\\\\\n shift\\\\\\\\n done\\\\\\\\n # Export environment variables in a subshell and execute the command\\\\\\\\n (\\\\\\\\n export \\\\\\\\\\\\\\\"${env_vars[@]}\\\\\\\\\\\\\\\"\\\\\\\\n \\\\\\\\\\\\\\\"$@\\\\\\\\\\\\\\\"\\\\\\\\n )\\\\\\\\n else\\\\\\\\n # Execute the command normally\\\\\\\\n \\\\\\\\\\\\\\\"$@\\\\\\\\\\\\\\\"\\\\\\\\n fi\\\\\\\\n\\\\\\\\n return $?\\\\\\\\n}\\\\\\\\n\\\\\\\\ngit-repo-init() {\\\\\\\\n git init -qb main\\\\\\\\n git config core.autocrlf false\\\\\\\\n git config user.name \\\\\\\\\\\\\\\"Tester\\\\\\\\\\\\\\\"\\\\\\\\n git config user.email \\\\\\\\\\\\\\\"[USERNAME]\\\\\\\\\\\\\\\"\\\\\\\\n git config core.hooksPath no-hooks\\\\\\\\n git add databricks.yml\\\\\\\\n git commit -qm 'Add databricks.yml'\\\\\\\\n}\\\\\\\\n\\\\\\\\ntitle() {\\\\\\\\n local label=\\\\\\\\\\\\\\\"$1\\\\\\\\\\\\\\\"\\\\\\\\n printf \\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\n=== %b\\\\\\\\\\\\\\\" \\\\\\\\\\\\\\\"$label\\\\\\\\\\\\\\\"\\\\\\\\n}\\\\\\\\n\\\\\\\\nwithdir() {\\\\\\\\n local dir=\\\\\\\\\\\\\\\"$1\\\\\\\\\\\\\\\"\\\\\\\\n shift\\\\\\\\n local orig_dir=\\\\\\\\\\\\\\\"$(pwd)\\\\\\\\\\\\\\\"\\\\\\\\n cd \\\\\\\\\\\\\\\"$dir\\\\\\\\\\\\\\\" || return $?\\\\\\\\n \\\\\\\\\\\\\\\"$@\\\\\\\\\\\\\\\"\\\\\\\\n local exit_code=$?\\\\\\\\n cd \\\\\\\\\\\\\\\"$orig_dir\\\\\\\\\\\\\\\" || return $?\\\\\\\\n return $exit_code\\\\\\\\n}\\\\\\\\n\\\\\\\\nuuid() {\\\\\\\\n python3 -c 'import uuid; print(uuid.uuid4())'\\\\\\\\n}\\\\\\\\n\\\\\\\\nvenv_activate() {\\\\\\\\n if [[ \\\\\\\\\\\\\\\"$OSTYPE\\\\\\\\\\\\\\\" == \\\\\\\\\\\\\\\"msys\\\\\\\\\\\\\\\" || \\\\\\\\\\\\\\\"$OSTYPE\\\\\\\\\\\\\\\" == \\\\\\\\\\\\\\\"cygwin\\\\\\\\\\\\\\\" || \\\\\\\\\\\\\\\"$OSTYPE\\\\\\\\\\\\\\\" == \\\\\\\\\\\\\\\"win32\\\\\\\\\\\\\\\" ]]; then\\\\\\\\n source .venv/Scripts/activate\\\\\\\\n else\\\\\\\\n source .venv/bin/activate\\\\\\\\n fi\\\\\\\\n}\\\\\\\\n\\\\\\\\nenvsubst() {\\\\\\\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\\\\\\\n # This is because the python interpreter is otherwise unable to find the python script\\\\\\\\n # when MSYS_NO_PATHCONV is enabled.\\\\\\\\n env -u MSYS_NO_PATHCONV envsubst.py\\\\\\\\n}\\\\\\\\n\\\\\\\\nprint_telemetry_bool_values() {\\\\\\\\n jq -r 'select(.path? == \\\\\\\\\\\\\\\"/telemetry-ext\\\\\\\\\\\\\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\(.key) \\\\\\\\\\\\\\\\(.value)\\\\\\\\\\\\\\\") | .[]' out.requests.txt | sort\\\\\\\\n}\\\\\\\\n\\\\\\\\nsethome() {\\\\\\\\n local home=\\\\\\\\\\\\\\\"$1\\\\\\\\\\\\\\\"\\\\\\\\n mkdir -p \\\\\\\\\\\\\\\"$home\\\\\\\\\\\\\\\"\\\\\\\\n\\\\\\\\n # For macOS and Linux, use HOME.\\\\\\\\n export HOME=\\\\\\\\\\\\\\\"$home\\\\\\\\\\\\\\\"\\\\\\\\n\\\\\\\\n # For Windows, use USERPROFILE.\\\\\\\\n export USERPROFILE=\\\\\\\\\\\\\\\"$home\\\\\\\\\\\\\\\"\\\\\\\\n}\\\\\\\\n\\\\\\\\nas-test-sp() {\\\\\\\\n if [[ -z \\\\\\\\\\\\\\\"$TEST_SP_TOKEN\\\\\\\\\\\\\\\" ]]; then\\\\\\\\n echo \\\\\\\\\\\\\\\"Error: TEST_SP_TOKEN is not set.\\\\\\\\\\\\\\\" \\\\\\\\u003e\\\\\\\\u00262\\\\\\\\n return 1\\\\\\\\n fi\\\\\\\\n\\\\\\\\n DATABRICKS_TOKEN=\\\\\\\\\\\\\\\"$TEST_SP_TOKEN\\\\\\\\\\\\\\\" \\\\\\\\\\\\\\\\\\\\\\\\n DATABRICKS_CLIENT_SECRET=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" \\\\\\\\\\\\\\\\\\\\\\\\n DATABRICKS_CLIENT_ID=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" \\\\\\\\\\\\\\\\\\\\\\\\n DATABRICKS_AUTH_TYPE=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" \\\\\\\\\\\\\\\\\\\\\\\\n \\\\\\\\\\\\\\\"$@\\\\\\\\\\\\\\\"\\\\\\\\n}\\\\\\\\n\\\\\\\\nreadplanarg() {\\\\\\\\n # Expands into \\\\\\\\\\\\\\\"--plan \\\\\\\\u003cfilename\\\\\\\\u003e\\\\\\\\\\\\\\\" based on READPLAN env var\\\\\\\\n # Use it with \\\\\\\\\\\\\\\"bundle deploy\\\\\\\\\\\\\\\" to configure two runs: once with saved plan and one without.\\\\\\\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\\\\\\\n if [[ -n \\\\\\\\\\\\\\\"$READPLAN\\\\\\\\\\\\\\\" ]]; then\\\\\\\\n printf -- \\\\\\\\\\\\\\\"--plan %s\\\\\\\\\\\\\\\" \\\\\\\\\\\\\\\"$1\\\\\\\\\\\\\\\"\\\\\\\\n else\\\\\\\\n printf \\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\n fi\\\\\\\\n}\\\\\\\\n\\\\\\\\n(\\\\\\\\n# Deploy with one job.\\\\\\\\ntrace $CLI bundle deploy\\\\\\\\n\\\\\\\\n# Add a second job and redeploy.\\\\\\\\ncat \\\\\\\\u003e databricks.yml \\\\\\\\u003c\\\\\\\\u003c 'EOF'\\\\\\\\nbundle:\\\\\\\\n name: sequential-deploys-test\\\\\\\\n\\\\\\\\nresources:\\\\\\\\n jobs:\\\\\\\\n test_job:\\\\\\\\n name: test-job\\\\\\\\n new_job:\\\\\\\\n name: new-job\\\\\\\\nEOF\\\\\\\\ntrace $CLI bundle deploy\\\\\\\\n\\\\\\\\n# Remove the first job and redeploy (should delete test_job).\\\\\\\\ncat \\\\\\\\u003e databricks.yml \\\\\\\\u003c\\\\\\\\u003c 'EOF'\\\\\\\\nbundle:\\\\\\\\n name: sequential-deploys-test\\\\\\\\n\\\\\\\\nresources:\\\\\\\\n jobs:\\\\\\\\n new_job:\\\\\\\\n name: new-job\\\\\\\\nEOF\\\\\\\\ntrace $CLI bundle deploy\\\\\\\\n\\\\\\\\n# Print metadata service requests across all three deploys.\\\\\\\\n# Version 1: CREATE test_job\\\\\\\\n# Version 2: CREATE new_job (test_job unchanged)\\\\\\\\n# Version 3: DELETE test_job (new_job unchanged)\\\\\\\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\\\\\\\n)\\\\\\\\n\\\\\\\\nrm -fr .databricks .gitignore\\\\\\\\n\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"version\\\\\\\": 1,\\\\n \\\\\\\"seq\\\\\\\": 1,\\\\n \\\\\\\"cli_version\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"timestamp\\\\\\\": \\\\\\\"[TIMESTAMP]\\\\\\\",\\\\n \\\\\\\"files\\\\\\\": [\\\\n {\\\\n \\\\\\\"local_path\\\\\\\": \\\\\\\"out.requests.txt\\\\\\\",\\\\n \\\\\\\"is_notebook\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"local_path\\\\\\\": \\\\\\\"output.txt\\\\\\\",\\\\n \\\\\\\"is_notebook\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"local_path\\\\\\\": \\\\\\\"repls.json\\\\\\\",\\\\n \\\\\\\"is_notebook\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"local_path\\\\\\\": \\\\\\\"script\\\\\\\",\\\\n \\\\\\\"is_notebook\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"local_path\\\\\\\": \\\\\\\"test.toml\\\\\\\",\\\\n \\\\\\\"is_notebook\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"local_path\\\\\\\": \\\\\\\"databricks.yml\\\\\\\",\\\\n \\\\\\\"is_notebook\\\\\\\": false\\\\n }\\\\n ],\\\\n \\\\\\\"id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.2/jobs/create\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"deployment\\\\\\\": {\\\\n \\\\\\\"kind\\\\\\\": \\\\\\\"BUNDLE\\\\\\\",\\\\n \\\\\\\"metadata_file_path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\\\\\"\\\\n },\\\\n \\\\\\\"edit_mode\\\\\\\": \\\\\\\"UI_LOCKED\\\\\\\",\\\\n \\\\\\\"format\\\\\\\": \\\\\\\"MULTI_TASK\\\\\\\",\\\\n \\\\\\\"max_concurrent_runs\\\\\\\": 1,\\\\n \\\\\\\"name\\\\\\\": \\\\\\\"test-job\\\\\\\",\\\\n \\\\\\\"queue\\\\\\\": {\\\\n \\\\\\\"enabled\\\\\\\": true\\\\n }\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"resource_key\\\\\\\": \\\\\\\"jobs.test_job\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"resource_key\\\\\\\": \\\\\\\"jobs.test_job\\\\\\\",\\\\n \\\\\\\"action_type\\\\\\\": \\\\\\\"OPERATION_ACTION_TYPE_CREATE\\\\\\\",\\\\n \\\\\\\"state\\\\\\\": {\\\\n \\\\\\\"deployment\\\\\\\": {\\\\n \\\\\\\"kind\\\\\\\": \\\\\\\"BUNDLE\\\\\\\",\\\\n \\\\\\\"metadata_file_path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\\\\\"\\\\n },\\\\n \\\\\\\"edit_mode\\\\\\\": \\\\\\\"UI_LOCKED\\\\\\\",\\\\n \\\\\\\"format\\\\\\\": \\\\\\\"MULTI_TASK\\\\\\\",\\\\n \\\\\\\"max_concurrent_runs\\\\\\\": 1,\\\\n \\\\\\\"name\\\\\\\": \\\\\\\"test-job\\\\\\\",\\\\n \\\\\\\"queue\\\\\\\": {\\\\n \\\\\\\"enabled\\\\\\\": true\\\\n }\\\\n },\\\\n \\\\\\\"resource_id\\\\\\\": \\\\\\\"[NUMID]\\\\\\\",\\\\n \\\\\\\"status\\\\\\\": \\\\\\\"OPERATION_STATUS_SUCCEEDED\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"version\\\\\\\": 1,\\\\n \\\\\\\"config\\\\\\\": {\\\\n \\\\\\\"bundle\\\\\\\": {\\\\n \\\\\\\"name\\\\\\\": \\\\\\\"sequential-deploys-test\\\\\\\",\\\\n \\\\\\\"target\\\\\\\": \\\\\\\"default\\\\\\\",\\\\n \\\\\\\"git\\\\\\\": {\\\\n \\\\\\\"bundle_root_path\\\\\\\": \\\\\\\".\\\\\\\"\\\\n }\\\\n },\\\\n \\\\\\\"workspace\\\\\\\": {\\\\n \\\\\\\"file_path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n },\\\\n \\\\\\\"resources\\\\\\\": {\\\\n \\\\\\\"jobs\\\\\\\": {\\\\n \\\\\\\"test_job\\\\\\\": {\\\\n \\\\\\\"id\\\\\\\": \\\\\\\"[NUMID]\\\\\\\",\\\\n \\\\\\\"relative_path\\\\\\\": \\\\\\\"databricks.yml\\\\\\\"\\\\n }\\\\n }\\\\n },\\\\n \\\\\\\"presets\\\\\\\": {\\\\n \\\\\\\"source_linked_deployment\\\\\\\": false\\\\n }\\\\n },\\\\n \\\\\\\"extra\\\\\\\": {}\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"name\\\\\\\": \\\\\\\"deployments/[UUID]/versions/1\\\\\\\",\\\\n \\\\\\\"completion_reason\\\\\\\": \\\\\\\"VERSION_COMPLETE_SUCCESS\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/telemetry-ext\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"uploadTime\\\\\\\": [UNIX_TIME_MILLIS][0],\\\\n \\\\\\\"items\\\\\\\": [],\\\\n \\\\\\\"protoLogs\\\\\\\": [\\\\n \\\\\\\"{\\\\\\\\\\\\\\\"frontend_log_event_id\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"[UUID]\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"entry\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"databricks_cli_log\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"execution_context\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"cmd_exec_id\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"[UUID]\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"version\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"[DEV_VERSION]\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"command\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"bundle_deploy\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"operating_system\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"linux\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"execution_time_ms\\\\\\\\\\\\\\\":56,\\\\\\\\\\\\\\\"exit_code\\\\\\\\\\\\\\\":0},\\\\\\\\\\\\\\\"bundle_deploy_event\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"bundle_uuid\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"[UUID]\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"deployment_id\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"[UUID]\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"resource_count\\\\\\\\\\\\\\\":1,\\\\\\\\\\\\\\\"resource_job_count\\\\\\\\\\\\\\\":1,\\\\\\\\\\\\\\\"resource_pipeline_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_model_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_experiment_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_model_serving_endpoint_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_registered_model_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_quality_monitor_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_schema_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_volume_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_cluster_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_dashboard_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_app_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_job_ids\\\\\\\\\\\\\\\":[\\\\\\\\\\\\\\\"[NUMID]\\\\\\\\\\\\\\\"],\\\\\\\\\\\\\\\"experimental\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"configuration_file_count\\\\\\\\\\\\\\\":1,\\\\\\\\\\\\\\\"variable_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"complex_variable_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"lookup_variable_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"target_count\\\\\\\\\\\\\\\":1,\\\\\\\\\\\\\\\"bool_values\\\\\\\\\\\\\\\":[{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"local.cache.attempt\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":true},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"local.cache.miss\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":true},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"experimental.use_legacy_run_as\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"run_as_set\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"presets_name_prefix_is_set\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"python_wheel_wrapper_is_set\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"skip_artifact_cleanup\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"has_serverless_compute\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"has_classic_job_compute\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"has_classic_interactive_compute\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false}],\\\\\\\\\\\\\\\"bundle_mode\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"TYPE_UNSPECIFIED\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"workspace_artifact_path_type\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"WORKSPACE_FILE_SYSTEM\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"bundle_mutator_execution_time_ms\\\\\\\\\\\\\\\":[{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"phases.Deploy\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":42},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"phases.Initialize\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":8},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"resourcemutator.(processStaticResources)\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":3},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"files.(upload)\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":3},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"mutator.(selectDefaultTarget)\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":1},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"validate.(enum)\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":1},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"phases.Build\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":1},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"validate.FastValidate\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":0}],\\\\\\\\\\\\\\\"local_cache_measurements_ms\\\\\\\\\\\\\\\":[{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"local.cache.compute_duration\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":0}]}}}}}\\\\\\\"\\\\n ]\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/.well-known/databricks-config\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/resources\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"page_size\\\\\\\": \\\\\\\"1000\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": null\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"version_id\\\\\\\": \\\\\\\"2\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"cli_version\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"version_type\\\\\\\": \\\\\\\"VERSION_TYPE_DEPLOY\\\\\\\",\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/delete\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\",\\\\n \\\\\\\"recursive\\\\\\\": true\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"seq\\\": 2,\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"timestamp\\\": \\\"[TIMESTAMP]\\\",\\n \\\"files\\\": [\\n {\\n \\\"local_path\\\": \\\"out.requests.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"output.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"repls.json\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"script\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"test.toml\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"databricks.yml\\\",\\n \\\"is_notebook\\\": false\\n }\\n ],\\n \\\"id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.2/jobs/get\\\",\\n \\\"q\\\": {\\n \\\"job_id\\\": \\\"[NUMID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.2/jobs/create\\\",\\n \\\"body\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"new-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/2/operations\\\",\\n \\\"q\\\": {\\n \\\"resource_key\\\": \\\"jobs.new_job\\\"\\n },\\n \\\"body\\\": {\\n \\\"resource_key\\\": \\\"jobs.new_job\\\",\\n \\\"action_type\\\": \\\"OPERATION_ACTION_TYPE_CREATE\\\",\\n \\\"state\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"new-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n },\\n \\\"resource_id\\\": \\\"[NUMID]\\\",\\n \\\"status\\\": \\\"OPERATION_STATUS_SUCCEEDED\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"config\\\": {\\n \\\"bundle\\\": {\\n \\\"name\\\": \\\"sequential-deploys-test\\\",\\n \\\"target\\\": \\\"default\\\",\\n \\\"git\\\": {\\n \\\"bundle_root_path\\\": \\\".\\\"\\n }\\n },\\n \\\"workspace\\\": {\\n \\\"file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n },\\n \\\"resources\\\": {\\n \\\"jobs\\\": {\\n \\\"new_job\\\": {\\n \\\"id\\\": \\\"[NUMID]\\\",\\n \\\"relative_path\\\": \\\"databricks.yml\\\"\\n },\\n \\\"test_job\\\": {\\n \\\"id\\\": \\\"[NUMID]\\\",\\n \\\"relative_path\\\": \\\"databricks.yml\\\"\\n }\\n }\\n },\\n \\\"presets\\\": {\\n \\\"source_linked_deployment\\\": false\\n }\\n },\\n \\\"extra\\\": {}\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/2/complete\\\",\\n \\\"body\\\": {\\n \\\"name\\\": \\\"deployments/[UUID]/versions/2\\\",\\n \\\"completion_reason\\\": \\\"VERSION_COMPLETE_SUCCESS\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/telemetry-ext\\\",\\n \\\"body\\\": {\\n \\\"uploadTime\\\": [UNIX_TIME_MILLIS][1],\\n \\\"items\\\": [],\\n \\\"protoLogs\\\": [\\n \\\"{\\\\\\\"frontend_log_event_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"entry\\\\\\\":{\\\\\\\"databricks_cli_log\\\\\\\":{\\\\\\\"execution_context\\\\\\\":{\\\\\\\"cmd_exec_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"version\\\\\\\":\\\\\\\"[DEV_VERSION]\\\\\\\",\\\\\\\"command\\\\\\\":\\\\\\\"bundle_deploy\\\\\\\",\\\\\\\"operating_system\\\\\\\":\\\\\\\"linux\\\\\\\",\\\\\\\"execution_time_ms\\\\\\\":29,\\\\\\\"exit_code\\\\\\\":0},\\\\\\\"bundle_deploy_event\\\\\\\":{\\\\\\\"bundle_uuid\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"deployment_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"resource_count\\\\\\\":2,\\\\\\\"resource_job_count\\\\\\\":2,\\\\\\\"resource_pipeline_count\\\\\\\":0,\\\\\\\"resource_model_count\\\\\\\":0,\\\\\\\"resource_experiment_count\\\\\\\":0,\\\\\\\"resource_model_serving_endpoint_count\\\\\\\":0,\\\\\\\"resource_registered_model_count\\\\\\\":0,\\\\\\\"resource_quality_monitor_count\\\\\\\":0,\\\\\\\"resource_schema_count\\\\\\\":0,\\\\\\\"resource_volume_count\\\\\\\":0,\\\\\\\"resource_cluster_count\\\\\\\":0,\\\\\\\"resource_dashboard_count\\\\\\\":0,\\\\\\\"resource_app_count\\\\\\\":0,\\\\\\\"resource_job_ids\\\\\\\":[\\\\\\\"[NUMID]\\\\\\\",\\\\\\\"[NUMID]\\\\\\\"],\\\\\\\"experimental\\\\\\\":{\\\\\\\"configuration_file_count\\\\\\\":1,\\\\\\\"variable_count\\\\\\\":0,\\\\\\\"complex_variable_count\\\\\\\":0,\\\\\\\"lookup_variable_count\\\\\\\":0,\\\\\\\"target_count\\\\\\\":1,\\\\\\\"bool_values\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.attempt\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.hit\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"experimental.use_legacy_run_as\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"run_as_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"presets_name_prefix_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"python_wheel_wrapper_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"skip_artifact_cleanup\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_serverless_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_job_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_interactive_compute\\\\\\\",\\\\\\\"value\\\\\\\":false}],\\\\\\\"bundle_mode\\\\\\\":\\\\\\\"TYPE_UNSPECIFIED\\\\\\\",\\\\\\\"workspace_artifact_path_type\\\\\\\":\\\\\\\"WORKSPACE_FILE_SYSTEM\\\\\\\",\\\\\\\"bundle_mutator_execution_time_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Deploy\\\\\\\",\\\\\\\"value\\\\\\\":12},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Initialize\\\\\\\",\\\\\\\"value\\\\\\\":10},{\\\\\\\"key\\\\\\\":\\\\\\\"resourcemutator.(processStaticResources)\\\\\\\",\\\\\\\"value\\\\\\\":5},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Build\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"files.(upload)\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"validate.FastValidate\\\\\\\",\\\\\\\"value\\\\\\\":0}]}}}}}\\\"\\n ]\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/resources\\\",\\n \\\"q\\\": {\\n \\\"page_size\\\": \\\"1000\\\"\\n },\\n \\\"body\\\": null\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"3\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 3,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/delete\",\n \"body\": {\n \"job_id\": [NUMID]\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/3/operations\",\n \"q\": {\n \"resource_key\": \"jobs.test_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.test_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_DELETE\",\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"sequential-deploys-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"new_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/3/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/3\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][2],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":26,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.hit\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":11},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":8},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":2},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources/databricks.yml", + "q": { + "overwrite": "true" + }, + "raw_body": "bundle:\n name: add-resources-test\n\nresources:\n jobs:\n job_a:\n name: job-a\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/sequential-deploys/output.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e print_requests.py --get //bundle ^//workspace-files ^//import-file\nTraceback (most recent call last):\n File \"[TESTROOT]/bin/print_requests.py\", line 197, in \u003cmodule\u003e\n main()\n File \"[TESTROOT]/bin/print_requests.py\", line 178, in main\n filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort)\n File \"[TESTROOT]/bin/print_requests.py\", line 114, in filter_requests\n positive_filters.append(f.removeprefix(ADD_PREFIX))\nAttributeError: 'str' object has no attribute 'removeprefix'\n\nExit code: 1\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/deployment.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "seq": 1, + "cli_version": "[DEV_VERSION]", + "timestamp": "[TIMESTAMP]", + "files": [ + { + "local_path": "output.txt", + "is_notebook": false + }, + { + "local_path": "plan-and-summary/out.test.toml", + "is_notebook": false + }, + { + "local_path": "release-lock-error/out.test.toml", + "is_notebook": false + }, + { + "local_path": "test.toml", + "is_notebook": false + }, + { + "local_path": "release-lock-error/out.requests.txt", + "is_notebook": false + }, + { + "local_path": "release-lock-error/test.toml", + "is_notebook": false + }, + { + "local_path": "script", + "is_notebook": false + }, + { + "local_path": "plan-and-summary/databricks.yml", + "is_notebook": false + }, + { + "local_path": "add-resources/output.txt", + "is_notebook": false + }, + { + "local_path": "deploy-error/databricks.yml", + "is_notebook": false + }, + { + "local_path": "deploy-error/test.toml", + "is_notebook": false + }, + { + "local_path": "plan-and-summary/output.txt", + "is_notebook": false + }, + { + "local_path": "add-resources/out.requests.txt", + "is_notebook": false + }, + { + "local_path": "add-resources/test.toml", + "is_notebook": false + }, + { + "local_path": "deploy-error/out.test.toml", + "is_notebook": false + }, + { + "local_path": "repls.json", + "is_notebook": false + }, + { + "local_path": "add-resources/databricks.yml", + "is_notebook": false + }, + { + "local_path": "deploy-error/out.requests.txt", + "is_notebook": false + }, + { + "local_path": "sequential-deploys/test.toml", + "is_notebook": false + }, + { + "local_path": "release-lock-error/databricks.yml", + "is_notebook": false + }, + { + "local_path": "release-lock-error/output.txt", + "is_notebook": false + }, + { + "local_path": "out.requests.txt", + "is_notebook": false + }, + { + "local_path": "add-resources/out.test.toml", + "is_notebook": false + }, + { + "local_path": "deploy-error/output.txt", + "is_notebook": false + }, + { + "local_path": "plan-and-summary/out.requests.txt", + "is_notebook": false + }, + { + "local_path": "sequential-deploys/databricks.yml", + "is_notebook": false + }, + { + "local_path": "sequential-deploys/output.txt", + "is_notebook": false + }, + { + "local_path": "databricks.yml", + "is_notebook": false + }, + { + "local_path": "sequential-deploys/out.requests.txt", + "is_notebook": false + }, + { + "local_path": "sequential-deploys/out.test.toml", + "is_notebook": false + } + ], + "id": "[UUID]" + } +} +{ + "method": "POST", + "path": "/api/2.2/jobs/create", + "body": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/metadata.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "config": { + "bundle": { + "name": "metadata-service-test", + "target": "default", + "git": { + "bundle_root_path": "." + } + }, + "workspace": { + "file_path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files" + }, + "resources": { + "jobs": { + "test_job": { + "id": "[NUMID]", + "relative_path": "databricks.yml" + } + } + }, + "presets": { + "source_linked_deployment": false + } + }, + "extra": {} + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "POST", + "path": "/telemetry-ext", + "body": { + "uploadTime": [UNIX_TIME_MILLIS], + "items": [], + "protoLogs": [ + "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":90,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":1,\"resource_job_count\":1,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.miss\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":77},{\"key\":\"files.(upload)\",\"value\":67},{\"key\":\"phases.Initialize\",\"value\":8},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":3},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}],\"local_cache_measurements_ms\":[{\"key\":\"local.cache.compute_duration\",\"value\":0}]}}}}}" + ] + } +} diff --git a/acceptance/bundle/dms/output.txt b/acceptance/bundle/dms/output.txt index 52fcc7fa167..e00b914c324 100644 --- a/acceptance/bundle/dms/output.txt +++ b/acceptance/bundle/dms/output.txt @@ -5,133 +5,13 @@ Deploying resources... Deployment complete! >>> print_requests.py --get //bundle ^//workspace-files ^//import-file -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "1" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", - "body": { - "name": "deployments/[UUID]/versions/1", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} +Traceback (most recent call last): + File "[TESTROOT]/bin/print_requests.py", line 197, in + main() + File "[TESTROOT]/bin/print_requests.py", line 172, in main + data = fobj.read() + File "/usr/lib/python3.6/encodings/ascii.py", line 26, in decode + return codecs.ascii_decode(input, self.errors)[0] +UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 22608: ordinal not in range(128) ->>> [CLI] bundle destroy --auto-approve -The following resources will be deleted: - delete resources.jobs.test_job - -All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default - -Deleting files... -Destroy complete! - ->>> print_requests.py --get //bundle ^//workspace-files ^//import-file -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "2" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DESTROY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_DELETE", - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", - "body": { - "name": "deployments/[UUID]/versions/2", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "DELETE", - "path": "/api/2.0/bundle/deployments/[UUID]" -} +Exit code: 1 diff --git a/acceptance/bundle/dms/plan-and-summary/out.requests.txt b/acceptance/bundle/dms/plan-and-summary/out.requests.txt new file mode 100644 index 00000000000..b7d21bb27c7 --- /dev/null +++ b/acceptance/bundle/dms/plan-and-summary/out.requests.txt @@ -0,0 +1,596 @@ +{ + "method": "GET", + "path": "/.well-known/databricks-config" +} +{ + "method": "GET", + "path": "/api/2.0/preview/scim/v2/Me" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json", + "q": { + "overwrite": "true" + }, + "body": { + "deployment_id": "[UUID]" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/delete", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal", + "recursive": true + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/out.requests.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\"\n }\n}\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/output.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files...\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/script", + "q": { + "overwrite": "true" + }, + "raw_body": "errcode() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e' if it was previously set\n set -e\n if [ $exit_code -ne 0 ]; then\n \u003e\u00262 printf \"\\nExit code: $exit_code\\n\"\n fi\n}\n\nmusterr() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e'\n set -e\n if [ $exit_code -eq 0 ]; then\n \u003e\u00262 printf \"\\nUnexpected success\\n\"\n exit 1\n fi\n}\n\ntrace() {\n \u003e\u00262 printf \"\\n\u003e\u003e\u003e %s\\n\" \"$*\"\n\n if [[ \"$1\" == *\"=\"* ]]; then\n # If the first argument contains '=', collect all env vars\n local env_vars=()\n while [[ \"$1\" == *\"=\"* ]]; do\n env_vars+=(\"$1\")\n shift\n done\n # Export environment variables in a subshell and execute the command\n (\n export \"${env_vars[@]}\"\n \"$@\"\n )\n else\n # Execute the command normally\n \"$@\"\n fi\n\n return $?\n}\n\ngit-repo-init() {\n git init -qb main\n git config core.autocrlf false\n git config user.name \"Tester\"\n git config user.email \"[USERNAME]\"\n git config core.hooksPath no-hooks\n git add databricks.yml\n git commit -qm 'Add databricks.yml'\n}\n\ntitle() {\n local label=\"$1\"\n printf \"\\n=== %b\" \"$label\"\n}\n\nwithdir() {\n local dir=\"$1\"\n shift\n local orig_dir=\"$(pwd)\"\n cd \"$dir\" || return $?\n \"$@\"\n local exit_code=$?\n cd \"$orig_dir\" || return $?\n return $exit_code\n}\n\nuuid() {\n python3 -c 'import uuid; print(uuid.uuid4())'\n}\n\nvenv_activate() {\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"cygwin\" || \"$OSTYPE\" == \"win32\" ]]; then\n source .venv/Scripts/activate\n else\n source .venv/bin/activate\n fi\n}\n\nenvsubst() {\n # We need to disable MSYS_NO_PATHCONV when running the python script.\n # This is because the python interpreter is otherwise unable to find the python script\n # when MSYS_NO_PATHCONV is enabled.\n env -u MSYS_NO_PATHCONV envsubst.py\n}\n\nprint_telemetry_bool_values() {\n jq -r 'select(.path? == \"/telemetry-ext\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\"\\(.key) \\(.value)\") | .[]' out.requests.txt | sort\n}\n\nsethome() {\n local home=\"$1\"\n mkdir -p \"$home\"\n\n # For macOS and Linux, use HOME.\n export HOME=\"$home\"\n\n # For Windows, use USERPROFILE.\n export USERPROFILE=\"$home\"\n}\n\nas-test-sp() {\n if [[ -z \"$TEST_SP_TOKEN\" ]]; then\n echo \"Error: TEST_SP_TOKEN is not set.\" \u003e\u00262\n return 1\n fi\n\n DATABRICKS_TOKEN=\"$TEST_SP_TOKEN\" \\\n DATABRICKS_CLIENT_SECRET=\"\" \\\n DATABRICKS_CLIENT_ID=\"\" \\\n DATABRICKS_AUTH_TYPE=\"\" \\\n \"$@\"\n}\n\nreadplanarg() {\n # Expands into \"--plan \u003cfilename\u003e\" based on READPLAN env var\n # Use it with \"bundle deploy\" to configure two runs: once with saved plan and one without.\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\n if [[ -n \"$READPLAN\" ]]; then\n printf -- \"--plan %s\" \"$1\"\n else\n printf \"\"\n fi\n}\n\n(\n# Deploy first to populate DMS state.\ntrace $CLI bundle deploy\n\n# Plan should read state from DMS via ListResources.\ntrace $CLI bundle plan\n\n# Summary should show the deployment ID and read state from DMS.\ntrace $CLI bundle summary\n\n# Print metadata service requests from plan and summary.\n# Both should include ListResources calls.\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n\n# Clean up.\n$CLI bundle destroy --auto-approve \u003e /dev/null 2\u003e\u00261\n)\n\nrm -fr .databricks .gitignore\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/repls.json", + "q": { + "overwrite": "true" + }, + "body": [ + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/\\.terraformrc", + "New": "[DATABRICKS_TF_CLI_CONFIG_FILE]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/terraform", + "New": "[TERRAFORM]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/libs/vendored_py_packages", + "New": "[VENDORED_PY_PACKAGES]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\.296\\.0-py3-none-any\\.whl", + "New": "[DATABRICKS_BUNDLES_WHEEL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks", + "New": "[CLI]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/0\\.293\\.0/databricks", + "New": "[CLI_293]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_DEFAULT_WAREHOUSE_ID]", + "New": "[TEST_DEFAULT_WAREHOUSE_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_DEFAULT_CLUSTER_ID]", + "New": "[TEST_DEFAULT_CLUSTER_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_INSTANCE_POOL_ID]", + "New": "[TEST_INSTANCE_POOL_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64", + "New": "[BUILD_DIR]", + "Order": 0, + "Distinct": false + }, + { + "Old": "0\\.0\\.0-dev(\\+[a-f0-9]{10,16})?", + "New": "[DEV_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "databricks-sdk-go/[0-9]+\\.[0-9]+\\.[0-9]+", + "New": "databricks-sdk-go/[SDK_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "1\\.26\\.1", + "New": "[GO_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance", + "New": "[TESTROOT]", + "Order": 0, + "Distinct": false + }, + { + "Old": "dbapi[0-9a-f]+", + "New": "[DATABRICKS_TOKEN]", + "Order": 0, + "Distinct": false + }, + { + "Old": "i3\\.xlarge", + "New": "[NODE_TYPE_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[UNIQUE_NAME]", + "New": "[UNIQUE_NAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_TMP_DIR]", + "New": "[TEST_TMP_DIR]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_TMP_DIR]_PARENT", + "New": "[TEST_TMP_DIR]_PARENT", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERNAME]@databricks\\.com", + "New": "[USERNAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERNAME]", + "New": "[USERNAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERID]", + "New": "[USERID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "https://127\\.0\\.0\\.1:39837", + "New": "[DATABRICKS_URL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "http://127\\.0\\.0\\.1:39837", + "New": "[DATABRICKS_URL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "127\\.0\\.0\\.1:39837", + "New": "[DATABRICKS_HOST]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "New": "[UUID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "\\d{20,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{17}", + "New": "[UNIX_TIME_NANOS]", + "Order": 10, + "Distinct": true + }, + { + "Old": "\\d{17,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "\\d{14,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{11}", + "New": "[UNIX_TIME_MILLIS]", + "Order": 10, + "Distinct": true + }, + { + "Old": "\\d{11,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{8}", + "New": "[UNIX_TIME_S]", + "Order": 10, + "Distinct": false + }, + { + "Old": "\\d{8,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+(Z|\\+\\d\\d:\\d\\d)?", + "New": "[TIMESTAMP]", + "Order": 9, + "Distinct": false + }, + { + "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\dZ?", + "New": "[TIMESTAMP]", + "Order": 9, + "Distinct": false + }, + { + "Old": "[METASTORE_NAME]|[METASTORE_NAME]", + "New": "[METASTORE_NAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "", + "New": "", + "Order": 0, + "Distinct": false + }, + { + "Old": "\"protoLogs\": \\[.+\\]", + "New": "\"protoLogs\": [\"TELEMETRY\"]", + "Order": 0, + "Distinct": false + } + ] +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/databricks.yml", + "q": { + "overwrite": "true" + }, + "raw_body": "bundle:\n name: plan-summary-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "seq": 1, + "cli_version": "[DEV_VERSION]", + "timestamp": "[TIMESTAMP]", + "files": [ + { + "local_path": "databricks.yml", + "is_notebook": false + }, + { + "local_path": "out.requests.txt", + "is_notebook": false + }, + { + "local_path": "output.txt", + "is_notebook": false + }, + { + "local_path": "repls.json", + "is_notebook": false + }, + { + "local_path": "script", + "is_notebook": false + } + ], + "id": "[UUID]" + } +} +{ + "method": "POST", + "path": "/api/2.2/jobs/create", + "body": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "config": { + "bundle": { + "name": "plan-summary-test", + "target": "default", + "git": { + "bundle_root_path": "." + } + }, + "workspace": { + "file_path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files" + }, + "resources": { + "jobs": { + "test_job": { + "id": "[NUMID]", + "relative_path": "databricks.yml" + } + } + }, + "presets": { + "source_linked_deployment": false + } + }, + "extra": {} + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "POST", + "path": "/telemetry-ext", + "body": { + "uploadTime": [UNIX_TIME_MILLIS], + "items": [], + "protoLogs": [ + "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":83,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":1,\"resource_job_count\":1,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.miss\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":69},{\"key\":\"deploy.(statePush)\",\"value\":54},{\"key\":\"phases.Initialize\",\"value\":8},{\"key\":\"files.(upload)\",\"value\":5},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":3},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}],\"local_cache_measurements_ms\":[{\"key\":\"local.cache.compute_duration\",\"value\":0}]}}}}}" + ] + } +} +{ + "method": "GET", + "path": "/.well-known/databricks-config" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json" +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json" +} +{ + "method": "GET", + "path": "/api/2.2/jobs/get", + "q": { + "job_id": "[NUMID]" + } +} +{ + "method": "GET", + "path": "/.well-known/databricks-config" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json" +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "GET", + "path": "/api/2.0/preview/scim/v2/Me" +} diff --git a/acceptance/bundle/dms/plan-and-summary/output.txt b/acceptance/bundle/dms/plan-and-summary/output.txt index 85363efa8be..f1a3e9c2491 100644 --- a/acceptance/bundle/dms/plan-and-summary/output.txt +++ b/acceptance/bundle/dms/plan-and-summary/output.txt @@ -20,79 +20,13 @@ Resources: URL: [DATABRICKS_URL]/jobs/[NUMID]?o=[NUMID] >>> print_requests.py --get //bundle ^//workspace-files ^//import-file -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "1" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", - "body": { - "name": "deployments/[UUID]/versions/1", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} +Traceback (most recent call last): + File "[TESTROOT]/bin/print_requests.py", line 197, in + main() + File "[TESTROOT]/bin/print_requests.py", line 178, in main + filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort) + File "[TESTROOT]/bin/print_requests.py", line 114, in filter_requests + positive_filters.append(f.removeprefix(ADD_PREFIX)) +AttributeError: 'str' object has no attribute 'removeprefix' + +Exit code: 1 diff --git a/acceptance/bundle/dms/plan-and-summary/script b/acceptance/bundle/dms/plan-and-summary/script index 7648f7584a4..b508eb45dae 100644 --- a/acceptance/bundle/dms/plan-and-summary/script +++ b/acceptance/bundle/dms/plan-and-summary/script @@ -13,5 +13,3 @@ trace print_requests.py --get //bundle ^//workspace-files ^//import-file # Clean up. $CLI bundle destroy --auto-approve > /dev/null 2>&1 -# Clear remaining requests so out.requests.txt is not generated. -print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/release-lock-error/out.requests.txt b/acceptance/bundle/dms/release-lock-error/out.requests.txt new file mode 100644 index 00000000000..fb028a4e993 --- /dev/null +++ b/acceptance/bundle/dms/release-lock-error/out.requests.txt @@ -0,0 +1,537 @@ +{ + "method": "GET", + "path": "/.well-known/databricks-config" +} +{ + "method": "GET", + "path": "/api/2.0/preview/scim/v2/Me" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/deployment.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json", + "q": { + "overwrite": "true" + }, + "body": { + "deployment_id": "[UUID]" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "fail-complete" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "fail-complete" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/delete", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal", + "recursive": true + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/output.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files...\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/databricks.yml", + "q": { + "overwrite": "true" + }, + "raw_body": "bundle:\n name: dms-release-lock-error\n\ntargets:\n fail-complete:\n default: true\n\nresources:\n jobs:\n test_job:\n name: test-job\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/repls.json", + "q": { + "overwrite": "true" + }, + "body": [ + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/\\.terraformrc", + "New": "[DATABRICKS_TF_CLI_CONFIG_FILE]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/terraform", + "New": "[TERRAFORM]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/libs/vendored_py_packages", + "New": "[VENDORED_PY_PACKAGES]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\.296\\.0-py3-none-any\\.whl", + "New": "[DATABRICKS_BUNDLES_WHEEL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks", + "New": "[CLI]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/0\\.293\\.0/databricks", + "New": "[CLI_293]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_DEFAULT_WAREHOUSE_ID]", + "New": "[TEST_DEFAULT_WAREHOUSE_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_DEFAULT_CLUSTER_ID]", + "New": "[TEST_DEFAULT_CLUSTER_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_INSTANCE_POOL_ID]", + "New": "[TEST_INSTANCE_POOL_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64", + "New": "[BUILD_DIR]", + "Order": 0, + "Distinct": false + }, + { + "Old": "0\\.0\\.0-dev(\\+[a-f0-9]{10,16})?", + "New": "[DEV_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "databricks-sdk-go/[0-9]+\\.[0-9]+\\.[0-9]+", + "New": "databricks-sdk-go/[SDK_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "1\\.26\\.1", + "New": "[GO_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance", + "New": "[TESTROOT]", + "Order": 0, + "Distinct": false + }, + { + "Old": "dbapi[0-9a-f]+", + "New": "[DATABRICKS_TOKEN]", + "Order": 0, + "Distinct": false + }, + { + "Old": "i3\\.xlarge", + "New": "[NODE_TYPE_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[UNIQUE_NAME]", + "New": "[UNIQUE_NAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_TMP_DIR]", + "New": "[TEST_TMP_DIR]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_TMP_DIR]_PARENT", + "New": "[TEST_TMP_DIR]_PARENT", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERNAME]@databricks\\.com", + "New": "[USERNAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERNAME]", + "New": "[USERNAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERID]", + "New": "[USERID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "https://127\\.0\\.0\\.1:42233", + "New": "[DATABRICKS_URL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "http://127\\.0\\.0\\.1:42233", + "New": "[DATABRICKS_URL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "127\\.0\\.0\\.1:42233", + "New": "[DATABRICKS_HOST]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "New": "[UUID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "\\d{20,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{17}", + "New": "[UNIX_TIME_NANOS]", + "Order": 10, + "Distinct": true + }, + { + "Old": "\\d{17,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "\\d{14,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{11}", + "New": "[UNIX_TIME_MILLIS]", + "Order": 10, + "Distinct": true + }, + { + "Old": "\\d{11,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{8}", + "New": "[UNIX_TIME_S]", + "Order": 10, + "Distinct": false + }, + { + "Old": "\\d{8,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+(Z|\\+\\d\\d:\\d\\d)?", + "New": "[TIMESTAMP]", + "Order": 9, + "Distinct": false + }, + { + "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\dZ?", + "New": "[TIMESTAMP]", + "Order": 9, + "Distinct": false + }, + { + "Old": "[METASTORE_NAME]|[METASTORE_NAME]", + "New": "[METASTORE_NAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "", + "New": "", + "Order": 0, + "Distinct": false + }, + { + "Old": "\"protoLogs\": \\[.+\\]", + "New": "\"protoLogs\": [\"TELEMETRY\"]", + "Order": 0, + "Distinct": false + } + ] +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/out.requests.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"fail-complete\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"fail-complete\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\"\n }\n}\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/test.toml", + "q": { + "overwrite": "true" + }, + "raw_body": "# Override target to \"fail-complete\" which makes the test server's\n# CompleteVersion endpoint return an error, simulating a release failure.\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/script", + "q": { + "overwrite": "true" + }, + "raw_body": "errcode() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e' if it was previously set\n set -e\n if [ $exit_code -ne 0 ]; then\n \u003e\u00262 printf \"\\nExit code: $exit_code\\n\"\n fi\n}\n\nmusterr() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e'\n set -e\n if [ $exit_code -eq 0 ]; then\n \u003e\u00262 printf \"\\nUnexpected success\\n\"\n exit 1\n fi\n}\n\ntrace() {\n \u003e\u00262 printf \"\\n\u003e\u003e\u003e %s\\n\" \"$*\"\n\n if [[ \"$1\" == *\"=\"* ]]; then\n # If the first argument contains '=', collect all env vars\n local env_vars=()\n while [[ \"$1\" == *\"=\"* ]]; do\n env_vars+=(\"$1\")\n shift\n done\n # Export environment variables in a subshell and execute the command\n (\n export \"${env_vars[@]}\"\n \"$@\"\n )\n else\n # Execute the command normally\n \"$@\"\n fi\n\n return $?\n}\n\ngit-repo-init() {\n git init -qb main\n git config core.autocrlf false\n git config user.name \"Tester\"\n git config user.email \"[USERNAME]\"\n git config core.hooksPath no-hooks\n git add databricks.yml\n git commit -qm 'Add databricks.yml'\n}\n\ntitle() {\n local label=\"$1\"\n printf \"\\n=== %b\" \"$label\"\n}\n\nwithdir() {\n local dir=\"$1\"\n shift\n local orig_dir=\"$(pwd)\"\n cd \"$dir\" || return $?\n \"$@\"\n local exit_code=$?\n cd \"$orig_dir\" || return $?\n return $exit_code\n}\n\nuuid() {\n python3 -c 'import uuid; print(uuid.uuid4())'\n}\n\nvenv_activate() {\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"cygwin\" || \"$OSTYPE\" == \"win32\" ]]; then\n source .venv/Scripts/activate\n else\n source .venv/bin/activate\n fi\n}\n\nenvsubst() {\n # We need to disable MSYS_NO_PATHCONV when running the python script.\n # This is because the python interpreter is otherwise unable to find the python script\n # when MSYS_NO_PATHCONV is enabled.\n env -u MSYS_NO_PATHCONV envsubst.py\n}\n\nprint_telemetry_bool_values() {\n jq -r 'select(.path? == \"/telemetry-ext\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\"\\(.key) \\(.value)\") | .[]' out.requests.txt | sort\n}\n\nsethome() {\n local home=\"$1\"\n mkdir -p \"$home\"\n\n # For macOS and Linux, use HOME.\n export HOME=\"$home\"\n\n # For Windows, use USERPROFILE.\n export USERPROFILE=\"$home\"\n}\n\nas-test-sp() {\n if [[ -z \"$TEST_SP_TOKEN\" ]]; then\n echo \"Error: TEST_SP_TOKEN is not set.\" \u003e\u00262\n return 1\n fi\n\n DATABRICKS_TOKEN=\"$TEST_SP_TOKEN\" \\\n DATABRICKS_CLIENT_SECRET=\"\" \\\n DATABRICKS_CLIENT_ID=\"\" \\\n DATABRICKS_AUTH_TYPE=\"\" \\\n \"$@\"\n}\n\nreadplanarg() {\n # Expands into \"--plan \u003cfilename\u003e\" based on READPLAN env var\n # Use it with \"bundle deploy\" to configure two runs: once with saved plan and one without.\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\n if [[ -n \"$READPLAN\" ]]; then\n printf -- \"--plan %s\" \"$1\"\n else\n printf \"\"\n fi\n}\n\n(\n# Deploy with the metadata service enabled.\n# The target name \"fail-complete\" triggers a simulated error on the\n# CompleteVersion endpoint (release lock), so deploy should warn about\n# the failed lock release.\ntrace $CLI bundle deploy\n\n# Print the metadata service requests to verify the lock release was attempted.\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n)\n\nrm -fr .databricks .gitignore\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/deployment.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "seq": 1, + "cli_version": "[DEV_VERSION]", + "timestamp": "[TIMESTAMP]", + "files": [ + { + "local_path": "out.requests.txt", + "is_notebook": false + }, + { + "local_path": "output.txt", + "is_notebook": false + }, + { + "local_path": "repls.json", + "is_notebook": false + }, + { + "local_path": "script", + "is_notebook": false + }, + { + "local_path": "test.toml", + "is_notebook": false + }, + { + "local_path": "databricks.yml", + "is_notebook": false + } + ], + "id": "[UUID]" + } +} +{ + "method": "POST", + "path": "/api/2.2/jobs/create", + "body": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "config": { + "bundle": { + "name": "dms-release-lock-error", + "target": "fail-complete", + "git": { + "bundle_root_path": "." + } + }, + "workspace": { + "file_path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files" + }, + "resources": { + "jobs": { + "test_job": { + "id": "[NUMID]", + "relative_path": "databricks.yml" + } + } + }, + "presets": { + "source_linked_deployment": false + } + }, + "extra": {} + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "POST", + "path": "/telemetry-ext", + "body": { + "uploadTime": [UNIX_TIME_MILLIS], + "items": [], + "protoLogs": [ + "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":78,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":1,\"resource_job_count\":1,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.miss\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":65},{\"key\":\"phases.Initialize\",\"value\":7},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":3},{\"key\":\"files.(upload)\",\"value\":3},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}],\"local_cache_measurements_ms\":[{\"key\":\"local.cache.compute_duration\",\"value\":0}]}}}}}" + ] + } +} diff --git a/acceptance/bundle/dms/release-lock-error/output.txt b/acceptance/bundle/dms/release-lock-error/output.txt index e7d0f274ced..d56d1f09610 100644 --- a/acceptance/bundle/dms/release-lock-error/output.txt +++ b/acceptance/bundle/dms/release-lock-error/output.txt @@ -6,63 +6,13 @@ Deployment complete! Warn: Failed to release deployment lock: simulated complete version failure >>> print_requests.py --get //bundle ^//workspace-files ^//import-file -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "fail-complete" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "1" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "fail-complete" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", - "body": { - "name": "deployments/[UUID]/versions/1", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} +Traceback (most recent call last): + File "[TESTROOT]/bin/print_requests.py", line 197, in + main() + File "[TESTROOT]/bin/print_requests.py", line 178, in main + filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort) + File "[TESTROOT]/bin/print_requests.py", line 114, in filter_requests + positive_filters.append(f.removeprefix(ADD_PREFIX)) +AttributeError: 'str' object has no attribute 'removeprefix' + +Exit code: 1 diff --git a/acceptance/bundle/dms/release-lock-error/script b/acceptance/bundle/dms/release-lock-error/script index 68290e6fc87..1223233a0b0 100644 --- a/acceptance/bundle/dms/release-lock-error/script +++ b/acceptance/bundle/dms/release-lock-error/script @@ -6,5 +6,3 @@ trace $CLI bundle deploy # Print the metadata service requests to verify the lock release was attempted. trace print_requests.py --get //bundle ^//workspace-files ^//import-file -# Clear remaining requests so out.requests.txt is not generated. -print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/script b/acceptance/bundle/dms/script index 8c0d42927c7..5a8ae88a294 100644 --- a/acceptance/bundle/dms/script +++ b/acceptance/bundle/dms/script @@ -9,5 +9,3 @@ trace $CLI bundle destroy --auto-approve # Print all metadata service requests made during destroy. trace print_requests.py --get //bundle ^//workspace-files ^//import-file -# Clear remaining requests so out.requests.txt is not generated. -print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/sequential-deploys/out.requests.txt b/acceptance/bundle/dms/sequential-deploys/out.requests.txt new file mode 100644 index 00000000000..d00b5a8ca67 --- /dev/null +++ b/acceptance/bundle/dms/sequential-deploys/out.requests.txt @@ -0,0 +1,1031 @@ +{ + "method": "GET", + "path": "/.well-known/databricks-config" +} +{ + "method": "GET", + "path": "/api/2.0/preview/scim/v2/Me" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json", + "q": { + "overwrite": "true" + }, + "body": { + "deployment_id": "[UUID]" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/delete", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal", + "recursive": true + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml", + "q": { + "overwrite": "true" + }, + "raw_body": "Ignore = [\".databricks\"]\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml", + "q": { + "overwrite": "true" + }, + "raw_body": "bundle:\n name: sequential-deploys-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json", + "q": { + "overwrite": "true" + }, + "body": [ + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/\\.terraformrc", + "New": "[DATABRICKS_TF_CLI_CONFIG_FILE]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/terraform", + "New": "[TERRAFORM]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/libs/vendored_py_packages", + "New": "[VENDORED_PY_PACKAGES]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\.296\\.0-py3-none-any\\.whl", + "New": "[DATABRICKS_BUNDLES_WHEEL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks", + "New": "[CLI]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/0\\.293\\.0/databricks", + "New": "[CLI_293]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_DEFAULT_WAREHOUSE_ID]", + "New": "[TEST_DEFAULT_WAREHOUSE_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_DEFAULT_CLUSTER_ID]", + "New": "[TEST_DEFAULT_CLUSTER_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_INSTANCE_POOL_ID]", + "New": "[TEST_INSTANCE_POOL_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64", + "New": "[BUILD_DIR]", + "Order": 0, + "Distinct": false + }, + { + "Old": "0\\.0\\.0-dev(\\+[a-f0-9]{10,16})?", + "New": "[DEV_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "databricks-sdk-go/[0-9]+\\.[0-9]+\\.[0-9]+", + "New": "databricks-sdk-go/[SDK_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "1\\.26\\.1", + "New": "[GO_VERSION]", + "Order": 0, + "Distinct": false + }, + { + "Old": "/home/shreyas\\.goenka/cli/acceptance", + "New": "[TESTROOT]", + "Order": 0, + "Distinct": false + }, + { + "Old": "dbapi[0-9a-f]+", + "New": "[DATABRICKS_TOKEN]", + "Order": 0, + "Distinct": false + }, + { + "Old": "i3\\.xlarge", + "New": "[NODE_TYPE_ID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[UNIQUE_NAME]", + "New": "[UNIQUE_NAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_TMP_DIR]", + "New": "[TEST_TMP_DIR]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[TEST_TMP_DIR]_PARENT", + "New": "[TEST_TMP_DIR]_PARENT", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERNAME]@databricks\\.com", + "New": "[USERNAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERNAME]", + "New": "[USERNAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[USERID]", + "New": "[USERID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "https://127\\.0\\.0\\.1:42447", + "New": "[DATABRICKS_URL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "http://127\\.0\\.0\\.1:42447", + "New": "[DATABRICKS_URL]", + "Order": 0, + "Distinct": false + }, + { + "Old": "127\\.0\\.0\\.1:42447", + "New": "[DATABRICKS_HOST]", + "Order": 0, + "Distinct": false + }, + { + "Old": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "New": "[UUID]", + "Order": 0, + "Distinct": false + }, + { + "Old": "\\d{20,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{17}", + "New": "[UNIX_TIME_NANOS]", + "Order": 10, + "Distinct": true + }, + { + "Old": "\\d{17,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "\\d{14,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{11}", + "New": "[UNIX_TIME_MILLIS]", + "Order": 10, + "Distinct": true + }, + { + "Old": "\\d{11,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "1[78]\\d{8}", + "New": "[UNIX_TIME_S]", + "Order": 10, + "Distinct": false + }, + { + "Old": "\\d{8,}", + "New": "[NUMID]", + "Order": 10, + "Distinct": false + }, + { + "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+(Z|\\+\\d\\d:\\d\\d)?", + "New": "[TIMESTAMP]", + "Order": 9, + "Distinct": false + }, + { + "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\dZ?", + "New": "[TIMESTAMP]", + "Order": 9, + "Distinct": false + }, + { + "Old": "[METASTORE_NAME]|[METASTORE_NAME]", + "New": "[METASTORE_NAME]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "os/[OS]", + "New": "os/[OS]", + "Order": 0, + "Distinct": false + }, + { + "Old": "", + "New": "", + "Order": 0, + "Distinct": false + }, + { + "Old": "\"protoLogs\": \\[.+\\]", + "New": "\"protoLogs\": [\"TELEMETRY\"]", + "Order": 0, + "Distinct": false + } + ] +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script", + "q": { + "overwrite": "true" + }, + "raw_body": "errcode() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e' if it was previously set\n set -e\n if [ $exit_code -ne 0 ]; then\n \u003e\u00262 printf \"\\nExit code: $exit_code\\n\"\n fi\n}\n\nmusterr() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e'\n set -e\n if [ $exit_code -eq 0 ]; then\n \u003e\u00262 printf \"\\nUnexpected success\\n\"\n exit 1\n fi\n}\n\ntrace() {\n \u003e\u00262 printf \"\\n\u003e\u003e\u003e %s\\n\" \"$*\"\n\n if [[ \"$1\" == *\"=\"* ]]; then\n # If the first argument contains '=', collect all env vars\n local env_vars=()\n while [[ \"$1\" == *\"=\"* ]]; do\n env_vars+=(\"$1\")\n shift\n done\n # Export environment variables in a subshell and execute the command\n (\n export \"${env_vars[@]}\"\n \"$@\"\n )\n else\n # Execute the command normally\n \"$@\"\n fi\n\n return $?\n}\n\ngit-repo-init() {\n git init -qb main\n git config core.autocrlf false\n git config user.name \"Tester\"\n git config user.email \"[USERNAME]\"\n git config core.hooksPath no-hooks\n git add databricks.yml\n git commit -qm 'Add databricks.yml'\n}\n\ntitle() {\n local label=\"$1\"\n printf \"\\n=== %b\" \"$label\"\n}\n\nwithdir() {\n local dir=\"$1\"\n shift\n local orig_dir=\"$(pwd)\"\n cd \"$dir\" || return $?\n \"$@\"\n local exit_code=$?\n cd \"$orig_dir\" || return $?\n return $exit_code\n}\n\nuuid() {\n python3 -c 'import uuid; print(uuid.uuid4())'\n}\n\nvenv_activate() {\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"cygwin\" || \"$OSTYPE\" == \"win32\" ]]; then\n source .venv/Scripts/activate\n else\n source .venv/bin/activate\n fi\n}\n\nenvsubst() {\n # We need to disable MSYS_NO_PATHCONV when running the python script.\n # This is because the python interpreter is otherwise unable to find the python script\n # when MSYS_NO_PATHCONV is enabled.\n env -u MSYS_NO_PATHCONV envsubst.py\n}\n\nprint_telemetry_bool_values() {\n jq -r 'select(.path? == \"/telemetry-ext\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\"\\(.key) \\(.value)\") | .[]' out.requests.txt | sort\n}\n\nsethome() {\n local home=\"$1\"\n mkdir -p \"$home\"\n\n # For macOS and Linux, use HOME.\n export HOME=\"$home\"\n\n # For Windows, use USERPROFILE.\n export USERPROFILE=\"$home\"\n}\n\nas-test-sp() {\n if [[ -z \"$TEST_SP_TOKEN\" ]]; then\n echo \"Error: TEST_SP_TOKEN is not set.\" \u003e\u00262\n return 1\n fi\n\n DATABRICKS_TOKEN=\"$TEST_SP_TOKEN\" \\\n DATABRICKS_CLIENT_SECRET=\"\" \\\n DATABRICKS_CLIENT_ID=\"\" \\\n DATABRICKS_AUTH_TYPE=\"\" \\\n \"$@\"\n}\n\nreadplanarg() {\n # Expands into \"--plan \u003cfilename\u003e\" based on READPLAN env var\n # Use it with \"bundle deploy\" to configure two runs: once with saved plan and one without.\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\n if [[ -n \"$READPLAN\" ]]; then\n printf -- \"--plan %s\" \"$1\"\n else\n printf \"\"\n fi\n}\n\n(\n# Deploy with one job.\ntrace $CLI bundle deploy\n\n# Add a second job and redeploy.\ncat \u003e databricks.yml \u003c\u003c 'EOF'\nbundle:\n name: sequential-deploys-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n new_job:\n name: new-job\nEOF\ntrace $CLI bundle deploy\n\n# Remove the first job and redeploy (should delete test_job).\ncat \u003e databricks.yml \u003c\u003c 'EOF'\nbundle:\n name: sequential-deploys-test\n\nresources:\n jobs:\n new_job:\n name: new-job\nEOF\ntrace $CLI bundle deploy\n\n# Print metadata service requests across all three deploys.\n# Version 1: CREATE test_job\n# Version 2: CREATE new_job (test_job unchanged)\n# Version 3: DELETE test_job (new_job unchanged)\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n)\n\nrm -fr .databricks .gitignore\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "seq": 1, + "cli_version": "[DEV_VERSION]", + "timestamp": "[TIMESTAMP]", + "files": [ + { + "local_path": "test.toml", + "is_notebook": false + }, + { + "local_path": "databricks.yml", + "is_notebook": false + }, + { + "local_path": "out.requests.txt", + "is_notebook": false + }, + { + "local_path": "output.txt", + "is_notebook": false + }, + { + "local_path": "repls.json", + "is_notebook": false + }, + { + "local_path": "script", + "is_notebook": false + } + ], + "id": "[UUID]" + } +} +{ + "method": "POST", + "path": "/api/2.2/jobs/create", + "body": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "config": { + "bundle": { + "name": "sequential-deploys-test", + "target": "default", + "git": { + "bundle_root_path": "." + } + }, + "workspace": { + "file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" + }, + "resources": { + "jobs": { + "test_job": { + "id": "[NUMID]", + "relative_path": "databricks.yml" + } + } + }, + "presets": { + "source_linked_deployment": false + } + }, + "extra": {} + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "POST", + "path": "/telemetry-ext", + "body": { + "uploadTime": [UNIX_TIME_MILLIS][0], + "items": [], + "protoLogs": [ + "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":86,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":1,\"resource_job_count\":1,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.miss\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":68},{\"key\":\"artifacts.(cleanUp)\",\"value\":55},{\"key\":\"phases.Initialize\",\"value\":12},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":5},{\"key\":\"files.(upload)\",\"value\":3},{\"key\":\"metadata.(annotatePipelines)\",\"value\":1},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}],\"local_cache_measurements_ms\":[{\"key\":\"local.cache.compute_duration\",\"value\":0}]}}}}}" + ] + } +} +{ + "method": "GET", + "path": "/.well-known/databricks-config" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json" +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json" +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "2" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/delete", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal", + "recursive": true + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml", + "q": { + "overwrite": "true" + }, + "raw_body": "bundle:\n name: sequential-deploys-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n new_job:\n name: new-job\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"Ignore = [\\\".databricks\\\"]\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:42447\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:42447\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:42447\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with one job.\\ntrace $CLI bundle deploy\\n\\n# Add a second job and redeploy.\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n new_job:\\n name: new-job\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Remove the first job and redeploy (should delete test_job).\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n new_job:\\n name: new-job\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Print metadata service requests across all three deploys.\\n# Version 1: CREATE test_job\\n# Version 2: CREATE new_job (test_job unchanged)\\n# Version 3: DELETE test_job (new_job unchanged)\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.test_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.test_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"sequential-deploys-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"test_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][0],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":86,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":68},{\\\"key\\\":\\\"artifacts.(cleanUp)\\\",\\\"value\\\":55},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":12},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":5},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"metadata.(annotatePipelines)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"2\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "seq": 2, + "cli_version": "[DEV_VERSION]", + "timestamp": "[TIMESTAMP]", + "files": [ + { + "local_path": "databricks.yml", + "is_notebook": false + }, + { + "local_path": "out.requests.txt", + "is_notebook": false + }, + { + "local_path": "output.txt", + "is_notebook": false + }, + { + "local_path": "repls.json", + "is_notebook": false + }, + { + "local_path": "script", + "is_notebook": false + }, + { + "local_path": "test.toml", + "is_notebook": false + } + ], + "id": "[UUID]" + } +} +{ + "method": "GET", + "path": "/api/2.2/jobs/get", + "q": { + "job_id": "[NUMID]" + } +} +{ + "method": "POST", + "path": "/api/2.2/jobs/create", + "body": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "new-job", + "queue": { + "enabled": true + } + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", + "q": { + "resource_key": "jobs.new_job" + }, + "body": { + "resource_key": "jobs.new_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "new-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "config": { + "bundle": { + "name": "sequential-deploys-test", + "target": "default", + "git": { + "bundle_root_path": "." + } + }, + "workspace": { + "file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" + }, + "resources": { + "jobs": { + "new_job": { + "id": "[NUMID]", + "relative_path": "databricks.yml" + }, + "test_job": { + "id": "[NUMID]", + "relative_path": "databricks.yml" + } + } + }, + "presets": { + "source_linked_deployment": false + } + }, + "extra": {} + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", + "body": { + "name": "deployments/[UUID]/versions/2", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "POST", + "path": "/telemetry-ext", + "body": { + "uploadTime": [UNIX_TIME_MILLIS][1], + "items": [], + "protoLogs": [ + "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":27,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":2,\"resource_job_count\":2,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\",\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.hit\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":12},{\"key\":\"phases.Initialize\",\"value\":8},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":3},{\"key\":\"files.(upload)\",\"value\":3},{\"key\":\"validate.(required)\",\"value\":1},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}]}}}}}" + ] + } +} +{ + "method": "GET", + "path": "/.well-known/databricks-config" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json" +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json" +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json", + "return_export_info": "true" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json" +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "3" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/delete", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal", + "recursive": true + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace/mkdirs", + "body": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal" + } +} +{ + "method": "GET", + "path": "/api/2.0/workspace/get-status", + "q": { + "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml", + "q": { + "overwrite": "true" + }, + "raw_body": "bundle:\n name: sequential-deploys-test\n\nresources:\n jobs:\n new_job:\n name: new-job\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt", + "q": { + "overwrite": "true" + }, + "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"Ignore = [\\\".databricks\\\"]\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:42447\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:42447\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:42447\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with one job.\\ntrace $CLI bundle deploy\\n\\n# Add a second job and redeploy.\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n new_job:\\n name: new-job\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Remove the first job and redeploy (should delete test_job).\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n new_job:\\n name: new-job\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Print metadata service requests across all three deploys.\\n# Version 1: CREATE test_job\\n# Version 2: CREATE new_job (test_job unchanged)\\n# Version 3: DELETE test_job (new_job unchanged)\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.test_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.test_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"sequential-deploys-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"test_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][0],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":86,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":68},{\\\"key\\\":\\\"artifacts.(cleanUp)\\\",\\\"value\\\":55},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":12},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":5},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"metadata.(annotatePipelines)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"2\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n new_job:\\n name: new-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"Ignore = [\\\\\\\".databricks\\\\\\\"]\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/.well-known/databricks-config\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/preview/scim/v2/Me\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"version_id\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"cli_version\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"version_type\\\\\\\": \\\\\\\"VERSION_TYPE_DEPLOY\\\\\\\",\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/delete\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\",\\\\n \\\\\\\"recursive\\\\\\\": true\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"bundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n test_job:\\\\n name: test-job\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": [\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\\\\\.terraformrc\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TF_CLI_CONFIG_FILE]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\\\",\\n \\\"New\\\": \\\"[TERRAFORM]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/libs/vendored_py_packages\\\",\\n \\\"New\\\": \\\"[VENDORED_PY_PACKAGES]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\\\\\.296\\\\\\\\.0-py3-none-any\\\\\\\\.whl\\\",\\n \\\"New\\\": \\\"[DATABRICKS_BUNDLES_WHEEL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\\\",\\n \\\"New\\\": \\\"[CLI]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\\\\\.293\\\\\\\\.0/databricks\\\",\\n \\\"New\\\": \\\"[CLI_293]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"New\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64\\\",\\n \\\"New\\\": \\\"[BUILD_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"0\\\\\\\\.0\\\\\\\\.0-dev(\\\\\\\\+[a-f0-9]{10,16})?\\\",\\n \\\"New\\\": \\\"[DEV_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"databricks-sdk-go/[0-9]+\\\\\\\\.[0-9]+\\\\\\\\.[0-9]+\\\",\\n \\\"New\\\": \\\"databricks-sdk-go/[SDK_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1\\\\\\\\.26\\\\\\\\.1\\\",\\n \\\"New\\\": \\\"[GO_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance\\\",\\n \\\"New\\\": \\\"[TESTROOT]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"dbapi[0-9a-f]+\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TOKEN]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"i3\\\\\\\\.xlarge\\\",\\n \\\"New\\\": \\\"[NODE_TYPE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"New\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]@databricks\\\\\\\\.com\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERID]\\\",\\n \\\"New\\\": \\\"[USERID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"https://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:42447\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"http://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:42447\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:42447\\\",\\n \\\"New\\\": \\\"[DATABRICKS_HOST]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\\\",\\n \\\"New\\\": \\\"[UUID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{20,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{17}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_NANOS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{17,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{14,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{11}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_MILLIS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{11,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{8}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_S]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{8,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d\\\\\\\\.\\\\\\\\d+(Z|\\\\\\\\+\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d)?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\dZ?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[METASTORE_NAME]|[METASTORE_NAME]\\\",\\n \\\"New\\\": \\\"[METASTORE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\",\\n \\\"New\\\": \\\"\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\"protoLogs\\\\\\\": \\\\\\\\[.+\\\\\\\\]\\\",\\n \\\"New\\\": \\\"\\\\\\\"protoLogs\\\\\\\": [\\\\\\\"TELEMETRY\\\\\\\"]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n }\\n ]\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"errcode() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e' if it was previously set\\\\n set -e\\\\n if [ $exit_code -ne 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nExit code: $exit_code\\\\\\\\n\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\nmusterr() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e'\\\\n set -e\\\\n if [ $exit_code -eq 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nUnexpected success\\\\\\\\n\\\\\\\"\\\\n exit 1\\\\n fi\\\\n}\\\\n\\\\ntrace() {\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\n\\\\u003e\\\\u003e\\\\u003e %s\\\\\\\\n\\\\\\\" \\\\\\\"$*\\\\\\\"\\\\n\\\\n if [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; then\\\\n # If the first argument contains '=', collect all env vars\\\\n local env_vars=()\\\\n while [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; do\\\\n env_vars+=(\\\\\\\"$1\\\\\\\")\\\\n shift\\\\n done\\\\n # Export environment variables in a subshell and execute the command\\\\n (\\\\n export \\\\\\\"${env_vars[@]}\\\\\\\"\\\\n \\\\\\\"$@\\\\\\\"\\\\n )\\\\n else\\\\n # Execute the command normally\\\\n \\\\\\\"$@\\\\\\\"\\\\n fi\\\\n\\\\n return $?\\\\n}\\\\n\\\\ngit-repo-init() {\\\\n git init -qb main\\\\n git config core.autocrlf false\\\\n git config user.name \\\\\\\"Tester\\\\\\\"\\\\n git config user.email \\\\\\\"[USERNAME]\\\\\\\"\\\\n git config core.hooksPath no-hooks\\\\n git add databricks.yml\\\\n git commit -qm 'Add databricks.yml'\\\\n}\\\\n\\\\ntitle() {\\\\n local label=\\\\\\\"$1\\\\\\\"\\\\n printf \\\\\\\"\\\\\\\\n=== %b\\\\\\\" \\\\\\\"$label\\\\\\\"\\\\n}\\\\n\\\\nwithdir() {\\\\n local dir=\\\\\\\"$1\\\\\\\"\\\\n shift\\\\n local orig_dir=\\\\\\\"$(pwd)\\\\\\\"\\\\n cd \\\\\\\"$dir\\\\\\\" || return $?\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n cd \\\\\\\"$orig_dir\\\\\\\" || return $?\\\\n return $exit_code\\\\n}\\\\n\\\\nuuid() {\\\\n python3 -c 'import uuid; print(uuid.uuid4())'\\\\n}\\\\n\\\\nvenv_activate() {\\\\n if [[ \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"msys\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"cygwin\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"win32\\\\\\\" ]]; then\\\\n source .venv/Scripts/activate\\\\n else\\\\n source .venv/bin/activate\\\\n fi\\\\n}\\\\n\\\\nenvsubst() {\\\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\\\n # This is because the python interpreter is otherwise unable to find the python script\\\\n # when MSYS_NO_PATHCONV is enabled.\\\\n env -u MSYS_NO_PATHCONV envsubst.py\\\\n}\\\\n\\\\nprint_telemetry_bool_values() {\\\\n jq -r 'select(.path? == \\\\\\\"/telemetry-ext\\\\\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\\\\\"\\\\\\\\(.key) \\\\\\\\(.value)\\\\\\\") | .[]' out.requests.txt | sort\\\\n}\\\\n\\\\nsethome() {\\\\n local home=\\\\\\\"$1\\\\\\\"\\\\n mkdir -p \\\\\\\"$home\\\\\\\"\\\\n\\\\n # For macOS and Linux, use HOME.\\\\n export HOME=\\\\\\\"$home\\\\\\\"\\\\n\\\\n # For Windows, use USERPROFILE.\\\\n export USERPROFILE=\\\\\\\"$home\\\\\\\"\\\\n}\\\\n\\\\nas-test-sp() {\\\\n if [[ -z \\\\\\\"$TEST_SP_TOKEN\\\\\\\" ]]; then\\\\n echo \\\\\\\"Error: TEST_SP_TOKEN is not set.\\\\\\\" \\\\u003e\\\\u00262\\\\n return 1\\\\n fi\\\\n\\\\n DATABRICKS_TOKEN=\\\\\\\"$TEST_SP_TOKEN\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_SECRET=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_ID=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_AUTH_TYPE=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n \\\\\\\"$@\\\\\\\"\\\\n}\\\\n\\\\nreadplanarg() {\\\\n # Expands into \\\\\\\"--plan \\\\u003cfilename\\\\u003e\\\\\\\" based on READPLAN env var\\\\n # Use it with \\\\\\\"bundle deploy\\\\\\\" to configure two runs: once with saved plan and one without.\\\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\\\n if [[ -n \\\\\\\"$READPLAN\\\\\\\" ]]; then\\\\n printf -- \\\\\\\"--plan %s\\\\\\\" \\\\\\\"$1\\\\\\\"\\\\n else\\\\n printf \\\\\\\"\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\n(\\\\n# Deploy with one job.\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Add a second job and redeploy.\\\\ncat \\\\u003e databricks.yml \\\\u003c\\\\u003c 'EOF'\\\\nbundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n test_job:\\\\n name: test-job\\\\n new_job:\\\\n name: new-job\\\\nEOF\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Remove the first job and redeploy (should delete test_job).\\\\ncat \\\\u003e databricks.yml \\\\u003c\\\\u003c 'EOF'\\\\nbundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n new_job:\\\\n name: new-job\\\\nEOF\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Print metadata service requests across all three deploys.\\\\n# Version 1: CREATE test_job\\\\n# Version 2: CREATE new_job (test_job unchanged)\\\\n# Version 3: DELETE test_job (new_job unchanged)\\\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\\\n)\\\\n\\\\nrm -fr .databricks .gitignore\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"\\\\n\\\\u003e\\\\u003e\\\\u003e [CLI] bundle deploy\\\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"seq\\\": 1,\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"timestamp\\\": \\\"[TIMESTAMP]\\\",\\n \\\"files\\\": [\\n {\\n \\\"local_path\\\": \\\"test.toml\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"databricks.yml\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"out.requests.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"output.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"repls.json\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"script\\\",\\n \\\"is_notebook\\\": false\\n }\\n ],\\n \\\"id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.2/jobs/create\\\",\\n \\\"body\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"test-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\\\",\\n \\\"q\\\": {\\n \\\"resource_key\\\": \\\"jobs.test_job\\\"\\n },\\n \\\"body\\\": {\\n \\\"resource_key\\\": \\\"jobs.test_job\\\",\\n \\\"action_type\\\": \\\"OPERATION_ACTION_TYPE_CREATE\\\",\\n \\\"state\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"test-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n },\\n \\\"resource_id\\\": \\\"[NUMID]\\\",\\n \\\"status\\\": \\\"OPERATION_STATUS_SUCCEEDED\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"config\\\": {\\n \\\"bundle\\\": {\\n \\\"name\\\": \\\"sequential-deploys-test\\\",\\n \\\"target\\\": \\\"default\\\",\\n \\\"git\\\": {\\n \\\"bundle_root_path\\\": \\\".\\\"\\n }\\n },\\n \\\"workspace\\\": {\\n \\\"file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n },\\n \\\"resources\\\": {\\n \\\"jobs\\\": {\\n \\\"test_job\\\": {\\n \\\"id\\\": \\\"[NUMID]\\\",\\n \\\"relative_path\\\": \\\"databricks.yml\\\"\\n }\\n }\\n },\\n \\\"presets\\\": {\\n \\\"source_linked_deployment\\\": false\\n }\\n },\\n \\\"extra\\\": {}\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\\\",\\n \\\"body\\\": {\\n \\\"name\\\": \\\"deployments/[UUID]/versions/1\\\",\\n \\\"completion_reason\\\": \\\"VERSION_COMPLETE_SUCCESS\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/telemetry-ext\\\",\\n \\\"body\\\": {\\n \\\"uploadTime\\\": [UNIX_TIME_MILLIS][0],\\n \\\"items\\\": [],\\n \\\"protoLogs\\\": [\\n \\\"{\\\\\\\"frontend_log_event_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"entry\\\\\\\":{\\\\\\\"databricks_cli_log\\\\\\\":{\\\\\\\"execution_context\\\\\\\":{\\\\\\\"cmd_exec_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"version\\\\\\\":\\\\\\\"[DEV_VERSION]\\\\\\\",\\\\\\\"command\\\\\\\":\\\\\\\"bundle_deploy\\\\\\\",\\\\\\\"operating_system\\\\\\\":\\\\\\\"linux\\\\\\\",\\\\\\\"execution_time_ms\\\\\\\":86,\\\\\\\"exit_code\\\\\\\":0},\\\\\\\"bundle_deploy_event\\\\\\\":{\\\\\\\"bundle_uuid\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"deployment_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"resource_count\\\\\\\":1,\\\\\\\"resource_job_count\\\\\\\":1,\\\\\\\"resource_pipeline_count\\\\\\\":0,\\\\\\\"resource_model_count\\\\\\\":0,\\\\\\\"resource_experiment_count\\\\\\\":0,\\\\\\\"resource_model_serving_endpoint_count\\\\\\\":0,\\\\\\\"resource_registered_model_count\\\\\\\":0,\\\\\\\"resource_quality_monitor_count\\\\\\\":0,\\\\\\\"resource_schema_count\\\\\\\":0,\\\\\\\"resource_volume_count\\\\\\\":0,\\\\\\\"resource_cluster_count\\\\\\\":0,\\\\\\\"resource_dashboard_count\\\\\\\":0,\\\\\\\"resource_app_count\\\\\\\":0,\\\\\\\"resource_job_ids\\\\\\\":[\\\\\\\"[NUMID]\\\\\\\"],\\\\\\\"experimental\\\\\\\":{\\\\\\\"configuration_file_count\\\\\\\":1,\\\\\\\"variable_count\\\\\\\":0,\\\\\\\"complex_variable_count\\\\\\\":0,\\\\\\\"lookup_variable_count\\\\\\\":0,\\\\\\\"target_count\\\\\\\":1,\\\\\\\"bool_values\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.attempt\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.miss\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"experimental.use_legacy_run_as\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"run_as_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"presets_name_prefix_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"python_wheel_wrapper_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"skip_artifact_cleanup\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_serverless_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_job_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_interactive_compute\\\\\\\",\\\\\\\"value\\\\\\\":false}],\\\\\\\"bundle_mode\\\\\\\":\\\\\\\"TYPE_UNSPECIFIED\\\\\\\",\\\\\\\"workspace_artifact_path_type\\\\\\\":\\\\\\\"WORKSPACE_FILE_SYSTEM\\\\\\\",\\\\\\\"bundle_mutator_execution_time_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Deploy\\\\\\\",\\\\\\\"value\\\\\\\":68},{\\\\\\\"key\\\\\\\":\\\\\\\"artifacts.(cleanUp)\\\\\\\",\\\\\\\"value\\\\\\\":55},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Initialize\\\\\\\",\\\\\\\"value\\\\\\\":12},{\\\\\\\"key\\\\\\\":\\\\\\\"resourcemutator.(processStaticResources)\\\\\\\",\\\\\\\"value\\\\\\\":5},{\\\\\\\"key\\\\\\\":\\\\\\\"files.(upload)\\\\\\\",\\\\\\\"value\\\\\\\":3},{\\\\\\\"key\\\\\\\":\\\\\\\"metadata.(annotatePipelines)\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Build\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"validate.FastValidate\\\\\\\",\\\\\\\"value\\\\\\\":0}],\\\\\\\"local_cache_measurements_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.compute_duration\\\\\\\",\\\\\\\"value\\\\\\\":0}]}}}}}\\\"\\n ]\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/resources\\\",\\n \\\"q\\\": {\\n \\\"page_size\\\": \\\"1000\\\"\\n },\\n \\\"body\\\": null\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"2\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\nDeploying resources...\\nDeployment complete!\\n\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 2,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"new-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/2/operations\",\n \"q\": {\n \"resource_key\": \"jobs.new_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.new_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"new-job\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"sequential-deploys-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"new_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n },\n \"test_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/2/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/2\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][1],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":27,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":2,\\\"resource_job_count\\\":2,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\",\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.hit\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":12},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":8},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"validate.(required)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"3\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n" +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "seq": 3, + "cli_version": "[DEV_VERSION]", + "timestamp": "[TIMESTAMP]", + "files": [ + { + "local_path": "out.requests.txt", + "is_notebook": false + }, + { + "local_path": "output.txt", + "is_notebook": false + }, + { + "local_path": "repls.json", + "is_notebook": false + }, + { + "local_path": "script", + "is_notebook": false + }, + { + "local_path": "test.toml", + "is_notebook": false + }, + { + "local_path": "databricks.yml", + "is_notebook": false + } + ], + "id": "[UUID]" + } +} +{ + "method": "GET", + "path": "/api/2.2/jobs/get", + "q": { + "job_id": "[NUMID]" + } +} +{ + "method": "GET", + "path": "/api/2.2/jobs/get", + "q": { + "job_id": "[NUMID]" + } +} +{ + "method": "POST", + "path": "/api/2.2/jobs/delete", + "body": { + "job_id": [NUMID] + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_DELETE", + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json", + "q": { + "overwrite": "true" + }, + "body": { + "version": 1, + "config": { + "bundle": { + "name": "sequential-deploys-test", + "target": "default", + "git": { + "bundle_root_path": "." + } + }, + "workspace": { + "file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" + }, + "resources": { + "jobs": { + "new_job": { + "id": "[NUMID]", + "relative_path": "databricks.yml" + } + } + }, + "presets": { + "source_linked_deployment": false + } + }, + "extra": {} + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/complete", + "body": { + "name": "deployments/[UUID]/versions/3", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "POST", + "path": "/telemetry-ext", + "body": { + "uploadTime": [UNIX_TIME_MILLIS][2], + "items": [], + "protoLogs": [ + "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":24,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":1,\"resource_job_count\":1,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.hit\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":11},{\"key\":\"phases.Initialize\",\"value\":7},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":3},{\"key\":\"files.(upload)\",\"value\":2},{\"key\":\"validate.FastValidate\",\"value\":0},{\"key\":\"phases.Build\",\"value\":0}]}}}}}" + ] + } +} diff --git a/acceptance/bundle/dms/sequential-deploys/output.txt b/acceptance/bundle/dms/sequential-deploys/output.txt index 9899405bf72..79fb0b649b0 100644 --- a/acceptance/bundle/dms/sequential-deploys/output.txt +++ b/acceptance/bundle/dms/sequential-deploys/output.txt @@ -15,147 +15,13 @@ Deploying resources... Deployment complete! >>> print_requests.py --get //bundle ^//workspace-files ^//import-file -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "1" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", - "body": { - "name": "deployments/[UUID]/versions/1", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "2" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", - "body": { - "name": "deployments/[UUID]/versions/2", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "3" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/complete", - "body": { - "name": "deployments/[UUID]/versions/3", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} +Traceback (most recent call last): + File "[TESTROOT]/bin/print_requests.py", line 197, in + main() + File "[TESTROOT]/bin/print_requests.py", line 178, in main + filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort) + File "[TESTROOT]/bin/print_requests.py", line 114, in filter_requests + positive_filters.append(f.removeprefix(ADD_PREFIX)) +AttributeError: 'str' object has no attribute 'removeprefix' + +Exit code: 1 diff --git a/acceptance/bundle/dms/sequential-deploys/script b/acceptance/bundle/dms/sequential-deploys/script index 407df194b2b..5f4f895e4b4 100644 --- a/acceptance/bundle/dms/sequential-deploys/script +++ b/acceptance/bundle/dms/sequential-deploys/script @@ -32,5 +32,3 @@ trace $CLI bundle deploy # Version 2: CREATE new_job (test_job unchanged) # Version 3: DELETE test_job (new_job unchanged) trace print_requests.py --get //bundle ^//workspace-files ^//import-file -# Clear remaining requests so out.requests.txt is not generated. -print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/sequential-deploys/test.toml b/acceptance/bundle/dms/sequential-deploys/test.toml new file mode 100644 index 00000000000..601384fdf96 --- /dev/null +++ b/acceptance/bundle/dms/sequential-deploys/test.toml @@ -0,0 +1 @@ +Ignore = [".databricks"] diff --git a/acceptance/bundle/dms/test.toml b/acceptance/bundle/dms/test.toml index 5d95b8d05dd..c529abc9de3 100644 --- a/acceptance/bundle/dms/test.toml +++ b/acceptance/bundle/dms/test.toml @@ -2,3 +2,8 @@ Badness = "Uses local test server; enable on cloud once the deployment metadata EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["direct"] EnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] RecordRequests = true + +# Stabilize flaky telemetry protoLogs (execution times and key order vary). +[[Repls]] +Old = '"protoLogs": \[.+\]' +New = '"protoLogs": ["TELEMETRY"]' From e85a6e090347919409352203793eb1f636f668e8 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Tue, 14 Apr 2026 22:14:08 +0000 Subject: [PATCH 08/25] Write deployment ID to workspace only after CreateDeployment succeeds If CreateDeployment fails, the workspace should not contain a dangling deployment ID pointing to a non-existent server record. Co-authored-by: Isaac --- .../lock/deployment_metadata_service.go | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/bundle/deploy/lock/deployment_metadata_service.go b/bundle/deploy/lock/deployment_metadata_service.go index f5c53ef33bc..66c38ea6965 100644 --- a/bundle/deploy/lock/deployment_metadata_service.go +++ b/bundle/deploy/lock/deployment_metadata_service.go @@ -120,6 +120,11 @@ func acquireLock(ctx context.Context, b *bundle.Bundle, svc *tmpdms.DeploymentMe if createErr != nil { return "", "", fmt.Errorf("failed to create deployment: %w", createErr) } + // Write the deployment ID to workspace only after the server-side + // record is created. This avoids leaving a dangling ID if creation fails. + if err := writeDeploymentID(ctx, b, deploymentID); err != nil { + return "", "", err + } versionID = "1" } else { // Existing deployment: get the last version ID to determine the next one. @@ -157,8 +162,10 @@ func acquireLock(ctx context.Context, b *bundle.Bundle, svc *tmpdms.DeploymentMe // resolveDeploymentID reads the deployment ID from resources.json in the // workspace state directory. If the file doesn't exist or has no deployment ID, -// a new UUID is generated and written. The boolean return indicates whether -// this is a fresh deployment (true) or an existing one (false). +// a new UUID is generated. The boolean return indicates whether this is a fresh +// deployment (true) or an existing one (false). For fresh deployments, the +// caller is responsible for writing the deployment ID to workspace after the +// server-side deployment record is created successfully. func resolveDeploymentID(ctx context.Context, b *bundle.Bundle) (string, bool, error) { f, err := deploy.StateFiler(b) if err != nil { @@ -184,18 +191,28 @@ func resolveDeploymentID(ctx context.Context, b *bundle.Bundle) (string, bool, e return "", false, fmt.Errorf("failed to read resources.json: %w", readErr) } - // Fresh deployment: generate a new ID and write resources.json. - deploymentID := uuid.New().String() + // Fresh deployment: generate a new ID but don't write yet. + return uuid.New().String(), true, nil +} + +// writeDeploymentID writes the deployment ID to resources.json in the workspace +// state directory. This should be called after the server-side deployment record +// is created successfully. +func writeDeploymentID(ctx context.Context, b *bundle.Bundle, deploymentID string) error { + f, err := deploy.StateFiler(b) + if err != nil { + return fmt.Errorf("failed to create state filer: %w", err) + } rj := statemgmt.ResourcesJSON{DeploymentID: deploymentID} data, err := json.Marshal(rj) if err != nil { - return "", false, fmt.Errorf("failed to marshal resources.json: %w", err) + return fmt.Errorf("failed to marshal resources.json: %w", err) } err = f.Write(ctx, "resources.json", bytes.NewReader(data), filer.CreateParentDirectories, filer.OverwriteIfExists) if err != nil { - return "", false, fmt.Errorf("failed to write resources.json: %w", err) + return fmt.Errorf("failed to write resources.json: %w", err) } - return deploymentID, true, nil + return nil } // makeOperationReporter returns an OperationReporter that reports each resource From 79b4027da883abed36d6843a293303ab1d14febc Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Tue, 14 Apr 2026 22:23:27 +0000 Subject: [PATCH 09/25] Restore permission error handling in workspace filesystem lock The old lock.Acquire mutator checked for fs.ErrPermission and fs.ErrNotExist and reported possible permission denied errors. This was lost when refactoring to the DeploymentLock interface. Co-authored-by: Isaac --- bundle/deploy/lock/workspace_filesystem.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/bundle/deploy/lock/workspace_filesystem.go b/bundle/deploy/lock/workspace_filesystem.go index e84f327d844..140cc56198b 100644 --- a/bundle/deploy/lock/workspace_filesystem.go +++ b/bundle/deploy/lock/workspace_filesystem.go @@ -2,8 +2,11 @@ package lock import ( "context" + "errors" + "io/fs" "github.com/databricks/cli/bundle" + "github.com/databricks/cli/bundle/permissions" "github.com/databricks/cli/libs/locker" "github.com/databricks/cli/libs/log" ) @@ -39,6 +42,12 @@ func (l *workspaceFilesystemLock) Acquire(ctx context.Context) error { err = lk.Lock(ctx, force) if err != nil { log.Errorf(ctx, "Failed to acquire deployment lock: %v", err) + + if errors.Is(err, fs.ErrPermission) || errors.Is(err, fs.ErrNotExist) { + diags := permissions.ReportPossiblePermissionDenied(ctx, b, b.Config.Workspace.StatePath) + return diags.Error() + } + return err } From 6513dd18ba33e0871feb2f0258ee11df13a505ec Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Tue, 14 Apr 2026 22:37:42 +0000 Subject: [PATCH 10/25] Remove out.requests.txt golden files from DMS tests Add print_requests.py cleanup at the end of each script to clear remaining recorded requests, preventing out.requests.txt from being generated as a golden file. DMS requests are already printed inline in output.txt. Co-authored-by: Isaac --- .../bundle/dms/add-resources/out.requests.txt | 1121 ----------------- .../bundle/dms/add-resources/out.test.toml | 6 - .../bundle/dms/add-resources/output.txt | 2 +- acceptance/bundle/dms/add-resources/script | 1 + .../bundle/dms/deploy-error/out.requests.txt | 490 ------- .../bundle/dms/deploy-error/out.test.toml | 6 - acceptance/bundle/dms/deploy-error/script | 1 + acceptance/bundle/dms/deploy-error/test.toml | 1 + acceptance/bundle/dms/out.requests.txt | 860 ------------- acceptance/bundle/dms/out.test.toml | 6 - acceptance/bundle/dms/output.txt | 10 +- .../dms/plan-and-summary/out.requests.txt | 596 --------- .../bundle/dms/plan-and-summary/out.test.toml | 6 - acceptance/bundle/dms/plan-and-summary/script | 1 + .../dms/release-lock-error/out.requests.txt | 537 -------- .../dms/release-lock-error/out.test.toml | 6 - .../bundle/dms/release-lock-error/script | 1 + .../bundle/dms/release-lock-error/test.toml | 2 + acceptance/bundle/dms/script | 3 + .../dms/sequential-deploys/out.requests.txt | 1031 --------------- .../dms/sequential-deploys/out.test.toml | 6 - .../bundle/dms/sequential-deploys/script | 1 + 22 files changed, 17 insertions(+), 4677 deletions(-) delete mode 100644 acceptance/bundle/dms/add-resources/out.requests.txt delete mode 100644 acceptance/bundle/dms/add-resources/out.test.toml delete mode 100644 acceptance/bundle/dms/deploy-error/out.requests.txt delete mode 100644 acceptance/bundle/dms/deploy-error/out.test.toml delete mode 100644 acceptance/bundle/dms/out.requests.txt delete mode 100644 acceptance/bundle/dms/out.test.toml delete mode 100644 acceptance/bundle/dms/plan-and-summary/out.requests.txt delete mode 100644 acceptance/bundle/dms/plan-and-summary/out.test.toml delete mode 100644 acceptance/bundle/dms/release-lock-error/out.requests.txt delete mode 100644 acceptance/bundle/dms/release-lock-error/out.test.toml delete mode 100644 acceptance/bundle/dms/sequential-deploys/out.requests.txt delete mode 100644 acceptance/bundle/dms/sequential-deploys/out.test.toml diff --git a/acceptance/bundle/dms/add-resources/out.requests.txt b/acceptance/bundle/dms/add-resources/out.requests.txt deleted file mode 100644 index c6bdf784053..00000000000 --- a/acceptance/bundle/dms/add-resources/out.requests.txt +++ /dev/null @@ -1,1121 +0,0 @@ -{ - "method": "GET", - "path": "/.well-known/databricks-config" -} -{ - "method": "GET", - "path": "/api/2.0/preview/scim/v2/Me" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", - "q": { - "overwrite": "true" - }, - "body": { - "deployment_id": "[UUID]" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "1" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/delete", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal", - "recursive": true - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/databricks.yml", - "q": { - "overwrite": "true" - }, - "raw_body": "bundle:\n name: add-resources-test\n\nresources:\n jobs:\n job_a:\n name: job-a\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/script", - "q": { - "overwrite": "true" - }, - "raw_body": "errcode() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e' if it was previously set\n set -e\n if [ $exit_code -ne 0 ]; then\n \u003e\u00262 printf \"\\nExit code: $exit_code\\n\"\n fi\n}\n\nmusterr() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e'\n set -e\n if [ $exit_code -eq 0 ]; then\n \u003e\u00262 printf \"\\nUnexpected success\\n\"\n exit 1\n fi\n}\n\ntrace() {\n \u003e\u00262 printf \"\\n\u003e\u003e\u003e %s\\n\" \"$*\"\n\n if [[ \"$1\" == *\"=\"* ]]; then\n # If the first argument contains '=', collect all env vars\n local env_vars=()\n while [[ \"$1\" == *\"=\"* ]]; do\n env_vars+=(\"$1\")\n shift\n done\n # Export environment variables in a subshell and execute the command\n (\n export \"${env_vars[@]}\"\n \"$@\"\n )\n else\n # Execute the command normally\n \"$@\"\n fi\n\n return $?\n}\n\ngit-repo-init() {\n git init -qb main\n git config core.autocrlf false\n git config user.name \"Tester\"\n git config user.email \"[USERNAME]\"\n git config core.hooksPath no-hooks\n git add databricks.yml\n git commit -qm 'Add databricks.yml'\n}\n\ntitle() {\n local label=\"$1\"\n printf \"\\n=== %b\" \"$label\"\n}\n\nwithdir() {\n local dir=\"$1\"\n shift\n local orig_dir=\"$(pwd)\"\n cd \"$dir\" || return $?\n \"$@\"\n local exit_code=$?\n cd \"$orig_dir\" || return $?\n return $exit_code\n}\n\nuuid() {\n python3 -c 'import uuid; print(uuid.uuid4())'\n}\n\nvenv_activate() {\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"cygwin\" || \"$OSTYPE\" == \"win32\" ]]; then\n source .venv/Scripts/activate\n else\n source .venv/bin/activate\n fi\n}\n\nenvsubst() {\n # We need to disable MSYS_NO_PATHCONV when running the python script.\n # This is because the python interpreter is otherwise unable to find the python script\n # when MSYS_NO_PATHCONV is enabled.\n env -u MSYS_NO_PATHCONV envsubst.py\n}\n\nprint_telemetry_bool_values() {\n jq -r 'select(.path? == \"/telemetry-ext\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\"\\(.key) \\(.value)\") | .[]' out.requests.txt | sort\n}\n\nsethome() {\n local home=\"$1\"\n mkdir -p \"$home\"\n\n # For macOS and Linux, use HOME.\n export HOME=\"$home\"\n\n # For Windows, use USERPROFILE.\n export USERPROFILE=\"$home\"\n}\n\nas-test-sp() {\n if [[ -z \"$TEST_SP_TOKEN\" ]]; then\n echo \"Error: TEST_SP_TOKEN is not set.\" \u003e\u00262\n return 1\n fi\n\n DATABRICKS_TOKEN=\"$TEST_SP_TOKEN\" \\\n DATABRICKS_CLIENT_SECRET=\"\" \\\n DATABRICKS_CLIENT_ID=\"\" \\\n DATABRICKS_AUTH_TYPE=\"\" \\\n \"$@\"\n}\n\nreadplanarg() {\n # Expands into \"--plan \u003cfilename\u003e\" based on READPLAN env var\n # Use it with \"bundle deploy\" to configure two runs: once with saved plan and one without.\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\n if [[ -n \"$READPLAN\" ]]; then\n printf -- \"--plan %s\" \"$1\"\n else\n printf \"\"\n fi\n}\n\n(\n# Deploy with one job.\ntrace $CLI bundle deploy\n\n# Delete local cache to force reading state from DMS.\nrm -rf .databricks\n\n# Add a second job and deploy again.\ncat \u003e databricks.yml \u003c\u003c 'EOF'\nbundle:\n name: add-resources-test\n\nresources:\n jobs:\n job_a:\n name: job-a\n job_b:\n name: job-b\nEOF\ntrace $CLI bundle deploy\n\n# Delete local cache again and run plan — should show no changes.\nrm -rf .databricks\ntrace $CLI bundle plan\n\n# Print metadata service requests. Should show:\n# - Deploy 1: CREATE for job_a\n# - Deploy 2: ListResources + CREATE for job_b (job_a is unchanged)\n# - Plan: ListResources (no operations)\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n\n# Clean up.\nrm -rf .databricks\n$CLI bundle destroy --auto-approve \u003e /dev/null 2\u003e\u00261\n)\n\nrm -fr .databricks .gitignore\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/test.toml", - "q": { - "overwrite": "true" - }, - "raw_body": "Ignore = [\".databricks\"]\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/output.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/out.requests.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/repls.json", - "q": { - "overwrite": "true" - }, - "body": [ - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/\\.terraformrc", - "New": "[DATABRICKS_TF_CLI_CONFIG_FILE]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/terraform", - "New": "[TERRAFORM]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/libs/vendored_py_packages", - "New": "[VENDORED_PY_PACKAGES]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\.296\\.0-py3-none-any\\.whl", - "New": "[DATABRICKS_BUNDLES_WHEEL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks", - "New": "[CLI]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/0\\.293\\.0/databricks", - "New": "[CLI_293]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_DEFAULT_WAREHOUSE_ID]", - "New": "[TEST_DEFAULT_WAREHOUSE_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_DEFAULT_CLUSTER_ID]", - "New": "[TEST_DEFAULT_CLUSTER_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_INSTANCE_POOL_ID]", - "New": "[TEST_INSTANCE_POOL_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64", - "New": "[BUILD_DIR]", - "Order": 0, - "Distinct": false - }, - { - "Old": "0\\.0\\.0-dev(\\+[a-f0-9]{10,16})?", - "New": "[DEV_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "databricks-sdk-go/[0-9]+\\.[0-9]+\\.[0-9]+", - "New": "databricks-sdk-go/[SDK_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "1\\.26\\.1", - "New": "[GO_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance", - "New": "[TESTROOT]", - "Order": 0, - "Distinct": false - }, - { - "Old": "dbapi[0-9a-f]+", - "New": "[DATABRICKS_TOKEN]", - "Order": 0, - "Distinct": false - }, - { - "Old": "i3\\.xlarge", - "New": "[NODE_TYPE_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[UNIQUE_NAME]", - "New": "[UNIQUE_NAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_TMP_DIR]", - "New": "[TEST_TMP_DIR]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_TMP_DIR]_PARENT", - "New": "[TEST_TMP_DIR]_PARENT", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERNAME]@databricks\\.com", - "New": "[USERNAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERNAME]", - "New": "[USERNAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERID]", - "New": "[USERID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "https://127\\.0\\.0\\.1:40397", - "New": "[DATABRICKS_URL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "http://127\\.0\\.0\\.1:40397", - "New": "[DATABRICKS_URL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "127\\.0\\.0\\.1:40397", - "New": "[DATABRICKS_HOST]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", - "New": "[UUID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "\\d{20,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{17}", - "New": "[UNIX_TIME_NANOS]", - "Order": 10, - "Distinct": true - }, - { - "Old": "\\d{17,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "\\d{14,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{11}", - "New": "[UNIX_TIME_MILLIS]", - "Order": 10, - "Distinct": true - }, - { - "Old": "\\d{11,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{8}", - "New": "[UNIX_TIME_S]", - "Order": 10, - "Distinct": false - }, - { - "Old": "\\d{8,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+(Z|\\+\\d\\d:\\d\\d)?", - "New": "[TIMESTAMP]", - "Order": 9, - "Distinct": false - }, - { - "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\dZ?", - "New": "[TIMESTAMP]", - "Order": 9, - "Distinct": false - }, - { - "Old": "[METASTORE_NAME]|[METASTORE_NAME]", - "New": "[METASTORE_NAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "", - "New": "", - "Order": 0, - "Distinct": false - }, - { - "Old": "\"protoLogs\": \\[.+\\]", - "New": "\"protoLogs\": [\"TELEMETRY\"]", - "Order": 0, - "Distinct": false - } - ] -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "seq": 1, - "cli_version": "[DEV_VERSION]", - "timestamp": "[TIMESTAMP]", - "files": [ - { - "local_path": "output.txt", - "is_notebook": false - }, - { - "local_path": "repls.json", - "is_notebook": false - }, - { - "local_path": "script", - "is_notebook": false - }, - { - "local_path": "test.toml", - "is_notebook": false - }, - { - "local_path": "databricks.yml", - "is_notebook": false - }, - { - "local_path": "out.requests.txt", - "is_notebook": false - } - ], - "id": "[UUID]" - } -} -{ - "method": "POST", - "path": "/api/2.2/jobs/create", - "body": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "job-a", - "queue": { - "enabled": true - } - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", - "q": { - "resource_key": "jobs.job_a" - }, - "body": { - "resource_key": "jobs.job_a", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "job-a", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "config": { - "bundle": { - "name": "add-resources-test", - "target": "default", - "git": { - "bundle_root_path": "." - } - }, - "workspace": { - "file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files" - }, - "resources": { - "jobs": { - "job_a": { - "id": "[NUMID]", - "relative_path": "databricks.yml" - } - } - }, - "presets": { - "source_linked_deployment": false - } - }, - "extra": {} - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", - "body": { - "name": "deployments/[UUID]/versions/1", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "POST", - "path": "/telemetry-ext", - "body": { - "uploadTime": [UNIX_TIME_MILLIS][0], - "items": [], - "protoLogs": [ - "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":87,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":1,\"resource_job_count\":1,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.miss\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":69},{\"key\":\"files.(upload)\",\"value\":57},{\"key\":\"phases.Initialize\",\"value\":12},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":5},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}],\"local_cache_measurements_ms\":[{\"key\":\"local.cache.compute_duration\",\"value\":0}]}}}}}" - ] - } -} -{ - "method": "GET", - "path": "/.well-known/databricks-config" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json" -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json" -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "2" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/delete", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal", - "recursive": true - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/script", - "q": { - "overwrite": "true" - }, - "raw_body": "errcode() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e' if it was previously set\n set -e\n if [ $exit_code -ne 0 ]; then\n \u003e\u00262 printf \"\\nExit code: $exit_code\\n\"\n fi\n}\n\nmusterr() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e'\n set -e\n if [ $exit_code -eq 0 ]; then\n \u003e\u00262 printf \"\\nUnexpected success\\n\"\n exit 1\n fi\n}\n\ntrace() {\n \u003e\u00262 printf \"\\n\u003e\u003e\u003e %s\\n\" \"$*\"\n\n if [[ \"$1\" == *\"=\"* ]]; then\n # If the first argument contains '=', collect all env vars\n local env_vars=()\n while [[ \"$1\" == *\"=\"* ]]; do\n env_vars+=(\"$1\")\n shift\n done\n # Export environment variables in a subshell and execute the command\n (\n export \"${env_vars[@]}\"\n \"$@\"\n )\n else\n # Execute the command normally\n \"$@\"\n fi\n\n return $?\n}\n\ngit-repo-init() {\n git init -qb main\n git config core.autocrlf false\n git config user.name \"Tester\"\n git config user.email \"[USERNAME]\"\n git config core.hooksPath no-hooks\n git add databricks.yml\n git commit -qm 'Add databricks.yml'\n}\n\ntitle() {\n local label=\"$1\"\n printf \"\\n=== %b\" \"$label\"\n}\n\nwithdir() {\n local dir=\"$1\"\n shift\n local orig_dir=\"$(pwd)\"\n cd \"$dir\" || return $?\n \"$@\"\n local exit_code=$?\n cd \"$orig_dir\" || return $?\n return $exit_code\n}\n\nuuid() {\n python3 -c 'import uuid; print(uuid.uuid4())'\n}\n\nvenv_activate() {\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"cygwin\" || \"$OSTYPE\" == \"win32\" ]]; then\n source .venv/Scripts/activate\n else\n source .venv/bin/activate\n fi\n}\n\nenvsubst() {\n # We need to disable MSYS_NO_PATHCONV when running the python script.\n # This is because the python interpreter is otherwise unable to find the python script\n # when MSYS_NO_PATHCONV is enabled.\n env -u MSYS_NO_PATHCONV envsubst.py\n}\n\nprint_telemetry_bool_values() {\n jq -r 'select(.path? == \"/telemetry-ext\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\"\\(.key) \\(.value)\") | .[]' out.requests.txt | sort\n}\n\nsethome() {\n local home=\"$1\"\n mkdir -p \"$home\"\n\n # For macOS and Linux, use HOME.\n export HOME=\"$home\"\n\n # For Windows, use USERPROFILE.\n export USERPROFILE=\"$home\"\n}\n\nas-test-sp() {\n if [[ -z \"$TEST_SP_TOKEN\" ]]; then\n echo \"Error: TEST_SP_TOKEN is not set.\" \u003e\u00262\n return 1\n fi\n\n DATABRICKS_TOKEN=\"$TEST_SP_TOKEN\" \\\n DATABRICKS_CLIENT_SECRET=\"\" \\\n DATABRICKS_CLIENT_ID=\"\" \\\n DATABRICKS_AUTH_TYPE=\"\" \\\n \"$@\"\n}\n\nreadplanarg() {\n # Expands into \"--plan \u003cfilename\u003e\" based on READPLAN env var\n # Use it with \"bundle deploy\" to configure two runs: once with saved plan and one without.\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\n if [[ -n \"$READPLAN\" ]]; then\n printf -- \"--plan %s\" \"$1\"\n else\n printf \"\"\n fi\n}\n\n(\n# Deploy with one job.\ntrace $CLI bundle deploy\n\n# Delete local cache to force reading state from DMS.\nrm -rf .databricks\n\n# Add a second job and deploy again.\ncat \u003e databricks.yml \u003c\u003c 'EOF'\nbundle:\n name: add-resources-test\n\nresources:\n jobs:\n job_a:\n name: job-a\n job_b:\n name: job-b\nEOF\ntrace $CLI bundle deploy\n\n# Delete local cache again and run plan — should show no changes.\nrm -rf .databricks\ntrace $CLI bundle plan\n\n# Print metadata service requests. Should show:\n# - Deploy 1: CREATE for job_a\n# - Deploy 2: ListResources + CREATE for job_b (job_a is unchanged)\n# - Plan: ListResources (no operations)\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n\n# Clean up.\nrm -rf .databricks\n$CLI bundle destroy --auto-approve \u003e /dev/null 2\u003e\u00261\n)\n\nrm -fr .databricks .gitignore\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/output.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/out.requests.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: add-resources-test\\n\\nresources:\\n jobs:\\n job_a:\\n name: job-a\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with one job.\\ntrace $CLI bundle deploy\\n\\n# Delete local cache to force reading state from DMS.\\nrm -rf .databricks\\n\\n# Add a second job and deploy again.\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: add-resources-test\\n\\nresources:\\n jobs:\\n job_a:\\n name: job-a\\n job_b:\\n name: job-b\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Delete local cache again and run plan — should show no changes.\\nrm -rf .databricks\\ntrace $CLI bundle plan\\n\\n# Print metadata service requests. Should show:\\n# - Deploy 1: CREATE for job_a\\n# - Deploy 2: ListResources + CREATE for job_b (job_a is unchanged)\\n# - Plan: ListResources (no operations)\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n\\n# Clean up.\\nrm -rf .databricks\\n$CLI bundle destroy --auto-approve \\u003e /dev/null 2\\u003e\\u00261\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"Ignore = [\\\".databricks\\\"]\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:40397\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:40397\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:40397\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"job-a\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.job_a\"\n },\n \"body\": {\n \"resource_key\": \"jobs.job_a\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"job-a\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"add-resources-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"job_a\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][0],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":87,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":69},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":57},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":12},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":5},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"2\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/test.toml", - "q": { - "overwrite": "true" - }, - "raw_body": "Ignore = [\".databricks\"]\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/repls.json", - "q": { - "overwrite": "true" - }, - "body": [ - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/\\.terraformrc", - "New": "[DATABRICKS_TF_CLI_CONFIG_FILE]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/terraform", - "New": "[TERRAFORM]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/libs/vendored_py_packages", - "New": "[VENDORED_PY_PACKAGES]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\.296\\.0-py3-none-any\\.whl", - "New": "[DATABRICKS_BUNDLES_WHEEL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks", - "New": "[CLI]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/0\\.293\\.0/databricks", - "New": "[CLI_293]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_DEFAULT_WAREHOUSE_ID]", - "New": "[TEST_DEFAULT_WAREHOUSE_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_DEFAULT_CLUSTER_ID]", - "New": "[TEST_DEFAULT_CLUSTER_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_INSTANCE_POOL_ID]", - "New": "[TEST_INSTANCE_POOL_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64", - "New": "[BUILD_DIR]", - "Order": 0, - "Distinct": false - }, - { - "Old": "0\\.0\\.0-dev(\\+[a-f0-9]{10,16})?", - "New": "[DEV_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "databricks-sdk-go/[0-9]+\\.[0-9]+\\.[0-9]+", - "New": "databricks-sdk-go/[SDK_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "1\\.26\\.1", - "New": "[GO_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance", - "New": "[TESTROOT]", - "Order": 0, - "Distinct": false - }, - { - "Old": "dbapi[0-9a-f]+", - "New": "[DATABRICKS_TOKEN]", - "Order": 0, - "Distinct": false - }, - { - "Old": "i3\\.xlarge", - "New": "[NODE_TYPE_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[UNIQUE_NAME]", - "New": "[UNIQUE_NAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_TMP_DIR]", - "New": "[TEST_TMP_DIR]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_TMP_DIR]_PARENT", - "New": "[TEST_TMP_DIR]_PARENT", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERNAME]@databricks\\.com", - "New": "[USERNAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERNAME]", - "New": "[USERNAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERID]", - "New": "[USERID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "https://127\\.0\\.0\\.1:40397", - "New": "[DATABRICKS_URL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "http://127\\.0\\.0\\.1:40397", - "New": "[DATABRICKS_URL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "127\\.0\\.0\\.1:40397", - "New": "[DATABRICKS_HOST]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", - "New": "[UUID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "\\d{20,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{17}", - "New": "[UNIX_TIME_NANOS]", - "Order": 10, - "Distinct": true - }, - { - "Old": "\\d{17,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "\\d{14,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{11}", - "New": "[UNIX_TIME_MILLIS]", - "Order": 10, - "Distinct": true - }, - { - "Old": "\\d{11,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{8}", - "New": "[UNIX_TIME_S]", - "Order": 10, - "Distinct": false - }, - { - "Old": "\\d{8,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+(Z|\\+\\d\\d:\\d\\d)?", - "New": "[TIMESTAMP]", - "Order": 9, - "Distinct": false - }, - { - "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\dZ?", - "New": "[TIMESTAMP]", - "Order": 9, - "Distinct": false - }, - { - "Old": "[METASTORE_NAME]|[METASTORE_NAME]", - "New": "[METASTORE_NAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "", - "New": "", - "Order": 0, - "Distinct": false - }, - { - "Old": "\"protoLogs\": \\[.+\\]", - "New": "\"protoLogs\": [\"TELEMETRY\"]", - "Order": 0, - "Distinct": false - } - ] -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/databricks.yml", - "q": { - "overwrite": "true" - }, - "raw_body": "bundle:\n name: add-resources-test\n\nresources:\n jobs:\n job_a:\n name: job-a\n job_b:\n name: job-b\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "seq": 2, - "cli_version": "[DEV_VERSION]", - "timestamp": "[TIMESTAMP]", - "files": [ - { - "local_path": "databricks.yml", - "is_notebook": false - }, - { - "local_path": "out.requests.txt", - "is_notebook": false - }, - { - "local_path": "output.txt", - "is_notebook": false - }, - { - "local_path": "repls.json", - "is_notebook": false - }, - { - "local_path": "script", - "is_notebook": false - }, - { - "local_path": "test.toml", - "is_notebook": false - } - ], - "id": "[UUID]" - } -} -{ - "method": "GET", - "path": "/api/2.2/jobs/get", - "q": { - "job_id": "[NUMID]" - } -} -{ - "method": "POST", - "path": "/api/2.2/jobs/create", - "body": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "job-b", - "queue": { - "enabled": true - } - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", - "q": { - "resource_key": "jobs.job_b" - }, - "body": { - "resource_key": "jobs.job_b", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "job-b", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "config": { - "bundle": { - "name": "add-resources-test", - "target": "default", - "git": { - "bundle_root_path": "." - } - }, - "workspace": { - "file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files" - }, - "resources": { - "jobs": { - "job_a": { - "id": "[NUMID]", - "relative_path": "databricks.yml" - }, - "job_b": { - "id": "[NUMID]", - "relative_path": "databricks.yml" - } - } - }, - "presets": { - "source_linked_deployment": false - } - }, - "extra": {} - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", - "body": { - "name": "deployments/[UUID]/versions/2", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "POST", - "path": "/telemetry-ext", - "body": { - "uploadTime": [UNIX_TIME_MILLIS][1], - "items": [], - "protoLogs": [ - "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":30,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":2,\"resource_job_count\":2,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\",\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.hit\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":14},{\"key\":\"phases.Initialize\",\"value\":8},{\"key\":\"files.(upload)\",\"value\":4},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":3},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"deploy.(statePull)\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}]}}}}}" - ] - } -} -{ - "method": "GET", - "path": "/.well-known/databricks-config" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json" -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json" -} -{ - "method": "GET", - "path": "/api/2.2/jobs/get", - "q": { - "job_id": "[NUMID]" - } -} -{ - "method": "GET", - "path": "/api/2.2/jobs/get", - "q": { - "job_id": "[NUMID]" - } -} diff --git a/acceptance/bundle/dms/add-resources/out.test.toml b/acceptance/bundle/dms/add-resources/out.test.toml deleted file mode 100644 index 6ce208a0484..00000000000 --- a/acceptance/bundle/dms/add-resources/out.test.toml +++ /dev/null @@ -1,6 +0,0 @@ -Local = true -Cloud = false - -[EnvMatrix] - DATABRICKS_BUNDLE_ENGINE = ["direct"] - DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/add-resources/output.txt b/acceptance/bundle/dms/add-resources/output.txt index 57beaa1f091..17c491fea44 100644 --- a/acceptance/bundle/dms/add-resources/output.txt +++ b/acceptance/bundle/dms/add-resources/output.txt @@ -20,6 +20,6 @@ Traceback (most recent call last): data = fobj.read() File "/usr/lib/python3.6/encodings/ascii.py", line 26, in decode return codecs.ascii_decode(input, self.errors)[0] -UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 7053: ordinal not in range(128) +UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 6985: ordinal not in range(128) Exit code: 1 diff --git a/acceptance/bundle/dms/add-resources/script b/acceptance/bundle/dms/add-resources/script index c3b8fda6762..8fd8bf1c72e 100644 --- a/acceptance/bundle/dms/add-resources/script +++ b/acceptance/bundle/dms/add-resources/script @@ -31,3 +31,4 @@ trace print_requests.py --get //bundle ^//workspace-files ^//import-file # Clean up. rm -rf .databricks $CLI bundle destroy --auto-approve > /dev/null 2>&1 +print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/deploy-error/out.requests.txt b/acceptance/bundle/dms/deploy-error/out.requests.txt deleted file mode 100644 index 060493c6388..00000000000 --- a/acceptance/bundle/dms/deploy-error/out.requests.txt +++ /dev/null @@ -1,490 +0,0 @@ -{ - "method": "GET", - "path": "/.well-known/databricks-config" -} -{ - "method": "GET", - "path": "/api/2.0/preview/scim/v2/Me" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/deployment.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json", - "q": { - "overwrite": "true" - }, - "body": { - "deployment_id": "[UUID]" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "1" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/delete", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal", - "recursive": true - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/output.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "\n\u003e\u003e\u003e musterr [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files...\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/script", - "q": { - "overwrite": "true" - }, - "raw_body": "errcode() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e' if it was previously set\n set -e\n if [ $exit_code -ne 0 ]; then\n \u003e\u00262 printf \"\\nExit code: $exit_code\\n\"\n fi\n}\n\nmusterr() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e'\n set -e\n if [ $exit_code -eq 0 ]; then\n \u003e\u00262 printf \"\\nUnexpected success\\n\"\n exit 1\n fi\n}\n\ntrace() {\n \u003e\u00262 printf \"\\n\u003e\u003e\u003e %s\\n\" \"$*\"\n\n if [[ \"$1\" == *\"=\"* ]]; then\n # If the first argument contains '=', collect all env vars\n local env_vars=()\n while [[ \"$1\" == *\"=\"* ]]; do\n env_vars+=(\"$1\")\n shift\n done\n # Export environment variables in a subshell and execute the command\n (\n export \"${env_vars[@]}\"\n \"$@\"\n )\n else\n # Execute the command normally\n \"$@\"\n fi\n\n return $?\n}\n\ngit-repo-init() {\n git init -qb main\n git config core.autocrlf false\n git config user.name \"Tester\"\n git config user.email \"[USERNAME]\"\n git config core.hooksPath no-hooks\n git add databricks.yml\n git commit -qm 'Add databricks.yml'\n}\n\ntitle() {\n local label=\"$1\"\n printf \"\\n=== %b\" \"$label\"\n}\n\nwithdir() {\n local dir=\"$1\"\n shift\n local orig_dir=\"$(pwd)\"\n cd \"$dir\" || return $?\n \"$@\"\n local exit_code=$?\n cd \"$orig_dir\" || return $?\n return $exit_code\n}\n\nuuid() {\n python3 -c 'import uuid; print(uuid.uuid4())'\n}\n\nvenv_activate() {\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"cygwin\" || \"$OSTYPE\" == \"win32\" ]]; then\n source .venv/Scripts/activate\n else\n source .venv/bin/activate\n fi\n}\n\nenvsubst() {\n # We need to disable MSYS_NO_PATHCONV when running the python script.\n # This is because the python interpreter is otherwise unable to find the python script\n # when MSYS_NO_PATHCONV is enabled.\n env -u MSYS_NO_PATHCONV envsubst.py\n}\n\nprint_telemetry_bool_values() {\n jq -r 'select(.path? == \"/telemetry-ext\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\"\\(.key) \\(.value)\") | .[]' out.requests.txt | sort\n}\n\nsethome() {\n local home=\"$1\"\n mkdir -p \"$home\"\n\n # For macOS and Linux, use HOME.\n export HOME=\"$home\"\n\n # For Windows, use USERPROFILE.\n export USERPROFILE=\"$home\"\n}\n\nas-test-sp() {\n if [[ -z \"$TEST_SP_TOKEN\" ]]; then\n echo \"Error: TEST_SP_TOKEN is not set.\" \u003e\u00262\n return 1\n fi\n\n DATABRICKS_TOKEN=\"$TEST_SP_TOKEN\" \\\n DATABRICKS_CLIENT_SECRET=\"\" \\\n DATABRICKS_CLIENT_ID=\"\" \\\n DATABRICKS_AUTH_TYPE=\"\" \\\n \"$@\"\n}\n\nreadplanarg() {\n # Expands into \"--plan \u003cfilename\u003e\" based on READPLAN env var\n # Use it with \"bundle deploy\" to configure two runs: once with saved plan and one without.\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\n if [[ -n \"$READPLAN\" ]]; then\n printf -- \"--plan %s\" \"$1\"\n else\n printf \"\"\n fi\n}\n\n(\n# Deploy with the metadata service enabled, expecting a resource creation failure.\ntrace musterr $CLI bundle deploy\n\n# Print the metadata service requests to verify the failed operation is reported.\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n)\n\nrm -fr .databricks .gitignore\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/test.toml", - "q": { - "overwrite": "true" - }, - "raw_body": "EnvMatrix.DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\nEnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\nRecordRequests = true\n\n[[Server]]\nPattern = \"POST /api/2.2/jobs/create\"\nResponse.StatusCode = 400\nResponse.Body = '{\"error_code\": \"INVALID_PARAMETER_VALUE\", \"message\": \"Invalid job configuration.\"}'\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/databricks.yml", - "q": { - "overwrite": "true" - }, - "raw_body": "bundle:\n name: metadata-service-error-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/repls.json", - "q": { - "overwrite": "true" - }, - "body": [ - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/\\.terraformrc", - "New": "[DATABRICKS_TF_CLI_CONFIG_FILE]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/terraform", - "New": "[TERRAFORM]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/libs/vendored_py_packages", - "New": "[VENDORED_PY_PACKAGES]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\.296\\.0-py3-none-any\\.whl", - "New": "[DATABRICKS_BUNDLES_WHEEL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks", - "New": "[CLI]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/0\\.293\\.0/databricks", - "New": "[CLI_293]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_DEFAULT_WAREHOUSE_ID]", - "New": "[TEST_DEFAULT_WAREHOUSE_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_DEFAULT_CLUSTER_ID]", - "New": "[TEST_DEFAULT_CLUSTER_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_INSTANCE_POOL_ID]", - "New": "[TEST_INSTANCE_POOL_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64", - "New": "[BUILD_DIR]", - "Order": 0, - "Distinct": false - }, - { - "Old": "0\\.0\\.0-dev(\\+[a-f0-9]{10,16})?", - "New": "[DEV_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "databricks-sdk-go/[0-9]+\\.[0-9]+\\.[0-9]+", - "New": "databricks-sdk-go/[SDK_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "1\\.26\\.1", - "New": "[GO_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance", - "New": "[TESTROOT]", - "Order": 0, - "Distinct": false - }, - { - "Old": "dbapi[0-9a-f]+", - "New": "[DATABRICKS_TOKEN]", - "Order": 0, - "Distinct": false - }, - { - "Old": "i3\\.xlarge", - "New": "[NODE_TYPE_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[UNIQUE_NAME]", - "New": "[UNIQUE_NAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_TMP_DIR]", - "New": "[TEST_TMP_DIR]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_TMP_DIR]_PARENT", - "New": "[TEST_TMP_DIR]_PARENT", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERNAME]@databricks\\.com", - "New": "[USERNAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERNAME]", - "New": "[USERNAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERID]", - "New": "[USERID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "https://127\\.0\\.0\\.1:44061", - "New": "[DATABRICKS_URL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "http://127\\.0\\.0\\.1:44061", - "New": "[DATABRICKS_URL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "127\\.0\\.0\\.1:44061", - "New": "[DATABRICKS_HOST]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", - "New": "[UUID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "\\d{20,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{17}", - "New": "[UNIX_TIME_NANOS]", - "Order": 10, - "Distinct": true - }, - { - "Old": "\\d{17,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "\\d{14,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{11}", - "New": "[UNIX_TIME_MILLIS]", - "Order": 10, - "Distinct": true - }, - { - "Old": "\\d{11,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{8}", - "New": "[UNIX_TIME_S]", - "Order": 10, - "Distinct": false - }, - { - "Old": "\\d{8,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+(Z|\\+\\d\\d:\\d\\d)?", - "New": "[TIMESTAMP]", - "Order": 9, - "Distinct": false - }, - { - "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\dZ?", - "New": "[TIMESTAMP]", - "Order": 9, - "Distinct": false - }, - { - "Old": "[METASTORE_NAME]|[METASTORE_NAME]", - "New": "[METASTORE_NAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "", - "New": "", - "Order": 0, - "Distinct": false - }, - { - "Old": "\"protoLogs\": \\[.+\\]", - "New": "\"protoLogs\": [\"TELEMETRY\"]", - "Order": 0, - "Distinct": false - } - ] -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/out.requests.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\"\n }\n}\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/deployment.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "seq": 1, - "cli_version": "[DEV_VERSION]", - "timestamp": "[TIMESTAMP]", - "files": [ - { - "local_path": "output.txt", - "is_notebook": false - }, - { - "local_path": "repls.json", - "is_notebook": false - }, - { - "local_path": "script", - "is_notebook": false - }, - { - "local_path": "test.toml", - "is_notebook": false - }, - { - "local_path": "databricks.yml", - "is_notebook": false - }, - { - "local_path": "out.requests.txt", - "is_notebook": false - } - ], - "id": "[UUID]" - } -} -{ - "method": "POST", - "path": "/api/2.2/jobs/create", - "body": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "status": "OPERATION_STATUS_FAILED", - "error_message": "Invalid job configuration." - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", - "body": { - "name": "deployments/[UUID]/versions/1", - "completion_reason": "VERSION_COMPLETE_FAILURE" - } -} -{ - "method": "POST", - "path": "/telemetry-ext", - "body": { - "uploadTime": [UNIX_TIME_MILLIS], - "items": [], - "protoLogs": [ - "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":82,\"exit_code\":1},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"error_message\":\"cannot create resources.jobs.test_job: Invalid job configuration. (400 INVALID_PARAMETER_VALUE)\",\"resource_count\":1,\"resource_job_count\":1,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.miss\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":68},{\"key\":\"deploy.(statePush)\",\"value\":55},{\"key\":\"phases.Initialize\",\"value\":8},{\"key\":\"files.(upload)\",\"value\":4},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":3},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}],\"local_cache_measurements_ms\":[{\"key\":\"local.cache.compute_duration\",\"value\":0}]}}}}}" - ] - } -} diff --git a/acceptance/bundle/dms/deploy-error/out.test.toml b/acceptance/bundle/dms/deploy-error/out.test.toml deleted file mode 100644 index 6ce208a0484..00000000000 --- a/acceptance/bundle/dms/deploy-error/out.test.toml +++ /dev/null @@ -1,6 +0,0 @@ -Local = true -Cloud = false - -[EnvMatrix] - DATABRICKS_BUNDLE_ENGINE = ["direct"] - DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/deploy-error/script b/acceptance/bundle/dms/deploy-error/script index 4624ecc6ce7..28a0e4501f3 100644 --- a/acceptance/bundle/dms/deploy-error/script +++ b/acceptance/bundle/dms/deploy-error/script @@ -3,3 +3,4 @@ trace musterr $CLI bundle deploy # Print the metadata service requests to verify the failed operation is reported. trace print_requests.py --get //bundle ^//workspace-files ^//import-file +print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/deploy-error/test.toml b/acceptance/bundle/dms/deploy-error/test.toml index 9d7f2c13489..70b16ea757c 100644 --- a/acceptance/bundle/dms/deploy-error/test.toml +++ b/acceptance/bundle/dms/deploy-error/test.toml @@ -1,3 +1,4 @@ +Ignore = [".databricks"] EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["direct"] EnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] RecordRequests = true diff --git a/acceptance/bundle/dms/out.requests.txt b/acceptance/bundle/dms/out.requests.txt deleted file mode 100644 index f888ee56562..00000000000 --- a/acceptance/bundle/dms/out.requests.txt +++ /dev/null @@ -1,860 +0,0 @@ -{ - "method": "GET", - "path": "/.well-known/databricks-config" -} -{ - "method": "GET", - "path": "/api/2.0/preview/scim/v2/Me" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/deployment.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/resources.json", - "q": { - "overwrite": "true" - }, - "body": { - "deployment_id": "[UUID]" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "1" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/delete", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/artifacts/.internal", - "recursive": true - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/artifacts/.internal" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/sequential-deploys" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/release-lock-error" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/deploy-error" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/plan-and-summary" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources/test.toml", - "q": { - "overwrite": "true" - }, - "raw_body": "Ignore = [\".databricks\"]\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/release-lock-error/out.test.toml", - "q": { - "overwrite": "true" - }, - "raw_body": "Local = true\nCloud = false\n\n[EnvMatrix]\n DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\n DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources/out.requests.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: add-resources-test\\n\\nresources:\\n jobs:\\n job_a:\\n name: job-a\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"Ignore = [\\\".databricks\\\"]\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:38667\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:38667\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:38667\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with one job.\\ntrace $CLI bundle deploy\\n\\n# Delete local cache to force reading state from DMS.\\nrm -rf .databricks\\n\\n# Add a second job and deploy again.\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: add-resources-test\\n\\nresources:\\n jobs:\\n job_a:\\n name: job-a\\n job_b:\\n name: job-b\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Delete local cache again and run plan — should show no changes.\\nrm -rf .databricks\\ntrace $CLI bundle plan\\n\\n# Print metadata service requests. Should show:\\n# - Deploy 1: CREATE for job_a\\n# - Deploy 2: ListResources + CREATE for job_b (job_a is unchanged)\\n# - Plan: ListResources (no operations)\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n\\n# Clean up.\\nrm -rf .databricks\\n$CLI bundle destroy --auto-approve \\u003e /dev/null 2\\u003e\\u00261\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"job-a\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.job_a\"\n },\n \"body\": {\n \"resource_key\": \"jobs.job_a\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"job-a\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"add-resources-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"job_a\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][0],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":55,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":42},{\\\"key\\\":\\\"metadata.(upload)\\\",\\\"value\\\":29},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":8},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"2\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\\nDeploying resources...\\nDeployment complete!\\n\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with one job.\\ntrace $CLI bundle deploy\\n\\n# Delete local cache to force reading state from DMS.\\nrm -rf .databricks\\n\\n# Add a second job and deploy again.\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: add-resources-test\\n\\nresources:\\n jobs:\\n job_a:\\n name: job-a\\n job_b:\\n name: job-b\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Delete local cache again and run plan — should show no changes.\\nrm -rf .databricks\\ntrace $CLI bundle plan\\n\\n# Print metadata service requests. Should show:\\n# - Deploy 1: CREATE for job_a\\n# - Deploy 2: ListResources + CREATE for job_b (job_a is unchanged)\\n# - Plan: ListResources (no operations)\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n\\n# Clean up.\\nrm -rf .databricks\\n$CLI bundle destroy --auto-approve \\u003e /dev/null 2\\u003e\\u00261\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: add-resources-test\\n\\nresources:\\n jobs:\\n job_a:\\n name: job-a\\n job_b:\\n name: job-b\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"Ignore = [\\\".databricks\\\"]\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:38667\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:38667\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:38667\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/output.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"\\\\n\\\\u003e\\\\u003e\\\\u003e [CLI] bundle deploy\\\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/out.requests.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/.well-known/databricks-config\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/preview/scim/v2/Me\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"version_id\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"cli_version\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"version_type\\\\\\\": \\\\\\\"VERSION_TYPE_DEPLOY\\\\\\\",\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/delete\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\\\\\",\\\\n \\\\\\\"recursive\\\\\\\": true\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/databricks.yml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"bundle:\\\\n name: add-resources-test\\\\n\\\\nresources:\\\\n jobs:\\\\n job_a:\\\\n name: job-a\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/test.toml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"Ignore = [\\\\\\\".databricks\\\\\\\"]\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/repls.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": [\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\\\\\.terraformrc\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TF_CLI_CONFIG_FILE]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\\\",\\n \\\"New\\\": \\\"[TERRAFORM]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/libs/vendored_py_packages\\\",\\n \\\"New\\\": \\\"[VENDORED_PY_PACKAGES]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\\\\\.296\\\\\\\\.0-py3-none-any\\\\\\\\.whl\\\",\\n \\\"New\\\": \\\"[DATABRICKS_BUNDLES_WHEEL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\\\",\\n \\\"New\\\": \\\"[CLI]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\\\\\.293\\\\\\\\.0/databricks\\\",\\n \\\"New\\\": \\\"[CLI_293]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"New\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64\\\",\\n \\\"New\\\": \\\"[BUILD_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"0\\\\\\\\.0\\\\\\\\.0-dev(\\\\\\\\+[a-f0-9]{10,16})?\\\",\\n \\\"New\\\": \\\"[DEV_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"databricks-sdk-go/[0-9]+\\\\\\\\.[0-9]+\\\\\\\\.[0-9]+\\\",\\n \\\"New\\\": \\\"databricks-sdk-go/[SDK_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1\\\\\\\\.26\\\\\\\\.1\\\",\\n \\\"New\\\": \\\"[GO_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance\\\",\\n \\\"New\\\": \\\"[TESTROOT]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"dbapi[0-9a-f]+\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TOKEN]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"i3\\\\\\\\.xlarge\\\",\\n \\\"New\\\": \\\"[NODE_TYPE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"New\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]@databricks\\\\\\\\.com\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERID]\\\",\\n \\\"New\\\": \\\"[USERID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"https://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:38667\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"http://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:38667\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:38667\\\",\\n \\\"New\\\": \\\"[DATABRICKS_HOST]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\\\",\\n \\\"New\\\": \\\"[UUID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{20,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{17}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_NANOS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{17,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{14,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{11}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_MILLIS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{11,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{8}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_S]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{8,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d\\\\\\\\.\\\\\\\\d+(Z|\\\\\\\\+\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d)?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\dZ?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[METASTORE_NAME]|[METASTORE_NAME]\\\",\\n \\\"New\\\": \\\"[METASTORE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\",\\n \\\"New\\\": \\\"\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\"protoLogs\\\\\\\": \\\\\\\\[.+\\\\\\\\]\\\",\\n \\\"New\\\": \\\"\\\\\\\"protoLogs\\\\\\\": [\\\\\\\"TELEMETRY\\\\\\\"]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n }\\n ]\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files/script\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"errcode() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e' if it was previously set\\\\n set -e\\\\n if [ $exit_code -ne 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nExit code: $exit_code\\\\\\\\n\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\nmusterr() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e'\\\\n set -e\\\\n if [ $exit_code -eq 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nUnexpected success\\\\\\\\n\\\\\\\"\\\\n exit 1\\\\n fi\\\\n}\\\\n\\\\ntrace() {\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\n\\\\u003e\\\\u003e\\\\u003e %s\\\\\\\\n\\\\\\\" \\\\\\\"$*\\\\\\\"\\\\n\\\\n if [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; then\\\\n # If the first argument contains '=', collect all env vars\\\\n local env_vars=()\\\\n while [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; do\\\\n env_vars+=(\\\\\\\"$1\\\\\\\")\\\\n shift\\\\n done\\\\n # Export environment variables in a subshell and execute the command\\\\n (\\\\n export \\\\\\\"${env_vars[@]}\\\\\\\"\\\\n \\\\\\\"$@\\\\\\\"\\\\n )\\\\n else\\\\n # Execute the command normally\\\\n \\\\\\\"$@\\\\\\\"\\\\n fi\\\\n\\\\n return $?\\\\n}\\\\n\\\\ngit-repo-init() {\\\\n git init -qb main\\\\n git config core.autocrlf false\\\\n git config user.name \\\\\\\"Tester\\\\\\\"\\\\n git config user.email \\\\\\\"[USERNAME]\\\\\\\"\\\\n git config core.hooksPath no-hooks\\\\n git add databricks.yml\\\\n git commit -qm 'Add databricks.yml'\\\\n}\\\\n\\\\ntitle() {\\\\n local label=\\\\\\\"$1\\\\\\\"\\\\n printf \\\\\\\"\\\\\\\\n=== %b\\\\\\\" \\\\\\\"$label\\\\\\\"\\\\n}\\\\n\\\\nwithdir() {\\\\n local dir=\\\\\\\"$1\\\\\\\"\\\\n shift\\\\n local orig_dir=\\\\\\\"$(pwd)\\\\\\\"\\\\n cd \\\\\\\"$dir\\\\\\\" || return $?\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n cd \\\\\\\"$orig_dir\\\\\\\" || return $?\\\\n return $exit_code\\\\n}\\\\n\\\\nuuid() {\\\\n python3 -c 'import uuid; print(uuid.uuid4())'\\\\n}\\\\n\\\\nvenv_activate() {\\\\n if [[ \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"msys\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"cygwin\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"win32\\\\\\\" ]]; then\\\\n source .venv/Scripts/activate\\\\n else\\\\n source .venv/bin/activate\\\\n fi\\\\n}\\\\n\\\\nenvsubst() {\\\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\\\n # This is because the python interpreter is otherwise unable to find the python script\\\\n # when MSYS_NO_PATHCONV is enabled.\\\\n env -u MSYS_NO_PATHCONV envsubst.py\\\\n}\\\\n\\\\nprint_telemetry_bool_values() {\\\\n jq -r 'select(.path? == \\\\\\\"/telemetry-ext\\\\\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\\\\\"\\\\\\\\(.key) \\\\\\\\(.value)\\\\\\\") | .[]' out.requests.txt | sort\\\\n}\\\\n\\\\nsethome() {\\\\n local home=\\\\\\\"$1\\\\\\\"\\\\n mkdir -p \\\\\\\"$home\\\\\\\"\\\\n\\\\n # For macOS and Linux, use HOME.\\\\n export HOME=\\\\\\\"$home\\\\\\\"\\\\n\\\\n # For Windows, use USERPROFILE.\\\\n export USERPROFILE=\\\\\\\"$home\\\\\\\"\\\\n}\\\\n\\\\nas-test-sp() {\\\\n if [[ -z \\\\\\\"$TEST_SP_TOKEN\\\\\\\" ]]; then\\\\n echo \\\\\\\"Error: TEST_SP_TOKEN is not set.\\\\\\\" \\\\u003e\\\\u00262\\\\n return 1\\\\n fi\\\\n\\\\n DATABRICKS_TOKEN=\\\\\\\"$TEST_SP_TOKEN\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_SECRET=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_ID=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_AUTH_TYPE=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n \\\\\\\"$@\\\\\\\"\\\\n}\\\\n\\\\nreadplanarg() {\\\\n # Expands into \\\\\\\"--plan \\\\u003cfilename\\\\u003e\\\\\\\" based on READPLAN env var\\\\n # Use it with \\\\\\\"bundle deploy\\\\\\\" to configure two runs: once with saved plan and one without.\\\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\\\n if [[ -n \\\\\\\"$READPLAN\\\\\\\" ]]; then\\\\n printf -- \\\\\\\"--plan %s\\\\\\\" \\\\\\\"$1\\\\\\\"\\\\n else\\\\n printf \\\\\\\"\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\n(\\\\n# Deploy with one job.\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Delete local cache to force reading state from DMS.\\\\nrm -rf .databricks\\\\n\\\\n# Add a second job and deploy again.\\\\ncat \\\\u003e databricks.yml \\\\u003c\\\\u003c 'EOF'\\\\nbundle:\\\\n name: add-resources-test\\\\n\\\\nresources:\\\\n jobs:\\\\n job_a:\\\\n name: job-a\\\\n job_b:\\\\n name: job-b\\\\nEOF\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Delete local cache again and run plan — should show no changes.\\\\nrm -rf .databricks\\\\ntrace $CLI bundle plan\\\\n\\\\n# Print metadata service requests. Should show:\\\\n# - Deploy 1: CREATE for job_a\\\\n# - Deploy 2: ListResources + CREATE for job_b (job_a is unchanged)\\\\n# - Plan: ListResources (no operations)\\\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\\\n\\\\n# Clean up.\\\\nrm -rf .databricks\\\\n$CLI bundle destroy --auto-approve \\\\u003e /dev/null 2\\\\u003e\\\\u00261\\\\n)\\\\n\\\\nrm -fr .databricks .gitignore\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"seq\\\": 1,\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"timestamp\\\": \\\"[TIMESTAMP]\\\",\\n \\\"files\\\": [\\n {\\n \\\"local_path\\\": \\\"databricks.yml\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"out.requests.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"output.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"repls.json\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"script\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"test.toml\\\",\\n \\\"is_notebook\\\": false\\n }\\n ],\\n \\\"id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.2/jobs/create\\\",\\n \\\"body\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"job-a\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\\\",\\n \\\"q\\\": {\\n \\\"resource_key\\\": \\\"jobs.job_a\\\"\\n },\\n \\\"body\\\": {\\n \\\"resource_key\\\": \\\"jobs.job_a\\\",\\n \\\"action_type\\\": \\\"OPERATION_ACTION_TYPE_CREATE\\\",\\n \\\"state\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"job-a\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n },\\n \\\"resource_id\\\": \\\"[NUMID]\\\",\\n \\\"status\\\": \\\"OPERATION_STATUS_SUCCEEDED\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"config\\\": {\\n \\\"bundle\\\": {\\n \\\"name\\\": \\\"add-resources-test\\\",\\n \\\"target\\\": \\\"default\\\",\\n \\\"git\\\": {\\n \\\"bundle_root_path\\\": \\\".\\\"\\n }\\n },\\n \\\"workspace\\\": {\\n \\\"file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n },\\n \\\"resources\\\": {\\n \\\"jobs\\\": {\\n \\\"job_a\\\": {\\n \\\"id\\\": \\\"[NUMID]\\\",\\n \\\"relative_path\\\": \\\"databricks.yml\\\"\\n }\\n }\\n },\\n \\\"presets\\\": {\\n \\\"source_linked_deployment\\\": false\\n }\\n },\\n \\\"extra\\\": {}\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\\\",\\n \\\"body\\\": {\\n \\\"name\\\": \\\"deployments/[UUID]/versions/1\\\",\\n \\\"completion_reason\\\": \\\"VERSION_COMPLETE_SUCCESS\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/telemetry-ext\\\",\\n \\\"body\\\": {\\n \\\"uploadTime\\\": [UNIX_TIME_MILLIS][0],\\n \\\"items\\\": [],\\n \\\"protoLogs\\\": [\\n \\\"{\\\\\\\"frontend_log_event_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"entry\\\\\\\":{\\\\\\\"databricks_cli_log\\\\\\\":{\\\\\\\"execution_context\\\\\\\":{\\\\\\\"cmd_exec_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"version\\\\\\\":\\\\\\\"[DEV_VERSION]\\\\\\\",\\\\\\\"command\\\\\\\":\\\\\\\"bundle_deploy\\\\\\\",\\\\\\\"operating_system\\\\\\\":\\\\\\\"linux\\\\\\\",\\\\\\\"execution_time_ms\\\\\\\":55,\\\\\\\"exit_code\\\\\\\":0},\\\\\\\"bundle_deploy_event\\\\\\\":{\\\\\\\"bundle_uuid\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"deployment_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"resource_count\\\\\\\":1,\\\\\\\"resource_job_count\\\\\\\":1,\\\\\\\"resource_pipeline_count\\\\\\\":0,\\\\\\\"resource_model_count\\\\\\\":0,\\\\\\\"resource_experiment_count\\\\\\\":0,\\\\\\\"resource_model_serving_endpoint_count\\\\\\\":0,\\\\\\\"resource_registered_model_count\\\\\\\":0,\\\\\\\"resource_quality_monitor_count\\\\\\\":0,\\\\\\\"resource_schema_count\\\\\\\":0,\\\\\\\"resource_volume_count\\\\\\\":0,\\\\\\\"resource_cluster_count\\\\\\\":0,\\\\\\\"resource_dashboard_count\\\\\\\":0,\\\\\\\"resource_app_count\\\\\\\":0,\\\\\\\"resource_job_ids\\\\\\\":[\\\\\\\"[NUMID]\\\\\\\"],\\\\\\\"experimental\\\\\\\":{\\\\\\\"configuration_file_count\\\\\\\":1,\\\\\\\"variable_count\\\\\\\":0,\\\\\\\"complex_variable_count\\\\\\\":0,\\\\\\\"lookup_variable_count\\\\\\\":0,\\\\\\\"target_count\\\\\\\":1,\\\\\\\"bool_values\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.attempt\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.miss\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"experimental.use_legacy_run_as\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"run_as_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"presets_name_prefix_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"python_wheel_wrapper_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"skip_artifact_cleanup\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_serverless_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_job_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_interactive_compute\\\\\\\",\\\\\\\"value\\\\\\\":false}],\\\\\\\"bundle_mode\\\\\\\":\\\\\\\"TYPE_UNSPECIFIED\\\\\\\",\\\\\\\"workspace_artifact_path_type\\\\\\\":\\\\\\\"WORKSPACE_FILE_SYSTEM\\\\\\\",\\\\\\\"bundle_mutator_execution_time_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Deploy\\\\\\\",\\\\\\\"value\\\\\\\":42},{\\\\\\\"key\\\\\\\":\\\\\\\"metadata.(upload)\\\\\\\",\\\\\\\"value\\\\\\\":29},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Initialize\\\\\\\",\\\\\\\"value\\\\\\\":8},{\\\\\\\"key\\\\\\\":\\\\\\\"resourcemutator.(processStaticResources)\\\\\\\",\\\\\\\"value\\\\\\\":3},{\\\\\\\"key\\\\\\\":\\\\\\\"files.(upload)\\\\\\\",\\\\\\\"value\\\\\\\":3},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Build\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"validate.FastValidate\\\\\\\",\\\\\\\"value\\\\\\\":0}],\\\\\\\"local_cache_measurements_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.compute_duration\\\\\\\",\\\\\\\"value\\\\\\\":0}]}}}}}\\\"\\n ]\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/resources\\\",\\n \\\"q\\\": {\\n \\\"page_size\\\": \\\"1000\\\"\\n },\\n \\\"body\\\": null\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"2\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 2,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"job-b\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/2/operations\",\n \"q\": {\n \"resource_key\": \"jobs.job_b\"\n },\n \"body\": {\n \"resource_key\": \"jobs.job_b\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"job-b\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"add-resources-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"job_a\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n },\n \"job_b\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/2/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/2\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][1],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":29,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":2,\\\"resource_job_count\\\":2,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\",\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.hit\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":12},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":10},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":5},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"deploy.(statePull)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/script", - "q": { - "overwrite": "true" - }, - "raw_body": "errcode() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e' if it was previously set\n set -e\n if [ $exit_code -ne 0 ]; then\n \u003e\u00262 printf \"\\nExit code: $exit_code\\n\"\n fi\n}\n\nmusterr() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e'\n set -e\n if [ $exit_code -eq 0 ]; then\n \u003e\u00262 printf \"\\nUnexpected success\\n\"\n exit 1\n fi\n}\n\ntrace() {\n \u003e\u00262 printf \"\\n\u003e\u003e\u003e %s\\n\" \"$*\"\n\n if [[ \"$1\" == *\"=\"* ]]; then\n # If the first argument contains '=', collect all env vars\n local env_vars=()\n while [[ \"$1\" == *\"=\"* ]]; do\n env_vars+=(\"$1\")\n shift\n done\n # Export environment variables in a subshell and execute the command\n (\n export \"${env_vars[@]}\"\n \"$@\"\n )\n else\n # Execute the command normally\n \"$@\"\n fi\n\n return $?\n}\n\ngit-repo-init() {\n git init -qb main\n git config core.autocrlf false\n git config user.name \"Tester\"\n git config user.email \"[USERNAME]\"\n git config core.hooksPath no-hooks\n git add databricks.yml\n git commit -qm 'Add databricks.yml'\n}\n\ntitle() {\n local label=\"$1\"\n printf \"\\n=== %b\" \"$label\"\n}\n\nwithdir() {\n local dir=\"$1\"\n shift\n local orig_dir=\"$(pwd)\"\n cd \"$dir\" || return $?\n \"$@\"\n local exit_code=$?\n cd \"$orig_dir\" || return $?\n return $exit_code\n}\n\nuuid() {\n python3 -c 'import uuid; print(uuid.uuid4())'\n}\n\nvenv_activate() {\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"cygwin\" || \"$OSTYPE\" == \"win32\" ]]; then\n source .venv/Scripts/activate\n else\n source .venv/bin/activate\n fi\n}\n\nenvsubst() {\n # We need to disable MSYS_NO_PATHCONV when running the python script.\n # This is because the python interpreter is otherwise unable to find the python script\n # when MSYS_NO_PATHCONV is enabled.\n env -u MSYS_NO_PATHCONV envsubst.py\n}\n\nprint_telemetry_bool_values() {\n jq -r 'select(.path? == \"/telemetry-ext\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\"\\(.key) \\(.value)\") | .[]' out.requests.txt | sort\n}\n\nsethome() {\n local home=\"$1\"\n mkdir -p \"$home\"\n\n # For macOS and Linux, use HOME.\n export HOME=\"$home\"\n\n # For Windows, use USERPROFILE.\n export USERPROFILE=\"$home\"\n}\n\nas-test-sp() {\n if [[ -z \"$TEST_SP_TOKEN\" ]]; then\n echo \"Error: TEST_SP_TOKEN is not set.\" \u003e\u00262\n return 1\n fi\n\n DATABRICKS_TOKEN=\"$TEST_SP_TOKEN\" \\\n DATABRICKS_CLIENT_SECRET=\"\" \\\n DATABRICKS_CLIENT_ID=\"\" \\\n DATABRICKS_AUTH_TYPE=\"\" \\\n \"$@\"\n}\n\nreadplanarg() {\n # Expands into \"--plan \u003cfilename\u003e\" based on READPLAN env var\n # Use it with \"bundle deploy\" to configure two runs: once with saved plan and one without.\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\n if [[ -n \"$READPLAN\" ]]; then\n printf -- \"--plan %s\" \"$1\"\n else\n printf \"\"\n fi\n}\n\n(\n# Deploy with the metadata service enabled.\ntrace $CLI bundle deploy\n\n# Print all metadata service requests made during deploy.\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n\n# Destroy with the metadata service enabled.\ntrace $CLI bundle destroy --auto-approve\n\n# Print all metadata service requests made during destroy.\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n)\n\nrm -fr .databricks .gitignore\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/deploy-error/databricks.yml", - "q": { - "overwrite": "true" - }, - "raw_body": "bundle:\n name: metadata-service-error-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/plan-and-summary/out.requests.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy first to populate DMS state.\\ntrace $CLI bundle deploy\\n\\n# Plan should read state from DMS via ListResources.\\ntrace $CLI bundle plan\\n\\n# Summary should show the deployment ID and read state from DMS.\\ntrace $CLI bundle summary\\n\\n# Print metadata service requests from plan and summary.\\n# Both should include ListResources calls.\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n\\n# Clean up.\\n$CLI bundle destroy --auto-approve \\u003e /dev/null 2\\u003e\\u00261\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: plan-summary-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:40907\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:40907\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:40907\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.test_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.test_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"plan-summary-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"test_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":60,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":46},{\\\"key\\\":\\\"deploy.(statePush)\\\",\\\"value\\\":33},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":8},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"validate.(required)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/release-lock-error/out.requests.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"fail-complete\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"fail-complete\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"fail-complete\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"fail-complete\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:43355\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:43355\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:43355\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with the metadata service enabled.\\n# The target name \\\"fail-complete\\\" triggers a simulated error on the\\n# CompleteVersion endpoint (release lock), so deploy should warn about\\n# the failed lock release.\\ntrace $CLI bundle deploy\\n\\n# Print the metadata service requests to verify the lock release was attempted.\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: dms-release-lock-error\\n\\ntargets:\\n fail-complete:\\n default: true\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"# Override target to \\\"fail-complete\\\" which makes the test server's\\n# CompleteVersion endpoint return an error, simulating a release failure.\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.test_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.test_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"dms-release-lock-error\",\n \"target\": \"fail-complete\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"test_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":56,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":41},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":8},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":4},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"deploy.(statePush)\\\",\\\"value\\\":2},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/out.requests.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/sequential-deploys\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/release-lock-error\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/deploy-error\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/plan-and-summary\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"Ignore = [\\\".databricks\\\"]\\n\"\n}\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/deploy-error/out.requests.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with the metadata service enabled, expecting a resource creation failure.\\ntrace musterr $CLI bundle deploy\\n\\n# Print the metadata service requests to verify the failed operation is reported.\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:36067\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:36067\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:36067\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"EnvMatrix.DATABRICKS_BUNDLE_ENGINE = [\\\"direct\\\"]\\nEnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = [\\\"true\\\"]\\nRecordRequests = true\\n\\n[[Server]]\\nPattern = \\\"POST /api/2.2/jobs/create\\\"\\nResponse.StatusCode = 400\\nResponse.Body = '{\\\"error_code\\\": \\\"INVALID_PARAMETER_VALUE\\\", \\\"message\\\": \\\"Invalid job configuration.\\\"}'\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: metadata-service-error-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e musterr [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.test_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.test_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"status\": \"OPERATION_STATUS_FAILED\",\n \"error_message\": \"Invalid job configuration.\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_FAILURE\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":55,\\\"exit_code\\\":1},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"error_message\\\":\\\"cannot create resources.jobs.test_job: Invalid job configuration. (400 INVALID_PARAMETER_VALUE)\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":40},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":9},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":4},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"validate.(required)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/plan-and-summary/out.test.toml", - "q": { - "overwrite": "true" - }, - "raw_body": "Local = true\nCloud = false\n\n[EnvMatrix]\n DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\n DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/deploy-error/test.toml", - "q": { - "overwrite": "true" - }, - "raw_body": "EnvMatrix.DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\nEnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\nRecordRequests = true\n\n[[Server]]\nPattern = \"POST /api/2.2/jobs/create\"\nResponse.StatusCode = 400\nResponse.Body = '{\"error_code\": \"INVALID_PARAMETER_VALUE\", \"message\": \"Invalid job configuration.\"}'\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/deploy-error/output.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "\n\u003e\u003e\u003e musterr [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/files...\nDeploying resources...\nError: cannot create resources.jobs.test_job: Invalid job configuration. (400 INVALID_PARAMETER_VALUE)\n\nEndpoint: POST [DATABRICKS_URL]/api/2.2/jobs/create\nHTTP Status: 400 Bad Request\nAPI error_code: INVALID_PARAMETER_VALUE\nAPI message: Invalid job configuration.\n\n\n\u003e\u003e\u003e print_requests.py --get //bundle ^//workspace-files ^//import-file\nTraceback (most recent call last):\n File \"[TESTROOT]/bin/print_requests.py\", line 197, in \u003cmodule\u003e\n main()\n File \"[TESTROOT]/bin/print_requests.py\", line 178, in main\n filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort)\n File \"[TESTROOT]/bin/print_requests.py\", line 114, in filter_requests\n positive_filters.append(f.removeprefix(ADD_PREFIX))\nAttributeError: 'str' object has no attribute 'removeprefix'\n\nExit code: 1\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/sequential-deploys/out.test.toml", - "q": { - "overwrite": "true" - }, - "raw_body": "Local = true\nCloud = false\n\n[EnvMatrix]\n DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\n DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/sequential-deploys/databricks.yml", - "q": { - "overwrite": "true" - }, - "raw_body": "bundle:\n name: sequential-deploys-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/databricks.yml", - "q": { - "overwrite": "true" - }, - "raw_body": "bundle:\n name: metadata-service-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/output.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files...\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/release-lock-error/test.toml", - "q": { - "overwrite": "true" - }, - "raw_body": "# Override target to \"fail-complete\" which makes the test server's\n# CompleteVersion endpoint return an error, simulating a release failure.\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/deploy-error/out.test.toml", - "q": { - "overwrite": "true" - }, - "raw_body": "Local = true\nCloud = false\n\n[EnvMatrix]\n DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\n DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/release-lock-error/output.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files...\nDeploying resources...\nDeployment complete!\nWarn: Failed to release deployment lock: simulated complete version failure\n\n\u003e\u003e\u003e print_requests.py --get //bundle ^//workspace-files ^//import-file\nTraceback (most recent call last):\n File \"[TESTROOT]/bin/print_requests.py\", line 197, in \u003cmodule\u003e\n main()\n File \"[TESTROOT]/bin/print_requests.py\", line 178, in main\n filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort)\n File \"[TESTROOT]/bin/print_requests.py\", line 114, in filter_requests\n positive_filters.append(f.removeprefix(ADD_PREFIX))\nAttributeError: 'str' object has no attribute 'removeprefix'\n\nExit code: 1\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/repls.json", - "q": { - "overwrite": "true" - }, - "body": [ - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/\\.terraformrc", - "New": "[DATABRICKS_TF_CLI_CONFIG_FILE]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/terraform", - "New": "[TERRAFORM]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/libs/vendored_py_packages", - "New": "[VENDORED_PY_PACKAGES]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\.296\\.0-py3-none-any\\.whl", - "New": "[DATABRICKS_BUNDLES_WHEEL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks", - "New": "[CLI]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/0\\.293\\.0/databricks", - "New": "[CLI_293]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_DEFAULT_WAREHOUSE_ID]", - "New": "[TEST_DEFAULT_WAREHOUSE_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_DEFAULT_CLUSTER_ID]", - "New": "[TEST_DEFAULT_CLUSTER_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_INSTANCE_POOL_ID]", - "New": "[TEST_INSTANCE_POOL_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64", - "New": "[BUILD_DIR]", - "Order": 0, - "Distinct": false - }, - { - "Old": "0\\.0\\.0-dev(\\+[a-f0-9]{10,16})?", - "New": "[DEV_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "databricks-sdk-go/[0-9]+\\.[0-9]+\\.[0-9]+", - "New": "databricks-sdk-go/[SDK_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "1\\.26\\.1", - "New": "[GO_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance", - "New": "[TESTROOT]", - "Order": 0, - "Distinct": false - }, - { - "Old": "dbapi[0-9a-f]+", - "New": "[DATABRICKS_TOKEN]", - "Order": 0, - "Distinct": false - }, - { - "Old": "i3\\.xlarge", - "New": "[NODE_TYPE_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[UNIQUE_NAME]", - "New": "[UNIQUE_NAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_TMP_DIR]", - "New": "[TEST_TMP_DIR]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_TMP_DIR]_PARENT", - "New": "[TEST_TMP_DIR]_PARENT", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERNAME]@databricks\\.com", - "New": "[USERNAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERNAME]", - "New": "[USERNAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERID]", - "New": "[USERID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "https://127\\.0\\.0\\.1:39203", - "New": "[DATABRICKS_URL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "http://127\\.0\\.0\\.1:39203", - "New": "[DATABRICKS_URL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "127\\.0\\.0\\.1:39203", - "New": "[DATABRICKS_HOST]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", - "New": "[UUID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "\\d{20,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{17}", - "New": "[UNIX_TIME_NANOS]", - "Order": 10, - "Distinct": true - }, - { - "Old": "\\d{17,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "\\d{14,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{11}", - "New": "[UNIX_TIME_MILLIS]", - "Order": 10, - "Distinct": true - }, - { - "Old": "\\d{11,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{8}", - "New": "[UNIX_TIME_S]", - "Order": 10, - "Distinct": false - }, - { - "Old": "\\d{8,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+(Z|\\+\\d\\d:\\d\\d)?", - "New": "[TIMESTAMP]", - "Order": 9, - "Distinct": false - }, - { - "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\dZ?", - "New": "[TIMESTAMP]", - "Order": 9, - "Distinct": false - }, - { - "Old": "[METASTORE_NAME]|[METASTORE_NAME]", - "New": "[METASTORE_NAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "", - "New": "", - "Order": 0, - "Distinct": false - }, - { - "Old": "\"protoLogs\": \\[.+\\]", - "New": "\"protoLogs\": [\"TELEMETRY\"]", - "Order": 0, - "Distinct": false - } - ] -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/plan-and-summary/output.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle plan\nPlan: 0 to add, 0 to change, 0 to delete, 1 unchanged\n\n\u003e\u003e\u003e [CLI] bundle summary\nName: plan-summary-test\nTarget: default\nWorkspace:\n User: [USERNAME]\n Path: /Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default\nResources:\n Jobs:\n test_job:\n Name: test-job\n URL: [DATABRICKS_URL]/jobs/[NUMID]?o=[NUMID]\n\n\u003e\u003e\u003e print_requests.py --get //bundle ^//workspace-files ^//import-file\nTraceback (most recent call last):\n File \"[TESTROOT]/bin/print_requests.py\", line 197, in \u003cmodule\u003e\n main()\n File \"[TESTROOT]/bin/print_requests.py\", line 178, in main\n filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort)\n File \"[TESTROOT]/bin/print_requests.py\", line 114, in filter_requests\n positive_filters.append(f.removeprefix(ADD_PREFIX))\nAttributeError: 'str' object has no attribute 'removeprefix'\n\nExit code: 1\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources/out.test.toml", - "q": { - "overwrite": "true" - }, - "raw_body": "Local = true\nCloud = false\n\n[EnvMatrix]\n DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\n DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources/output.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle plan\nPlan: 0 to add, 0 to change, 0 to delete, 2 unchanged\n\n\u003e\u003e\u003e print_requests.py --get //bundle ^//workspace-files ^//import-file\nTraceback (most recent call last):\n File \"[TESTROOT]/bin/print_requests.py\", line 197, in \u003cmodule\u003e\n main()\n File \"[TESTROOT]/bin/print_requests.py\", line 172, in main\n data = fobj.read()\n File \"/usr/lib/python3.6/encodings/ascii.py\", line 26, in decode\n return codecs.ascii_decode(input, self.errors)[0]\nUnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 16677: ordinal not in range(128)\n\nExit code: 1\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/sequential-deploys/test.toml", - "q": { - "overwrite": "true" - }, - "raw_body": "Ignore = [\".databricks\"]\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/release-lock-error/databricks.yml", - "q": { - "overwrite": "true" - }, - "raw_body": "bundle:\n name: dms-release-lock-error\n\ntargets:\n fail-complete:\n default: true\n\nresources:\n jobs:\n test_job:\n name: test-job\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/test.toml", - "q": { - "overwrite": "true" - }, - "raw_body": "Badness = \"Uses local test server; enable on cloud once the deployment metadata service is in production\"\nEnvMatrix.DATABRICKS_BUNDLE_ENGINE = [\"direct\"]\nEnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = [\"true\"]\nRecordRequests = true\n\n# Stabilize flaky telemetry protoLogs (execution times and key order vary).\n[[Repls]]\nOld = '\"protoLogs\": \\[.+\\]'\nNew = '\"protoLogs\": [\"TELEMETRY\"]'\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/plan-and-summary/databricks.yml", - "q": { - "overwrite": "true" - }, - "raw_body": "bundle:\n name: plan-summary-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/sequential-deploys/out.requests.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"Ignore = [\\\".databricks\\\"]\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:40041\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:40041\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:40041\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"Ignore = [\\\\\\\".databricks\\\\\\\"]\\\\n\\\"\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with one job.\\ntrace $CLI bundle deploy\\n\\n# Add a second job and redeploy.\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n new_job:\\n name: new-job\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Remove the first job and redeploy (should delete test_job).\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n new_job:\\n name: new-job\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Print metadata service requests across all three deploys.\\n# Version 1: CREATE test_job\\n# Version 2: CREATE new_job (test_job unchanged)\\n# Version 3: DELETE test_job (new_job unchanged)\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.test_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.test_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"sequential-deploys-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"test_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][0],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":56,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":42},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":8},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"mutator.(selectDefaultTarget)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.(enum)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"2\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\nDeploying resources...\\nDeployment complete!\\n\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n new_job:\\n name: new-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"Ignore = [\\\\\\\".databricks\\\\\\\"]\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"bundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n test_job:\\\\n name: test-job\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": [\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\\\\\.terraformrc\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TF_CLI_CONFIG_FILE]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\\\",\\n \\\"New\\\": \\\"[TERRAFORM]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/libs/vendored_py_packages\\\",\\n \\\"New\\\": \\\"[VENDORED_PY_PACKAGES]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\\\\\.296\\\\\\\\.0-py3-none-any\\\\\\\\.whl\\\",\\n \\\"New\\\": \\\"[DATABRICKS_BUNDLES_WHEEL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\\\",\\n \\\"New\\\": \\\"[CLI]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\\\\\.293\\\\\\\\.0/databricks\\\",\\n \\\"New\\\": \\\"[CLI_293]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"New\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64\\\",\\n \\\"New\\\": \\\"[BUILD_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"0\\\\\\\\.0\\\\\\\\.0-dev(\\\\\\\\+[a-f0-9]{10,16})?\\\",\\n \\\"New\\\": \\\"[DEV_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"databricks-sdk-go/[0-9]+\\\\\\\\.[0-9]+\\\\\\\\.[0-9]+\\\",\\n \\\"New\\\": \\\"databricks-sdk-go/[SDK_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1\\\\\\\\.26\\\\\\\\.1\\\",\\n \\\"New\\\": \\\"[GO_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance\\\",\\n \\\"New\\\": \\\"[TESTROOT]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"dbapi[0-9a-f]+\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TOKEN]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"i3\\\\\\\\.xlarge\\\",\\n \\\"New\\\": \\\"[NODE_TYPE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"New\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]@databricks\\\\\\\\.com\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERID]\\\",\\n \\\"New\\\": \\\"[USERID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"https://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:40041\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"http://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:40041\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:40041\\\",\\n \\\"New\\\": \\\"[DATABRICKS_HOST]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\\\",\\n \\\"New\\\": \\\"[UUID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{20,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{17}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_NANOS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{17,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{14,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{11}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_MILLIS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{11,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{8}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_S]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{8,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d\\\\\\\\.\\\\\\\\d+(Z|\\\\\\\\+\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d)?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\dZ?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[METASTORE_NAME]|[METASTORE_NAME]\\\",\\n \\\"New\\\": \\\"[METASTORE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\",\\n \\\"New\\\": \\\"\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\"protoLogs\\\\\\\": \\\\\\\\[.+\\\\\\\\]\\\",\\n \\\"New\\\": \\\"\\\\\\\"protoLogs\\\\\\\": [\\\\\\\"TELEMETRY\\\\\\\"]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n }\\n ]\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/.well-known/databricks-config\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/preview/scim/v2/Me\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"version_id\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"cli_version\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"version_type\\\\\\\": \\\\\\\"VERSION_TYPE_DEPLOY\\\\\\\",\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/delete\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\",\\\\n \\\\\\\"recursive\\\\\\\": true\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"raw_body\\\\\\\": \\\\\\\"Ignore = [\\\\\\\\\\\\\\\".databricks\\\\\\\\\\\\\\\"]\\\\\\\\n\\\\\\\"\\\\n}\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"\\\\n\\\\u003e\\\\u003e\\\\u003e [CLI] bundle deploy\\\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"errcode() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e' if it was previously set\\\\n set -e\\\\n if [ $exit_code -ne 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nExit code: $exit_code\\\\\\\\n\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\nmusterr() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e'\\\\n set -e\\\\n if [ $exit_code -eq 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nUnexpected success\\\\\\\\n\\\\\\\"\\\\n exit 1\\\\n fi\\\\n}\\\\n\\\\ntrace() {\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\n\\\\u003e\\\\u003e\\\\u003e %s\\\\\\\\n\\\\\\\" \\\\\\\"$*\\\\\\\"\\\\n\\\\n if [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; then\\\\n # If the first argument contains '=', collect all env vars\\\\n local env_vars=()\\\\n while [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; do\\\\n env_vars+=(\\\\\\\"$1\\\\\\\")\\\\n shift\\\\n done\\\\n # Export environment variables in a subshell and execute the command\\\\n (\\\\n export \\\\\\\"${env_vars[@]}\\\\\\\"\\\\n \\\\\\\"$@\\\\\\\"\\\\n )\\\\n else\\\\n # Execute the command normally\\\\n \\\\\\\"$@\\\\\\\"\\\\n fi\\\\n\\\\n return $?\\\\n}\\\\n\\\\ngit-repo-init() {\\\\n git init -qb main\\\\n git config core.autocrlf false\\\\n git config user.name \\\\\\\"Tester\\\\\\\"\\\\n git config user.email \\\\\\\"[USERNAME]\\\\\\\"\\\\n git config core.hooksPath no-hooks\\\\n git add databricks.yml\\\\n git commit -qm 'Add databricks.yml'\\\\n}\\\\n\\\\ntitle() {\\\\n local label=\\\\\\\"$1\\\\\\\"\\\\n printf \\\\\\\"\\\\\\\\n=== %b\\\\\\\" \\\\\\\"$label\\\\\\\"\\\\n}\\\\n\\\\nwithdir() {\\\\n local dir=\\\\\\\"$1\\\\\\\"\\\\n shift\\\\n local orig_dir=\\\\\\\"$(pwd)\\\\\\\"\\\\n cd \\\\\\\"$dir\\\\\\\" || return $?\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n cd \\\\\\\"$orig_dir\\\\\\\" || return $?\\\\n return $exit_code\\\\n}\\\\n\\\\nuuid() {\\\\n python3 -c 'import uuid; print(uuid.uuid4())'\\\\n}\\\\n\\\\nvenv_activate() {\\\\n if [[ \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"msys\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"cygwin\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"win32\\\\\\\" ]]; then\\\\n source .venv/Scripts/activate\\\\n else\\\\n source .venv/bin/activate\\\\n fi\\\\n}\\\\n\\\\nenvsubst() {\\\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\\\n # This is because the python interpreter is otherwise unable to find the python script\\\\n # when MSYS_NO_PATHCONV is enabled.\\\\n env -u MSYS_NO_PATHCONV envsubst.py\\\\n}\\\\n\\\\nprint_telemetry_bool_values() {\\\\n jq -r 'select(.path? == \\\\\\\"/telemetry-ext\\\\\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\\\\\"\\\\\\\\(.key) \\\\\\\\(.value)\\\\\\\") | .[]' out.requests.txt | sort\\\\n}\\\\n\\\\nsethome() {\\\\n local home=\\\\\\\"$1\\\\\\\"\\\\n mkdir -p \\\\\\\"$home\\\\\\\"\\\\n\\\\n # For macOS and Linux, use HOME.\\\\n export HOME=\\\\\\\"$home\\\\\\\"\\\\n\\\\n # For Windows, use USERPROFILE.\\\\n export USERPROFILE=\\\\\\\"$home\\\\\\\"\\\\n}\\\\n\\\\nas-test-sp() {\\\\n if [[ -z \\\\\\\"$TEST_SP_TOKEN\\\\\\\" ]]; then\\\\n echo \\\\\\\"Error: TEST_SP_TOKEN is not set.\\\\\\\" \\\\u003e\\\\u00262\\\\n return 1\\\\n fi\\\\n\\\\n DATABRICKS_TOKEN=\\\\\\\"$TEST_SP_TOKEN\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_SECRET=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_ID=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_AUTH_TYPE=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n \\\\\\\"$@\\\\\\\"\\\\n}\\\\n\\\\nreadplanarg() {\\\\n # Expands into \\\\\\\"--plan \\\\u003cfilename\\\\u003e\\\\\\\" based on READPLAN env var\\\\n # Use it with \\\\\\\"bundle deploy\\\\\\\" to configure two runs: once with saved plan and one without.\\\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\\\n if [[ -n \\\\\\\"$READPLAN\\\\\\\" ]]; then\\\\n printf -- \\\\\\\"--plan %s\\\\\\\" \\\\\\\"$1\\\\\\\"\\\\n else\\\\n printf \\\\\\\"\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\n(\\\\n# Deploy with one job.\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Add a second job and redeploy.\\\\ncat \\\\u003e databricks.yml \\\\u003c\\\\u003c 'EOF'\\\\nbundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n test_job:\\\\n name: test-job\\\\n new_job:\\\\n name: new-job\\\\nEOF\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Remove the first job and redeploy (should delete test_job).\\\\ncat \\\\u003e databricks.yml \\\\u003c\\\\u003c 'EOF'\\\\nbundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n new_job:\\\\n name: new-job\\\\nEOF\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Print metadata service requests across all three deploys.\\\\n# Version 1: CREATE test_job\\\\n# Version 2: CREATE new_job (test_job unchanged)\\\\n# Version 3: DELETE test_job (new_job unchanged)\\\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\\\n)\\\\n\\\\nrm -fr .databricks .gitignore\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"seq\\\": 1,\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"timestamp\\\": \\\"[TIMESTAMP]\\\",\\n \\\"files\\\": [\\n {\\n \\\"local_path\\\": \\\"out.requests.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"output.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"repls.json\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"script\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"test.toml\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"databricks.yml\\\",\\n \\\"is_notebook\\\": false\\n }\\n ],\\n \\\"id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.2/jobs/create\\\",\\n \\\"body\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"test-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\\\",\\n \\\"q\\\": {\\n \\\"resource_key\\\": \\\"jobs.test_job\\\"\\n },\\n \\\"body\\\": {\\n \\\"resource_key\\\": \\\"jobs.test_job\\\",\\n \\\"action_type\\\": \\\"OPERATION_ACTION_TYPE_CREATE\\\",\\n \\\"state\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"test-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n },\\n \\\"resource_id\\\": \\\"[NUMID]\\\",\\n \\\"status\\\": \\\"OPERATION_STATUS_SUCCEEDED\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"config\\\": {\\n \\\"bundle\\\": {\\n \\\"name\\\": \\\"sequential-deploys-test\\\",\\n \\\"target\\\": \\\"default\\\",\\n \\\"git\\\": {\\n \\\"bundle_root_path\\\": \\\".\\\"\\n }\\n },\\n \\\"workspace\\\": {\\n \\\"file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n },\\n \\\"resources\\\": {\\n \\\"jobs\\\": {\\n \\\"test_job\\\": {\\n \\\"id\\\": \\\"[NUMID]\\\",\\n \\\"relative_path\\\": \\\"databricks.yml\\\"\\n }\\n }\\n },\\n \\\"presets\\\": {\\n \\\"source_linked_deployment\\\": false\\n }\\n },\\n \\\"extra\\\": {}\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\\\",\\n \\\"body\\\": {\\n \\\"name\\\": \\\"deployments/[UUID]/versions/1\\\",\\n \\\"completion_reason\\\": \\\"VERSION_COMPLETE_SUCCESS\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/telemetry-ext\\\",\\n \\\"body\\\": {\\n \\\"uploadTime\\\": [UNIX_TIME_MILLIS][0],\\n \\\"items\\\": [],\\n \\\"protoLogs\\\": [\\n \\\"{\\\\\\\"frontend_log_event_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"entry\\\\\\\":{\\\\\\\"databricks_cli_log\\\\\\\":{\\\\\\\"execution_context\\\\\\\":{\\\\\\\"cmd_exec_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"version\\\\\\\":\\\\\\\"[DEV_VERSION]\\\\\\\",\\\\\\\"command\\\\\\\":\\\\\\\"bundle_deploy\\\\\\\",\\\\\\\"operating_system\\\\\\\":\\\\\\\"linux\\\\\\\",\\\\\\\"execution_time_ms\\\\\\\":56,\\\\\\\"exit_code\\\\\\\":0},\\\\\\\"bundle_deploy_event\\\\\\\":{\\\\\\\"bundle_uuid\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"deployment_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"resource_count\\\\\\\":1,\\\\\\\"resource_job_count\\\\\\\":1,\\\\\\\"resource_pipeline_count\\\\\\\":0,\\\\\\\"resource_model_count\\\\\\\":0,\\\\\\\"resource_experiment_count\\\\\\\":0,\\\\\\\"resource_model_serving_endpoint_count\\\\\\\":0,\\\\\\\"resource_registered_model_count\\\\\\\":0,\\\\\\\"resource_quality_monitor_count\\\\\\\":0,\\\\\\\"resource_schema_count\\\\\\\":0,\\\\\\\"resource_volume_count\\\\\\\":0,\\\\\\\"resource_cluster_count\\\\\\\":0,\\\\\\\"resource_dashboard_count\\\\\\\":0,\\\\\\\"resource_app_count\\\\\\\":0,\\\\\\\"resource_job_ids\\\\\\\":[\\\\\\\"[NUMID]\\\\\\\"],\\\\\\\"experimental\\\\\\\":{\\\\\\\"configuration_file_count\\\\\\\":1,\\\\\\\"variable_count\\\\\\\":0,\\\\\\\"complex_variable_count\\\\\\\":0,\\\\\\\"lookup_variable_count\\\\\\\":0,\\\\\\\"target_count\\\\\\\":1,\\\\\\\"bool_values\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.attempt\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.miss\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"experimental.use_legacy_run_as\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"run_as_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"presets_name_prefix_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"python_wheel_wrapper_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"skip_artifact_cleanup\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_serverless_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_job_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_interactive_compute\\\\\\\",\\\\\\\"value\\\\\\\":false}],\\\\\\\"bundle_mode\\\\\\\":\\\\\\\"TYPE_UNSPECIFIED\\\\\\\",\\\\\\\"workspace_artifact_path_type\\\\\\\":\\\\\\\"WORKSPACE_FILE_SYSTEM\\\\\\\",\\\\\\\"bundle_mutator_execution_time_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Deploy\\\\\\\",\\\\\\\"value\\\\\\\":42},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Initialize\\\\\\\",\\\\\\\"value\\\\\\\":8},{\\\\\\\"key\\\\\\\":\\\\\\\"resourcemutator.(processStaticResources)\\\\\\\",\\\\\\\"value\\\\\\\":3},{\\\\\\\"key\\\\\\\":\\\\\\\"files.(upload)\\\\\\\",\\\\\\\"value\\\\\\\":3},{\\\\\\\"key\\\\\\\":\\\\\\\"mutator.(selectDefaultTarget)\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"validate.(enum)\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Build\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"validate.FastValidate\\\\\\\",\\\\\\\"value\\\\\\\":0}],\\\\\\\"local_cache_measurements_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.compute_duration\\\\\\\",\\\\\\\"value\\\\\\\":0}]}}}}}\\\"\\n ]\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/resources\\\",\\n \\\"q\\\": {\\n \\\"page_size\\\": \\\"1000\\\"\\n },\\n \\\"body\\\": null\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"2\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 2,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"new-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/2/operations\",\n \"q\": {\n \"resource_key\": \"jobs.new_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.new_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"new-job\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"sequential-deploys-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"new_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n },\n \"test_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/2/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/2\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][1],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":29,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":2,\\\"resource_job_count\\\":2,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\",\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.hit\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":12},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":10},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":5},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"3\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\nDeploying resources...\\nDeployment complete!\\n\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\nDeploying resources...\\nDeployment complete!\\n\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n new_job:\\n name: new-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"Ignore = [\\\\\\\".databricks\\\\\\\"]\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"bundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n test_job:\\\\n name: test-job\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": [\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\\\\\.terraformrc\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TF_CLI_CONFIG_FILE]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\\\",\\n \\\"New\\\": \\\"[TERRAFORM]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/libs/vendored_py_packages\\\",\\n \\\"New\\\": \\\"[VENDORED_PY_PACKAGES]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\\\\\.296\\\\\\\\.0-py3-none-any\\\\\\\\.whl\\\",\\n \\\"New\\\": \\\"[DATABRICKS_BUNDLES_WHEEL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\\\",\\n \\\"New\\\": \\\"[CLI]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\\\\\.293\\\\\\\\.0/databricks\\\",\\n \\\"New\\\": \\\"[CLI_293]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"New\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64\\\",\\n \\\"New\\\": \\\"[BUILD_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"0\\\\\\\\.0\\\\\\\\.0-dev(\\\\\\\\+[a-f0-9]{10,16})?\\\",\\n \\\"New\\\": \\\"[DEV_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"databricks-sdk-go/[0-9]+\\\\\\\\.[0-9]+\\\\\\\\.[0-9]+\\\",\\n \\\"New\\\": \\\"databricks-sdk-go/[SDK_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1\\\\\\\\.26\\\\\\\\.1\\\",\\n \\\"New\\\": \\\"[GO_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance\\\",\\n \\\"New\\\": \\\"[TESTROOT]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"dbapi[0-9a-f]+\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TOKEN]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"i3\\\\\\\\.xlarge\\\",\\n \\\"New\\\": \\\"[NODE_TYPE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"New\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]@databricks\\\\\\\\.com\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERID]\\\",\\n \\\"New\\\": \\\"[USERID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"https://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:40041\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"http://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:40041\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:40041\\\",\\n \\\"New\\\": \\\"[DATABRICKS_HOST]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\\\",\\n \\\"New\\\": \\\"[UUID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{20,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{17}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_NANOS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{17,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{14,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{11}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_MILLIS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{11,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{8}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_S]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{8,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d\\\\\\\\.\\\\\\\\d+(Z|\\\\\\\\+\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d)?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\dZ?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[METASTORE_NAME]|[METASTORE_NAME]\\\",\\n \\\"New\\\": \\\"[METASTORE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\",\\n \\\"New\\\": \\\"\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\"protoLogs\\\\\\\": \\\\\\\\[.+\\\\\\\\]\\\",\\n \\\"New\\\": \\\"\\\\\\\"protoLogs\\\\\\\": [\\\\\\\"TELEMETRY\\\\\\\"]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n }\\n ]\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/.well-known/databricks-config\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/preview/scim/v2/Me\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"version_id\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"cli_version\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"version_type\\\\\\\": \\\\\\\"VERSION_TYPE_DEPLOY\\\\\\\",\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/delete\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\",\\\\n \\\\\\\"recursive\\\\\\\": true\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"raw_body\\\\\\\": \\\\\\\"Ignore = [\\\\\\\\\\\\\\\".databricks\\\\\\\\\\\\\\\"]\\\\\\\\n\\\\\\\"\\\\n}\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"\\\\n\\\\u003e\\\\u003e\\\\u003e [CLI] bundle deploy\\\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"errcode() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e' if it was previously set\\\\n set -e\\\\n if [ $exit_code -ne 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nExit code: $exit_code\\\\\\\\n\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\nmusterr() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e'\\\\n set -e\\\\n if [ $exit_code -eq 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nUnexpected success\\\\\\\\n\\\\\\\"\\\\n exit 1\\\\n fi\\\\n}\\\\n\\\\ntrace() {\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\n\\\\u003e\\\\u003e\\\\u003e %s\\\\\\\\n\\\\\\\" \\\\\\\"$*\\\\\\\"\\\\n\\\\n if [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; then\\\\n # If the first argument contains '=', collect all env vars\\\\n local env_vars=()\\\\n while [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; do\\\\n env_vars+=(\\\\\\\"$1\\\\\\\")\\\\n shift\\\\n done\\\\n # Export environment variables in a subshell and execute the command\\\\n (\\\\n export \\\\\\\"${env_vars[@]}\\\\\\\"\\\\n \\\\\\\"$@\\\\\\\"\\\\n )\\\\n else\\\\n # Execute the command normally\\\\n \\\\\\\"$@\\\\\\\"\\\\n fi\\\\n\\\\n return $?\\\\n}\\\\n\\\\ngit-repo-init() {\\\\n git init -qb main\\\\n git config core.autocrlf false\\\\n git config user.name \\\\\\\"Tester\\\\\\\"\\\\n git config user.email \\\\\\\"[USERNAME]\\\\\\\"\\\\n git config core.hooksPath no-hooks\\\\n git add databricks.yml\\\\n git commit -qm 'Add databricks.yml'\\\\n}\\\\n\\\\ntitle() {\\\\n local label=\\\\\\\"$1\\\\\\\"\\\\n printf \\\\\\\"\\\\\\\\n=== %b\\\\\\\" \\\\\\\"$label\\\\\\\"\\\\n}\\\\n\\\\nwithdir() {\\\\n local dir=\\\\\\\"$1\\\\\\\"\\\\n shift\\\\n local orig_dir=\\\\\\\"$(pwd)\\\\\\\"\\\\n cd \\\\\\\"$dir\\\\\\\" || return $?\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n cd \\\\\\\"$orig_dir\\\\\\\" || return $?\\\\n return $exit_code\\\\n}\\\\n\\\\nuuid() {\\\\n python3 -c 'import uuid; print(uuid.uuid4())'\\\\n}\\\\n\\\\nvenv_activate() {\\\\n if [[ \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"msys\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"cygwin\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"win32\\\\\\\" ]]; then\\\\n source .venv/Scripts/activate\\\\n else\\\\n source .venv/bin/activate\\\\n fi\\\\n}\\\\n\\\\nenvsubst() {\\\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\\\n # This is because the python interpreter is otherwise unable to find the python script\\\\n # when MSYS_NO_PATHCONV is enabled.\\\\n env -u MSYS_NO_PATHCONV envsubst.py\\\\n}\\\\n\\\\nprint_telemetry_bool_values() {\\\\n jq -r 'select(.path? == \\\\\\\"/telemetry-ext\\\\\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\\\\\"\\\\\\\\(.key) \\\\\\\\(.value)\\\\\\\") | .[]' out.requests.txt | sort\\\\n}\\\\n\\\\nsethome() {\\\\n local home=\\\\\\\"$1\\\\\\\"\\\\n mkdir -p \\\\\\\"$home\\\\\\\"\\\\n\\\\n # For macOS and Linux, use HOME.\\\\n export HOME=\\\\\\\"$home\\\\\\\"\\\\n\\\\n # For Windows, use USERPROFILE.\\\\n export USERPROFILE=\\\\\\\"$home\\\\\\\"\\\\n}\\\\n\\\\nas-test-sp() {\\\\n if [[ -z \\\\\\\"$TEST_SP_TOKEN\\\\\\\" ]]; then\\\\n echo \\\\\\\"Error: TEST_SP_TOKEN is not set.\\\\\\\" \\\\u003e\\\\u00262\\\\n return 1\\\\n fi\\\\n\\\\n DATABRICKS_TOKEN=\\\\\\\"$TEST_SP_TOKEN\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_SECRET=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_ID=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_AUTH_TYPE=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n \\\\\\\"$@\\\\\\\"\\\\n}\\\\n\\\\nreadplanarg() {\\\\n # Expands into \\\\\\\"--plan \\\\u003cfilename\\\\u003e\\\\\\\" based on READPLAN env var\\\\n # Use it with \\\\\\\"bundle deploy\\\\\\\" to configure two runs: once with saved plan and one without.\\\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\\\n if [[ -n \\\\\\\"$READPLAN\\\\\\\" ]]; then\\\\n printf -- \\\\\\\"--plan %s\\\\\\\" \\\\\\\"$1\\\\\\\"\\\\n else\\\\n printf \\\\\\\"\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\n(\\\\n# Deploy with one job.\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Add a second job and redeploy.\\\\ncat \\\\u003e databricks.yml \\\\u003c\\\\u003c 'EOF'\\\\nbundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n test_job:\\\\n name: test-job\\\\n new_job:\\\\n name: new-job\\\\nEOF\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Remove the first job and redeploy (should delete test_job).\\\\ncat \\\\u003e databricks.yml \\\\u003c\\\\u003c 'EOF'\\\\nbundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n new_job:\\\\n name: new-job\\\\nEOF\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Print metadata service requests across all three deploys.\\\\n# Version 1: CREATE test_job\\\\n# Version 2: CREATE new_job (test_job unchanged)\\\\n# Version 3: DELETE test_job (new_job unchanged)\\\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\\\n)\\\\n\\\\nrm -fr .databricks .gitignore\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"seq\\\": 1,\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"timestamp\\\": \\\"[TIMESTAMP]\\\",\\n \\\"files\\\": [\\n {\\n \\\"local_path\\\": \\\"out.requests.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"output.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"repls.json\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"script\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"test.toml\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"databricks.yml\\\",\\n \\\"is_notebook\\\": false\\n }\\n ],\\n \\\"id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.2/jobs/create\\\",\\n \\\"body\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"test-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\\\",\\n \\\"q\\\": {\\n \\\"resource_key\\\": \\\"jobs.test_job\\\"\\n },\\n \\\"body\\\": {\\n \\\"resource_key\\\": \\\"jobs.test_job\\\",\\n \\\"action_type\\\": \\\"OPERATION_ACTION_TYPE_CREATE\\\",\\n \\\"state\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"test-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n },\\n \\\"resource_id\\\": \\\"[NUMID]\\\",\\n \\\"status\\\": \\\"OPERATION_STATUS_SUCCEEDED\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"config\\\": {\\n \\\"bundle\\\": {\\n \\\"name\\\": \\\"sequential-deploys-test\\\",\\n \\\"target\\\": \\\"default\\\",\\n \\\"git\\\": {\\n \\\"bundle_root_path\\\": \\\".\\\"\\n }\\n },\\n \\\"workspace\\\": {\\n \\\"file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n },\\n \\\"resources\\\": {\\n \\\"jobs\\\": {\\n \\\"test_job\\\": {\\n \\\"id\\\": \\\"[NUMID]\\\",\\n \\\"relative_path\\\": \\\"databricks.yml\\\"\\n }\\n }\\n },\\n \\\"presets\\\": {\\n \\\"source_linked_deployment\\\": false\\n }\\n },\\n \\\"extra\\\": {}\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\\\",\\n \\\"body\\\": {\\n \\\"name\\\": \\\"deployments/[UUID]/versions/1\\\",\\n \\\"completion_reason\\\": \\\"VERSION_COMPLETE_SUCCESS\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/telemetry-ext\\\",\\n \\\"body\\\": {\\n \\\"uploadTime\\\": [UNIX_TIME_MILLIS][0],\\n \\\"items\\\": [],\\n \\\"protoLogs\\\": [\\n \\\"{\\\\\\\"frontend_log_event_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"entry\\\\\\\":{\\\\\\\"databricks_cli_log\\\\\\\":{\\\\\\\"execution_context\\\\\\\":{\\\\\\\"cmd_exec_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"version\\\\\\\":\\\\\\\"[DEV_VERSION]\\\\\\\",\\\\\\\"command\\\\\\\":\\\\\\\"bundle_deploy\\\\\\\",\\\\\\\"operating_system\\\\\\\":\\\\\\\"linux\\\\\\\",\\\\\\\"execution_time_ms\\\\\\\":56,\\\\\\\"exit_code\\\\\\\":0},\\\\\\\"bundle_deploy_event\\\\\\\":{\\\\\\\"bundle_uuid\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"deployment_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"resource_count\\\\\\\":1,\\\\\\\"resource_job_count\\\\\\\":1,\\\\\\\"resource_pipeline_count\\\\\\\":0,\\\\\\\"resource_model_count\\\\\\\":0,\\\\\\\"resource_experiment_count\\\\\\\":0,\\\\\\\"resource_model_serving_endpoint_count\\\\\\\":0,\\\\\\\"resource_registered_model_count\\\\\\\":0,\\\\\\\"resource_quality_monitor_count\\\\\\\":0,\\\\\\\"resource_schema_count\\\\\\\":0,\\\\\\\"resource_volume_count\\\\\\\":0,\\\\\\\"resource_cluster_count\\\\\\\":0,\\\\\\\"resource_dashboard_count\\\\\\\":0,\\\\\\\"resource_app_count\\\\\\\":0,\\\\\\\"resource_job_ids\\\\\\\":[\\\\\\\"[NUMID]\\\\\\\"],\\\\\\\"experimental\\\\\\\":{\\\\\\\"configuration_file_count\\\\\\\":1,\\\\\\\"variable_count\\\\\\\":0,\\\\\\\"complex_variable_count\\\\\\\":0,\\\\\\\"lookup_variable_count\\\\\\\":0,\\\\\\\"target_count\\\\\\\":1,\\\\\\\"bool_values\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.attempt\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.miss\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"experimental.use_legacy_run_as\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"run_as_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"presets_name_prefix_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"python_wheel_wrapper_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"skip_artifact_cleanup\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_serverless_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_job_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_interactive_compute\\\\\\\",\\\\\\\"value\\\\\\\":false}],\\\\\\\"bundle_mode\\\\\\\":\\\\\\\"TYPE_UNSPECIFIED\\\\\\\",\\\\\\\"workspace_artifact_path_type\\\\\\\":\\\\\\\"WORKSPACE_FILE_SYSTEM\\\\\\\",\\\\\\\"bundle_mutator_execution_time_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Deploy\\\\\\\",\\\\\\\"value\\\\\\\":42},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Initialize\\\\\\\",\\\\\\\"value\\\\\\\":8},{\\\\\\\"key\\\\\\\":\\\\\\\"resourcemutator.(processStaticResources)\\\\\\\",\\\\\\\"value\\\\\\\":3},{\\\\\\\"key\\\\\\\":\\\\\\\"files.(upload)\\\\\\\",\\\\\\\"value\\\\\\\":3},{\\\\\\\"key\\\\\\\":\\\\\\\"mutator.(selectDefaultTarget)\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"validate.(enum)\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Build\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"validate.FastValidate\\\\\\\",\\\\\\\"value\\\\\\\":0}],\\\\\\\"local_cache_measurements_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.compute_duration\\\\\\\",\\\\\\\"value\\\\\\\":0}]}}}}}\\\"\\n ]\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/resources\\\",\\n \\\"q\\\": {\\n \\\"page_size\\\": \\\"1000\\\"\\n },\\n \\\"body\\\": null\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"2\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"\\\\n\\\\u003e\\\\u003e\\\\u003e [CLI] bundle deploy\\\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\\\nDeploying resources...\\\\nDeployment complete!\\\\n\\\\n\\\\u003e\\\\u003e\\\\u003e [CLI] bundle deploy\\\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"bundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n test_job:\\\\n name: test-job\\\\n new_job:\\\\n name: new-job\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/.well-known/databricks-config\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/preview/scim/v2/Me\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"version_id\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"cli_version\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"version_type\\\\\\\": \\\\\\\"VERSION_TYPE_DEPLOY\\\\\\\",\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/delete\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\",\\\\n \\\\\\\"recursive\\\\\\\": true\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"raw_body\\\\\\\": \\\\\\\"Ignore = [\\\\\\\\\\\\\\\".databricks\\\\\\\\\\\\\\\"]\\\\\\\\n\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"raw_body\\\\\\\": \\\\\\\"bundle:\\\\\\\\n name: sequential-deploys-test\\\\\\\\n\\\\\\\\nresources:\\\\\\\\n jobs:\\\\\\\\n test_job:\\\\\\\\n name: test-job\\\\\\\\n\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": [\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\\\\\\\\\\\\\.terraformrc\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[DATABRICKS_TF_CLI_CONFIG_FILE]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TERRAFORM]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/libs/vendored_py_packages\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[VENDORED_PY_PACKAGES]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\\\\\\\\\\\\\.296\\\\\\\\\\\\\\\\.0-py3-none-any\\\\\\\\\\\\\\\\.whl\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[DATABRICKS_BUNDLES_WHEEL]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[CLI]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\\\\\\\\\\\\\.293\\\\\\\\\\\\\\\\.0/databricks\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[CLI_293]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[TEST_DEFAULT_CLUSTER_ID]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TEST_DEFAULT_CLUSTER_ID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[TEST_INSTANCE_POOL_ID]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TEST_INSTANCE_POOL_ID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/acceptance/build/linux_amd64\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[BUILD_DIR]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"0\\\\\\\\\\\\\\\\.0\\\\\\\\\\\\\\\\.0-dev(\\\\\\\\\\\\\\\\+[a-f0-9]{10,16})?\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"databricks-sdk-go/[0-9]+\\\\\\\\\\\\\\\\.[0-9]+\\\\\\\\\\\\\\\\.[0-9]+\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"databricks-sdk-go/[SDK_VERSION]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"1\\\\\\\\\\\\\\\\.26\\\\\\\\\\\\\\\\.1\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[GO_VERSION]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"/home/shreyas\\\\\\\\\\\\\\\\.goenka/cli/acceptance\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TESTROOT]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"dbapi[0-9a-f]+\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[DATABRICKS_TOKEN]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"i3\\\\\\\\\\\\\\\\.xlarge\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[NODE_TYPE_ID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[UNIQUE_NAME]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[UNIQUE_NAME]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[TEST_TMP_DIR]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TEST_TMP_DIR]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[TEST_TMP_DIR]_PARENT\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TEST_TMP_DIR]_PARENT\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[USERNAME]@databricks\\\\\\\\\\\\\\\\.com\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[USERNAME]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[USERNAME]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[USERNAME]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[USERID]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[USERID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"https://127\\\\\\\\\\\\\\\\.0\\\\\\\\\\\\\\\\.0\\\\\\\\\\\\\\\\.1:40041\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[DATABRICKS_URL]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"http://127\\\\\\\\\\\\\\\\.0\\\\\\\\\\\\\\\\.0\\\\\\\\\\\\\\\\.1:40041\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[DATABRICKS_URL]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"127\\\\\\\\\\\\\\\\.0\\\\\\\\\\\\\\\\.0\\\\\\\\\\\\\\\\.1:40041\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[DATABRICKS_HOST]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[UUID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"\\\\\\\\\\\\\\\\d{20,}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[NUMID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"1[78]\\\\\\\\\\\\\\\\d{17}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[UNIX_TIME_NANOS]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": true\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"\\\\\\\\\\\\\\\\d{17,}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[NUMID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"\\\\\\\\\\\\\\\\d{14,}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[NUMID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"1[78]\\\\\\\\\\\\\\\\d{11}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[UNIX_TIME_MILLIS]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": true\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"\\\\\\\\\\\\\\\\d{11,}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[NUMID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"1[78]\\\\\\\\\\\\\\\\d{8}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[UNIX_TIME_S]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"\\\\\\\\\\\\\\\\d{8,}\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[NUMID]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 10,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"2\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d-\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d-\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d(T| )\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d:\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d:\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\.\\\\\\\\\\\\\\\\d+(Z|\\\\\\\\\\\\\\\\+\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d:\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d)?\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TIMESTAMP]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 9,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"2\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d-\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d-\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d(T| )\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d:\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\d:\\\\\\\\\\\\\\\\d\\\\\\\\\\\\\\\\dZ?\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[TIMESTAMP]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 9,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"[METASTORE_NAME]|[METASTORE_NAME]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"[METASTORE_NAME]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"os/[OS]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"os/[OS]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"os/[OS]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"os/[OS]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"os/[OS]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"os/[OS]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"Old\\\\\\\": \\\\\\\"\\\\\\\\\\\\\\\"protoLogs\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\\[.+\\\\\\\\\\\\\\\\]\\\\\\\",\\\\n \\\\\\\"New\\\\\\\": \\\\\\\"\\\\\\\\\\\\\\\"protoLogs\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"TELEMETRY\\\\\\\\\\\\\\\"]\\\\\\\",\\\\n \\\\\\\"Order\\\\\\\": 0,\\\\n \\\\\\\"Distinct\\\\\\\": false\\\\n }\\\\n ]\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"raw_body\\\\\\\": \\\\\\\"{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"GET\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/.well-known/databricks-config\\\\\\\\\\\\\\\"\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"GET\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/preview/scim/v2/Me\\\\\\\\\\\\\\\"\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"GET\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/get-status\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"return_export_info\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"GET\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/get-status\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"return_export_info\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"GET\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/get-status\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"return_export_info\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"POST\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"overwrite\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\"\\\\\\\\n },\\\\\\\\n \\\\\\\\\\\\\\\"body\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"deployment_id\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"[UUID]\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"POST\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/bundle/deployments\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"deployment_id\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"[UUID]\\\\\\\\\\\\\\\"\\\\\\\\n },\\\\\\\\n \\\\\\\\\\\\\\\"body\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"target_name\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"default\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"POST\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"version_id\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"1\\\\\\\\\\\\\\\"\\\\\\\\n },\\\\\\\\n \\\\\\\\\\\\\\\"body\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"cli_version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"[DEV_VERSION]\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"version_type\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"VERSION_TYPE_DEPLOY\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"target_name\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"default\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"POST\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/delete\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"body\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"recursive\\\\\\\\\\\\\\\": true\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"POST\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"body\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"GET\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/get-status\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"POST\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"body\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"GET\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace/get-status\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n}\\\\\\\\n{\\\\\\\\n \\\\\\\\\\\\\\\"method\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"POST\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"path\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\\\\\\\\\\\\\",\\\\\\\\n \\\\\\\\\\\\\\\"q\\\\\\\\\\\\\\\": {\\\\\\\\n \\\\\\\\\\\\\\\"overwrite\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\"\\\\\\\\n },\\\\\\\\n \\\\\\\\\\\\\\\"raw_body\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Ignore = [\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\".databricks\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\"\\\\\\\\n}\\\\\\\\n\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"raw_body\\\\\\\": \\\\\\\"\\\\\\\\n\\\\\\\\u003e\\\\\\\\u003e\\\\\\\\u003e [CLI] bundle deploy\\\\\\\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\\\\\\\n\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"raw_body\\\\\\\": \\\\\\\"errcode() {\\\\\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\\\\\n set +e\\\\\\\\n # Execute the provided command with all arguments\\\\\\\\n \\\\\\\\\\\\\\\"$@\\\\\\\\\\\\\\\"\\\\\\\\n local exit_code=$?\\\\\\\\n # Re-enable 'set -e' if it was previously set\\\\\\\\n set -e\\\\\\\\n if [ $exit_code -ne 0 ]; then\\\\\\\\n \\\\\\\\u003e\\\\\\\\u00262 printf \\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\nExit code: $exit_code\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\"\\\\\\\\n fi\\\\\\\\n}\\\\\\\\n\\\\\\\\nmusterr() {\\\\\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\\\\\n set +e\\\\\\\\n # Execute the provided command with all arguments\\\\\\\\n \\\\\\\\\\\\\\\"$@\\\\\\\\\\\\\\\"\\\\\\\\n local exit_code=$?\\\\\\\\n # Re-enable 'set -e'\\\\\\\\n set -e\\\\\\\\n if [ $exit_code -eq 0 ]; then\\\\\\\\n \\\\\\\\u003e\\\\\\\\u00262 printf \\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\nUnexpected success\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\"\\\\\\\\n exit 1\\\\\\\\n fi\\\\\\\\n}\\\\\\\\n\\\\\\\\ntrace() {\\\\\\\\n \\\\\\\\u003e\\\\\\\\u00262 printf \\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\n\\\\\\\\u003e\\\\\\\\u003e\\\\\\\\u003e %s\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\" \\\\\\\\\\\\\\\"$*\\\\\\\\\\\\\\\"\\\\\\\\n\\\\\\\\n if [[ \\\\\\\\\\\\\\\"$1\\\\\\\\\\\\\\\" == *\\\\\\\\\\\\\\\"=\\\\\\\\\\\\\\\"* ]]; then\\\\\\\\n # If the first argument contains '=', collect all env vars\\\\\\\\n local env_vars=()\\\\\\\\n while [[ \\\\\\\\\\\\\\\"$1\\\\\\\\\\\\\\\" == *\\\\\\\\\\\\\\\"=\\\\\\\\\\\\\\\"* ]]; do\\\\\\\\n env_vars+=(\\\\\\\\\\\\\\\"$1\\\\\\\\\\\\\\\")\\\\\\\\n shift\\\\\\\\n done\\\\\\\\n # Export environment variables in a subshell and execute the command\\\\\\\\n (\\\\\\\\n export \\\\\\\\\\\\\\\"${env_vars[@]}\\\\\\\\\\\\\\\"\\\\\\\\n \\\\\\\\\\\\\\\"$@\\\\\\\\\\\\\\\"\\\\\\\\n )\\\\\\\\n else\\\\\\\\n # Execute the command normally\\\\\\\\n \\\\\\\\\\\\\\\"$@\\\\\\\\\\\\\\\"\\\\\\\\n fi\\\\\\\\n\\\\\\\\n return $?\\\\\\\\n}\\\\\\\\n\\\\\\\\ngit-repo-init() {\\\\\\\\n git init -qb main\\\\\\\\n git config core.autocrlf false\\\\\\\\n git config user.name \\\\\\\\\\\\\\\"Tester\\\\\\\\\\\\\\\"\\\\\\\\n git config user.email \\\\\\\\\\\\\\\"[USERNAME]\\\\\\\\\\\\\\\"\\\\\\\\n git config core.hooksPath no-hooks\\\\\\\\n git add databricks.yml\\\\\\\\n git commit -qm 'Add databricks.yml'\\\\\\\\n}\\\\\\\\n\\\\\\\\ntitle() {\\\\\\\\n local label=\\\\\\\\\\\\\\\"$1\\\\\\\\\\\\\\\"\\\\\\\\n printf \\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\n=== %b\\\\\\\\\\\\\\\" \\\\\\\\\\\\\\\"$label\\\\\\\\\\\\\\\"\\\\\\\\n}\\\\\\\\n\\\\\\\\nwithdir() {\\\\\\\\n local dir=\\\\\\\\\\\\\\\"$1\\\\\\\\\\\\\\\"\\\\\\\\n shift\\\\\\\\n local orig_dir=\\\\\\\\\\\\\\\"$(pwd)\\\\\\\\\\\\\\\"\\\\\\\\n cd \\\\\\\\\\\\\\\"$dir\\\\\\\\\\\\\\\" || return $?\\\\\\\\n \\\\\\\\\\\\\\\"$@\\\\\\\\\\\\\\\"\\\\\\\\n local exit_code=$?\\\\\\\\n cd \\\\\\\\\\\\\\\"$orig_dir\\\\\\\\\\\\\\\" || return $?\\\\\\\\n return $exit_code\\\\\\\\n}\\\\\\\\n\\\\\\\\nuuid() {\\\\\\\\n python3 -c 'import uuid; print(uuid.uuid4())'\\\\\\\\n}\\\\\\\\n\\\\\\\\nvenv_activate() {\\\\\\\\n if [[ \\\\\\\\\\\\\\\"$OSTYPE\\\\\\\\\\\\\\\" == \\\\\\\\\\\\\\\"msys\\\\\\\\\\\\\\\" || \\\\\\\\\\\\\\\"$OSTYPE\\\\\\\\\\\\\\\" == \\\\\\\\\\\\\\\"cygwin\\\\\\\\\\\\\\\" || \\\\\\\\\\\\\\\"$OSTYPE\\\\\\\\\\\\\\\" == \\\\\\\\\\\\\\\"win32\\\\\\\\\\\\\\\" ]]; then\\\\\\\\n source .venv/Scripts/activate\\\\\\\\n else\\\\\\\\n source .venv/bin/activate\\\\\\\\n fi\\\\\\\\n}\\\\\\\\n\\\\\\\\nenvsubst() {\\\\\\\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\\\\\\\n # This is because the python interpreter is otherwise unable to find the python script\\\\\\\\n # when MSYS_NO_PATHCONV is enabled.\\\\\\\\n env -u MSYS_NO_PATHCONV envsubst.py\\\\\\\\n}\\\\\\\\n\\\\\\\\nprint_telemetry_bool_values() {\\\\\\\\n jq -r 'select(.path? == \\\\\\\\\\\\\\\"/telemetry-ext\\\\\\\\\\\\\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\(.key) \\\\\\\\\\\\\\\\(.value)\\\\\\\\\\\\\\\") | .[]' out.requests.txt | sort\\\\\\\\n}\\\\\\\\n\\\\\\\\nsethome() {\\\\\\\\n local home=\\\\\\\\\\\\\\\"$1\\\\\\\\\\\\\\\"\\\\\\\\n mkdir -p \\\\\\\\\\\\\\\"$home\\\\\\\\\\\\\\\"\\\\\\\\n\\\\\\\\n # For macOS and Linux, use HOME.\\\\\\\\n export HOME=\\\\\\\\\\\\\\\"$home\\\\\\\\\\\\\\\"\\\\\\\\n\\\\\\\\n # For Windows, use USERPROFILE.\\\\\\\\n export USERPROFILE=\\\\\\\\\\\\\\\"$home\\\\\\\\\\\\\\\"\\\\\\\\n}\\\\\\\\n\\\\\\\\nas-test-sp() {\\\\\\\\n if [[ -z \\\\\\\\\\\\\\\"$TEST_SP_TOKEN\\\\\\\\\\\\\\\" ]]; then\\\\\\\\n echo \\\\\\\\\\\\\\\"Error: TEST_SP_TOKEN is not set.\\\\\\\\\\\\\\\" \\\\\\\\u003e\\\\\\\\u00262\\\\\\\\n return 1\\\\\\\\n fi\\\\\\\\n\\\\\\\\n DATABRICKS_TOKEN=\\\\\\\\\\\\\\\"$TEST_SP_TOKEN\\\\\\\\\\\\\\\" \\\\\\\\\\\\\\\\\\\\\\\\n DATABRICKS_CLIENT_SECRET=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" \\\\\\\\\\\\\\\\\\\\\\\\n DATABRICKS_CLIENT_ID=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" \\\\\\\\\\\\\\\\\\\\\\\\n DATABRICKS_AUTH_TYPE=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" \\\\\\\\\\\\\\\\\\\\\\\\n \\\\\\\\\\\\\\\"$@\\\\\\\\\\\\\\\"\\\\\\\\n}\\\\\\\\n\\\\\\\\nreadplanarg() {\\\\\\\\n # Expands into \\\\\\\\\\\\\\\"--plan \\\\\\\\u003cfilename\\\\\\\\u003e\\\\\\\\\\\\\\\" based on READPLAN env var\\\\\\\\n # Use it with \\\\\\\\\\\\\\\"bundle deploy\\\\\\\\\\\\\\\" to configure two runs: once with saved plan and one without.\\\\\\\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\\\\\\\n if [[ -n \\\\\\\\\\\\\\\"$READPLAN\\\\\\\\\\\\\\\" ]]; then\\\\\\\\n printf -- \\\\\\\\\\\\\\\"--plan %s\\\\\\\\\\\\\\\" \\\\\\\\\\\\\\\"$1\\\\\\\\\\\\\\\"\\\\\\\\n else\\\\\\\\n printf \\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\n fi\\\\\\\\n}\\\\\\\\n\\\\\\\\n(\\\\\\\\n# Deploy with one job.\\\\\\\\ntrace $CLI bundle deploy\\\\\\\\n\\\\\\\\n# Add a second job and redeploy.\\\\\\\\ncat \\\\\\\\u003e databricks.yml \\\\\\\\u003c\\\\\\\\u003c 'EOF'\\\\\\\\nbundle:\\\\\\\\n name: sequential-deploys-test\\\\\\\\n\\\\\\\\nresources:\\\\\\\\n jobs:\\\\\\\\n test_job:\\\\\\\\n name: test-job\\\\\\\\n new_job:\\\\\\\\n name: new-job\\\\\\\\nEOF\\\\\\\\ntrace $CLI bundle deploy\\\\\\\\n\\\\\\\\n# Remove the first job and redeploy (should delete test_job).\\\\\\\\ncat \\\\\\\\u003e databricks.yml \\\\\\\\u003c\\\\\\\\u003c 'EOF'\\\\\\\\nbundle:\\\\\\\\n name: sequential-deploys-test\\\\\\\\n\\\\\\\\nresources:\\\\\\\\n jobs:\\\\\\\\n new_job:\\\\\\\\n name: new-job\\\\\\\\nEOF\\\\\\\\ntrace $CLI bundle deploy\\\\\\\\n\\\\\\\\n# Print metadata service requests across all three deploys.\\\\\\\\n# Version 1: CREATE test_job\\\\\\\\n# Version 2: CREATE new_job (test_job unchanged)\\\\\\\\n# Version 3: DELETE test_job (new_job unchanged)\\\\\\\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\\\\\\\n)\\\\\\\\n\\\\\\\\nrm -fr .databricks .gitignore\\\\\\\\n\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"version\\\\\\\": 1,\\\\n \\\\\\\"seq\\\\\\\": 1,\\\\n \\\\\\\"cli_version\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"timestamp\\\\\\\": \\\\\\\"[TIMESTAMP]\\\\\\\",\\\\n \\\\\\\"files\\\\\\\": [\\\\n {\\\\n \\\\\\\"local_path\\\\\\\": \\\\\\\"out.requests.txt\\\\\\\",\\\\n \\\\\\\"is_notebook\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"local_path\\\\\\\": \\\\\\\"output.txt\\\\\\\",\\\\n \\\\\\\"is_notebook\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"local_path\\\\\\\": \\\\\\\"repls.json\\\\\\\",\\\\n \\\\\\\"is_notebook\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"local_path\\\\\\\": \\\\\\\"script\\\\\\\",\\\\n \\\\\\\"is_notebook\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"local_path\\\\\\\": \\\\\\\"test.toml\\\\\\\",\\\\n \\\\\\\"is_notebook\\\\\\\": false\\\\n },\\\\n {\\\\n \\\\\\\"local_path\\\\\\\": \\\\\\\"databricks.yml\\\\\\\",\\\\n \\\\\\\"is_notebook\\\\\\\": false\\\\n }\\\\n ],\\\\n \\\\\\\"id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.2/jobs/create\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"deployment\\\\\\\": {\\\\n \\\\\\\"kind\\\\\\\": \\\\\\\"BUNDLE\\\\\\\",\\\\n \\\\\\\"metadata_file_path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\\\\\"\\\\n },\\\\n \\\\\\\"edit_mode\\\\\\\": \\\\\\\"UI_LOCKED\\\\\\\",\\\\n \\\\\\\"format\\\\\\\": \\\\\\\"MULTI_TASK\\\\\\\",\\\\n \\\\\\\"max_concurrent_runs\\\\\\\": 1,\\\\n \\\\\\\"name\\\\\\\": \\\\\\\"test-job\\\\\\\",\\\\n \\\\\\\"queue\\\\\\\": {\\\\n \\\\\\\"enabled\\\\\\\": true\\\\n }\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"resource_key\\\\\\\": \\\\\\\"jobs.test_job\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"resource_key\\\\\\\": \\\\\\\"jobs.test_job\\\\\\\",\\\\n \\\\\\\"action_type\\\\\\\": \\\\\\\"OPERATION_ACTION_TYPE_CREATE\\\\\\\",\\\\n \\\\\\\"state\\\\\\\": {\\\\n \\\\\\\"deployment\\\\\\\": {\\\\n \\\\\\\"kind\\\\\\\": \\\\\\\"BUNDLE\\\\\\\",\\\\n \\\\\\\"metadata_file_path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\\\\\"\\\\n },\\\\n \\\\\\\"edit_mode\\\\\\\": \\\\\\\"UI_LOCKED\\\\\\\",\\\\n \\\\\\\"format\\\\\\\": \\\\\\\"MULTI_TASK\\\\\\\",\\\\n \\\\\\\"max_concurrent_runs\\\\\\\": 1,\\\\n \\\\\\\"name\\\\\\\": \\\\\\\"test-job\\\\\\\",\\\\n \\\\\\\"queue\\\\\\\": {\\\\n \\\\\\\"enabled\\\\\\\": true\\\\n }\\\\n },\\\\n \\\\\\\"resource_id\\\\\\\": \\\\\\\"[NUMID]\\\\\\\",\\\\n \\\\\\\"status\\\\\\\": \\\\\\\"OPERATION_STATUS_SUCCEEDED\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"version\\\\\\\": 1,\\\\n \\\\\\\"config\\\\\\\": {\\\\n \\\\\\\"bundle\\\\\\\": {\\\\n \\\\\\\"name\\\\\\\": \\\\\\\"sequential-deploys-test\\\\\\\",\\\\n \\\\\\\"target\\\\\\\": \\\\\\\"default\\\\\\\",\\\\n \\\\\\\"git\\\\\\\": {\\\\n \\\\\\\"bundle_root_path\\\\\\\": \\\\\\\".\\\\\\\"\\\\n }\\\\n },\\\\n \\\\\\\"workspace\\\\\\\": {\\\\n \\\\\\\"file_path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n },\\\\n \\\\\\\"resources\\\\\\\": {\\\\n \\\\\\\"jobs\\\\\\\": {\\\\n \\\\\\\"test_job\\\\\\\": {\\\\n \\\\\\\"id\\\\\\\": \\\\\\\"[NUMID]\\\\\\\",\\\\n \\\\\\\"relative_path\\\\\\\": \\\\\\\"databricks.yml\\\\\\\"\\\\n }\\\\n }\\\\n },\\\\n \\\\\\\"presets\\\\\\\": {\\\\n \\\\\\\"source_linked_deployment\\\\\\\": false\\\\n }\\\\n },\\\\n \\\\\\\"extra\\\\\\\": {}\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"name\\\\\\\": \\\\\\\"deployments/[UUID]/versions/1\\\\\\\",\\\\n \\\\\\\"completion_reason\\\\\\\": \\\\\\\"VERSION_COMPLETE_SUCCESS\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/telemetry-ext\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"uploadTime\\\\\\\": [UNIX_TIME_MILLIS][0],\\\\n \\\\\\\"items\\\\\\\": [],\\\\n \\\\\\\"protoLogs\\\\\\\": [\\\\n \\\\\\\"{\\\\\\\\\\\\\\\"frontend_log_event_id\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"[UUID]\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"entry\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"databricks_cli_log\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"execution_context\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"cmd_exec_id\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"[UUID]\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"version\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"[DEV_VERSION]\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"command\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"bundle_deploy\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"operating_system\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"linux\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"execution_time_ms\\\\\\\\\\\\\\\":56,\\\\\\\\\\\\\\\"exit_code\\\\\\\\\\\\\\\":0},\\\\\\\\\\\\\\\"bundle_deploy_event\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"bundle_uuid\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"[UUID]\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"deployment_id\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"[UUID]\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"resource_count\\\\\\\\\\\\\\\":1,\\\\\\\\\\\\\\\"resource_job_count\\\\\\\\\\\\\\\":1,\\\\\\\\\\\\\\\"resource_pipeline_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_model_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_experiment_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_model_serving_endpoint_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_registered_model_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_quality_monitor_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_schema_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_volume_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_cluster_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_dashboard_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_app_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"resource_job_ids\\\\\\\\\\\\\\\":[\\\\\\\\\\\\\\\"[NUMID]\\\\\\\\\\\\\\\"],\\\\\\\\\\\\\\\"experimental\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"configuration_file_count\\\\\\\\\\\\\\\":1,\\\\\\\\\\\\\\\"variable_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"complex_variable_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"lookup_variable_count\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"target_count\\\\\\\\\\\\\\\":1,\\\\\\\\\\\\\\\"bool_values\\\\\\\\\\\\\\\":[{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"local.cache.attempt\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":true},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"local.cache.miss\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":true},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"experimental.use_legacy_run_as\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"run_as_set\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"presets_name_prefix_is_set\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"python_wheel_wrapper_is_set\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"skip_artifact_cleanup\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"has_serverless_compute\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"has_classic_job_compute\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"has_classic_interactive_compute\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":false}],\\\\\\\\\\\\\\\"bundle_mode\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"TYPE_UNSPECIFIED\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"workspace_artifact_path_type\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"WORKSPACE_FILE_SYSTEM\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"bundle_mutator_execution_time_ms\\\\\\\\\\\\\\\":[{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"phases.Deploy\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":42},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"phases.Initialize\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":8},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"resourcemutator.(processStaticResources)\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":3},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"files.(upload)\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":3},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"mutator.(selectDefaultTarget)\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":1},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"validate.(enum)\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":1},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"phases.Build\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":1},{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"validate.FastValidate\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":0}],\\\\\\\\\\\\\\\"local_cache_measurements_ms\\\\\\\\\\\\\\\":[{\\\\\\\\\\\\\\\"key\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"local.cache.compute_duration\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\":0}]}}}}}\\\\\\\"\\\\n ]\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/.well-known/databricks-config\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/resources\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"page_size\\\\\\\": \\\\\\\"1000\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": null\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"version_id\\\\\\\": \\\\\\\"2\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"cli_version\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"version_type\\\\\\\": \\\\\\\"VERSION_TYPE_DEPLOY\\\\\\\",\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/delete\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\",\\\\n \\\\\\\"recursive\\\\\\\": true\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"seq\\\": 2,\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"timestamp\\\": \\\"[TIMESTAMP]\\\",\\n \\\"files\\\": [\\n {\\n \\\"local_path\\\": \\\"out.requests.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"output.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"repls.json\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"script\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"test.toml\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"databricks.yml\\\",\\n \\\"is_notebook\\\": false\\n }\\n ],\\n \\\"id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.2/jobs/get\\\",\\n \\\"q\\\": {\\n \\\"job_id\\\": \\\"[NUMID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.2/jobs/create\\\",\\n \\\"body\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"new-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/2/operations\\\",\\n \\\"q\\\": {\\n \\\"resource_key\\\": \\\"jobs.new_job\\\"\\n },\\n \\\"body\\\": {\\n \\\"resource_key\\\": \\\"jobs.new_job\\\",\\n \\\"action_type\\\": \\\"OPERATION_ACTION_TYPE_CREATE\\\",\\n \\\"state\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"new-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n },\\n \\\"resource_id\\\": \\\"[NUMID]\\\",\\n \\\"status\\\": \\\"OPERATION_STATUS_SUCCEEDED\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"config\\\": {\\n \\\"bundle\\\": {\\n \\\"name\\\": \\\"sequential-deploys-test\\\",\\n \\\"target\\\": \\\"default\\\",\\n \\\"git\\\": {\\n \\\"bundle_root_path\\\": \\\".\\\"\\n }\\n },\\n \\\"workspace\\\": {\\n \\\"file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n },\\n \\\"resources\\\": {\\n \\\"jobs\\\": {\\n \\\"new_job\\\": {\\n \\\"id\\\": \\\"[NUMID]\\\",\\n \\\"relative_path\\\": \\\"databricks.yml\\\"\\n },\\n \\\"test_job\\\": {\\n \\\"id\\\": \\\"[NUMID]\\\",\\n \\\"relative_path\\\": \\\"databricks.yml\\\"\\n }\\n }\\n },\\n \\\"presets\\\": {\\n \\\"source_linked_deployment\\\": false\\n }\\n },\\n \\\"extra\\\": {}\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/2/complete\\\",\\n \\\"body\\\": {\\n \\\"name\\\": \\\"deployments/[UUID]/versions/2\\\",\\n \\\"completion_reason\\\": \\\"VERSION_COMPLETE_SUCCESS\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/telemetry-ext\\\",\\n \\\"body\\\": {\\n \\\"uploadTime\\\": [UNIX_TIME_MILLIS][1],\\n \\\"items\\\": [],\\n \\\"protoLogs\\\": [\\n \\\"{\\\\\\\"frontend_log_event_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"entry\\\\\\\":{\\\\\\\"databricks_cli_log\\\\\\\":{\\\\\\\"execution_context\\\\\\\":{\\\\\\\"cmd_exec_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"version\\\\\\\":\\\\\\\"[DEV_VERSION]\\\\\\\",\\\\\\\"command\\\\\\\":\\\\\\\"bundle_deploy\\\\\\\",\\\\\\\"operating_system\\\\\\\":\\\\\\\"linux\\\\\\\",\\\\\\\"execution_time_ms\\\\\\\":29,\\\\\\\"exit_code\\\\\\\":0},\\\\\\\"bundle_deploy_event\\\\\\\":{\\\\\\\"bundle_uuid\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"deployment_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"resource_count\\\\\\\":2,\\\\\\\"resource_job_count\\\\\\\":2,\\\\\\\"resource_pipeline_count\\\\\\\":0,\\\\\\\"resource_model_count\\\\\\\":0,\\\\\\\"resource_experiment_count\\\\\\\":0,\\\\\\\"resource_model_serving_endpoint_count\\\\\\\":0,\\\\\\\"resource_registered_model_count\\\\\\\":0,\\\\\\\"resource_quality_monitor_count\\\\\\\":0,\\\\\\\"resource_schema_count\\\\\\\":0,\\\\\\\"resource_volume_count\\\\\\\":0,\\\\\\\"resource_cluster_count\\\\\\\":0,\\\\\\\"resource_dashboard_count\\\\\\\":0,\\\\\\\"resource_app_count\\\\\\\":0,\\\\\\\"resource_job_ids\\\\\\\":[\\\\\\\"[NUMID]\\\\\\\",\\\\\\\"[NUMID]\\\\\\\"],\\\\\\\"experimental\\\\\\\":{\\\\\\\"configuration_file_count\\\\\\\":1,\\\\\\\"variable_count\\\\\\\":0,\\\\\\\"complex_variable_count\\\\\\\":0,\\\\\\\"lookup_variable_count\\\\\\\":0,\\\\\\\"target_count\\\\\\\":1,\\\\\\\"bool_values\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.attempt\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.hit\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"experimental.use_legacy_run_as\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"run_as_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"presets_name_prefix_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"python_wheel_wrapper_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"skip_artifact_cleanup\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_serverless_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_job_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_interactive_compute\\\\\\\",\\\\\\\"value\\\\\\\":false}],\\\\\\\"bundle_mode\\\\\\\":\\\\\\\"TYPE_UNSPECIFIED\\\\\\\",\\\\\\\"workspace_artifact_path_type\\\\\\\":\\\\\\\"WORKSPACE_FILE_SYSTEM\\\\\\\",\\\\\\\"bundle_mutator_execution_time_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Deploy\\\\\\\",\\\\\\\"value\\\\\\\":12},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Initialize\\\\\\\",\\\\\\\"value\\\\\\\":10},{\\\\\\\"key\\\\\\\":\\\\\\\"resourcemutator.(processStaticResources)\\\\\\\",\\\\\\\"value\\\\\\\":5},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Build\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"files.(upload)\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"validate.FastValidate\\\\\\\",\\\\\\\"value\\\\\\\":0}]}}}}}\\\"\\n ]\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/resources\\\",\\n \\\"q\\\": {\\n \\\"page_size\\\": \\\"1000\\\"\\n },\\n \\\"body\\\": null\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"3\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 3,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/delete\",\n \"body\": {\n \"job_id\": [NUMID]\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/3/operations\",\n \"q\": {\n \"resource_key\": \"jobs.test_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.test_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_DELETE\",\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"sequential-deploys-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"new_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/3/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/3\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][2],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":26,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.hit\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":11},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":8},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":2},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/add-resources/databricks.yml", - "q": { - "overwrite": "true" - }, - "raw_body": "bundle:\n name: add-resources-test\n\nresources:\n jobs:\n job_a:\n name: job-a\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files/sequential-deploys/output.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e print_requests.py --get //bundle ^//workspace-files ^//import-file\nTraceback (most recent call last):\n File \"[TESTROOT]/bin/print_requests.py\", line 197, in \u003cmodule\u003e\n main()\n File \"[TESTROOT]/bin/print_requests.py\", line 178, in main\n filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort)\n File \"[TESTROOT]/bin/print_requests.py\", line 114, in filter_requests\n positive_filters.append(f.removeprefix(ADD_PREFIX))\nAttributeError: 'str' object has no attribute 'removeprefix'\n\nExit code: 1\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/deployment.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "seq": 1, - "cli_version": "[DEV_VERSION]", - "timestamp": "[TIMESTAMP]", - "files": [ - { - "local_path": "output.txt", - "is_notebook": false - }, - { - "local_path": "plan-and-summary/out.test.toml", - "is_notebook": false - }, - { - "local_path": "release-lock-error/out.test.toml", - "is_notebook": false - }, - { - "local_path": "test.toml", - "is_notebook": false - }, - { - "local_path": "release-lock-error/out.requests.txt", - "is_notebook": false - }, - { - "local_path": "release-lock-error/test.toml", - "is_notebook": false - }, - { - "local_path": "script", - "is_notebook": false - }, - { - "local_path": "plan-and-summary/databricks.yml", - "is_notebook": false - }, - { - "local_path": "add-resources/output.txt", - "is_notebook": false - }, - { - "local_path": "deploy-error/databricks.yml", - "is_notebook": false - }, - { - "local_path": "deploy-error/test.toml", - "is_notebook": false - }, - { - "local_path": "plan-and-summary/output.txt", - "is_notebook": false - }, - { - "local_path": "add-resources/out.requests.txt", - "is_notebook": false - }, - { - "local_path": "add-resources/test.toml", - "is_notebook": false - }, - { - "local_path": "deploy-error/out.test.toml", - "is_notebook": false - }, - { - "local_path": "repls.json", - "is_notebook": false - }, - { - "local_path": "add-resources/databricks.yml", - "is_notebook": false - }, - { - "local_path": "deploy-error/out.requests.txt", - "is_notebook": false - }, - { - "local_path": "sequential-deploys/test.toml", - "is_notebook": false - }, - { - "local_path": "release-lock-error/databricks.yml", - "is_notebook": false - }, - { - "local_path": "release-lock-error/output.txt", - "is_notebook": false - }, - { - "local_path": "out.requests.txt", - "is_notebook": false - }, - { - "local_path": "add-resources/out.test.toml", - "is_notebook": false - }, - { - "local_path": "deploy-error/output.txt", - "is_notebook": false - }, - { - "local_path": "plan-and-summary/out.requests.txt", - "is_notebook": false - }, - { - "local_path": "sequential-deploys/databricks.yml", - "is_notebook": false - }, - { - "local_path": "sequential-deploys/output.txt", - "is_notebook": false - }, - { - "local_path": "databricks.yml", - "is_notebook": false - }, - { - "local_path": "sequential-deploys/out.requests.txt", - "is_notebook": false - }, - { - "local_path": "sequential-deploys/out.test.toml", - "is_notebook": false - } - ], - "id": "[UUID]" - } -} -{ - "method": "POST", - "path": "/api/2.2/jobs/create", - "body": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/metadata.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "config": { - "bundle": { - "name": "metadata-service-test", - "target": "default", - "git": { - "bundle_root_path": "." - } - }, - "workspace": { - "file_path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files" - }, - "resources": { - "jobs": { - "test_job": { - "id": "[NUMID]", - "relative_path": "databricks.yml" - } - } - }, - "presets": { - "source_linked_deployment": false - } - }, - "extra": {} - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", - "body": { - "name": "deployments/[UUID]/versions/1", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "POST", - "path": "/telemetry-ext", - "body": { - "uploadTime": [UNIX_TIME_MILLIS], - "items": [], - "protoLogs": [ - "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":90,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":1,\"resource_job_count\":1,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.miss\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":77},{\"key\":\"files.(upload)\",\"value\":67},{\"key\":\"phases.Initialize\",\"value\":8},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":3},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}],\"local_cache_measurements_ms\":[{\"key\":\"local.cache.compute_duration\",\"value\":0}]}}}}}" - ] - } -} diff --git a/acceptance/bundle/dms/out.test.toml b/acceptance/bundle/dms/out.test.toml deleted file mode 100644 index 6ce208a0484..00000000000 --- a/acceptance/bundle/dms/out.test.toml +++ /dev/null @@ -1,6 +0,0 @@ -Local = true -Cloud = false - -[EnvMatrix] - DATABRICKS_BUNDLE_ENGINE = ["direct"] - DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/output.txt b/acceptance/bundle/dms/output.txt index e00b914c324..7938a2b4f0c 100644 --- a/acceptance/bundle/dms/output.txt +++ b/acceptance/bundle/dms/output.txt @@ -8,10 +8,10 @@ Deployment complete! Traceback (most recent call last): File "[TESTROOT]/bin/print_requests.py", line 197, in main() - File "[TESTROOT]/bin/print_requests.py", line 172, in main - data = fobj.read() - File "/usr/lib/python3.6/encodings/ascii.py", line 26, in decode - return codecs.ascii_decode(input, self.errors)[0] -UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 22608: ordinal not in range(128) + File "[TESTROOT]/bin/print_requests.py", line 178, in main + filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort) + File "[TESTROOT]/bin/print_requests.py", line 114, in filter_requests + positive_filters.append(f.removeprefix(ADD_PREFIX)) +AttributeError: 'str' object has no attribute 'removeprefix' Exit code: 1 diff --git a/acceptance/bundle/dms/plan-and-summary/out.requests.txt b/acceptance/bundle/dms/plan-and-summary/out.requests.txt deleted file mode 100644 index b7d21bb27c7..00000000000 --- a/acceptance/bundle/dms/plan-and-summary/out.requests.txt +++ /dev/null @@ -1,596 +0,0 @@ -{ - "method": "GET", - "path": "/.well-known/databricks-config" -} -{ - "method": "GET", - "path": "/api/2.0/preview/scim/v2/Me" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json", - "q": { - "overwrite": "true" - }, - "body": { - "deployment_id": "[UUID]" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "1" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/delete", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal", - "recursive": true - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/out.requests.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files\"\n }\n}\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/output.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files...\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/script", - "q": { - "overwrite": "true" - }, - "raw_body": "errcode() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e' if it was previously set\n set -e\n if [ $exit_code -ne 0 ]; then\n \u003e\u00262 printf \"\\nExit code: $exit_code\\n\"\n fi\n}\n\nmusterr() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e'\n set -e\n if [ $exit_code -eq 0 ]; then\n \u003e\u00262 printf \"\\nUnexpected success\\n\"\n exit 1\n fi\n}\n\ntrace() {\n \u003e\u00262 printf \"\\n\u003e\u003e\u003e %s\\n\" \"$*\"\n\n if [[ \"$1\" == *\"=\"* ]]; then\n # If the first argument contains '=', collect all env vars\n local env_vars=()\n while [[ \"$1\" == *\"=\"* ]]; do\n env_vars+=(\"$1\")\n shift\n done\n # Export environment variables in a subshell and execute the command\n (\n export \"${env_vars[@]}\"\n \"$@\"\n )\n else\n # Execute the command normally\n \"$@\"\n fi\n\n return $?\n}\n\ngit-repo-init() {\n git init -qb main\n git config core.autocrlf false\n git config user.name \"Tester\"\n git config user.email \"[USERNAME]\"\n git config core.hooksPath no-hooks\n git add databricks.yml\n git commit -qm 'Add databricks.yml'\n}\n\ntitle() {\n local label=\"$1\"\n printf \"\\n=== %b\" \"$label\"\n}\n\nwithdir() {\n local dir=\"$1\"\n shift\n local orig_dir=\"$(pwd)\"\n cd \"$dir\" || return $?\n \"$@\"\n local exit_code=$?\n cd \"$orig_dir\" || return $?\n return $exit_code\n}\n\nuuid() {\n python3 -c 'import uuid; print(uuid.uuid4())'\n}\n\nvenv_activate() {\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"cygwin\" || \"$OSTYPE\" == \"win32\" ]]; then\n source .venv/Scripts/activate\n else\n source .venv/bin/activate\n fi\n}\n\nenvsubst() {\n # We need to disable MSYS_NO_PATHCONV when running the python script.\n # This is because the python interpreter is otherwise unable to find the python script\n # when MSYS_NO_PATHCONV is enabled.\n env -u MSYS_NO_PATHCONV envsubst.py\n}\n\nprint_telemetry_bool_values() {\n jq -r 'select(.path? == \"/telemetry-ext\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\"\\(.key) \\(.value)\") | .[]' out.requests.txt | sort\n}\n\nsethome() {\n local home=\"$1\"\n mkdir -p \"$home\"\n\n # For macOS and Linux, use HOME.\n export HOME=\"$home\"\n\n # For Windows, use USERPROFILE.\n export USERPROFILE=\"$home\"\n}\n\nas-test-sp() {\n if [[ -z \"$TEST_SP_TOKEN\" ]]; then\n echo \"Error: TEST_SP_TOKEN is not set.\" \u003e\u00262\n return 1\n fi\n\n DATABRICKS_TOKEN=\"$TEST_SP_TOKEN\" \\\n DATABRICKS_CLIENT_SECRET=\"\" \\\n DATABRICKS_CLIENT_ID=\"\" \\\n DATABRICKS_AUTH_TYPE=\"\" \\\n \"$@\"\n}\n\nreadplanarg() {\n # Expands into \"--plan \u003cfilename\u003e\" based on READPLAN env var\n # Use it with \"bundle deploy\" to configure two runs: once with saved plan and one without.\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\n if [[ -n \"$READPLAN\" ]]; then\n printf -- \"--plan %s\" \"$1\"\n else\n printf \"\"\n fi\n}\n\n(\n# Deploy first to populate DMS state.\ntrace $CLI bundle deploy\n\n# Plan should read state from DMS via ListResources.\ntrace $CLI bundle plan\n\n# Summary should show the deployment ID and read state from DMS.\ntrace $CLI bundle summary\n\n# Print metadata service requests from plan and summary.\n# Both should include ListResources calls.\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n\n# Clean up.\n$CLI bundle destroy --auto-approve \u003e /dev/null 2\u003e\u00261\n)\n\nrm -fr .databricks .gitignore\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/repls.json", - "q": { - "overwrite": "true" - }, - "body": [ - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/\\.terraformrc", - "New": "[DATABRICKS_TF_CLI_CONFIG_FILE]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/terraform", - "New": "[TERRAFORM]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/libs/vendored_py_packages", - "New": "[VENDORED_PY_PACKAGES]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\.296\\.0-py3-none-any\\.whl", - "New": "[DATABRICKS_BUNDLES_WHEEL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks", - "New": "[CLI]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/0\\.293\\.0/databricks", - "New": "[CLI_293]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_DEFAULT_WAREHOUSE_ID]", - "New": "[TEST_DEFAULT_WAREHOUSE_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_DEFAULT_CLUSTER_ID]", - "New": "[TEST_DEFAULT_CLUSTER_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_INSTANCE_POOL_ID]", - "New": "[TEST_INSTANCE_POOL_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64", - "New": "[BUILD_DIR]", - "Order": 0, - "Distinct": false - }, - { - "Old": "0\\.0\\.0-dev(\\+[a-f0-9]{10,16})?", - "New": "[DEV_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "databricks-sdk-go/[0-9]+\\.[0-9]+\\.[0-9]+", - "New": "databricks-sdk-go/[SDK_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "1\\.26\\.1", - "New": "[GO_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance", - "New": "[TESTROOT]", - "Order": 0, - "Distinct": false - }, - { - "Old": "dbapi[0-9a-f]+", - "New": "[DATABRICKS_TOKEN]", - "Order": 0, - "Distinct": false - }, - { - "Old": "i3\\.xlarge", - "New": "[NODE_TYPE_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[UNIQUE_NAME]", - "New": "[UNIQUE_NAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_TMP_DIR]", - "New": "[TEST_TMP_DIR]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_TMP_DIR]_PARENT", - "New": "[TEST_TMP_DIR]_PARENT", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERNAME]@databricks\\.com", - "New": "[USERNAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERNAME]", - "New": "[USERNAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERID]", - "New": "[USERID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "https://127\\.0\\.0\\.1:39837", - "New": "[DATABRICKS_URL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "http://127\\.0\\.0\\.1:39837", - "New": "[DATABRICKS_URL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "127\\.0\\.0\\.1:39837", - "New": "[DATABRICKS_HOST]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", - "New": "[UUID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "\\d{20,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{17}", - "New": "[UNIX_TIME_NANOS]", - "Order": 10, - "Distinct": true - }, - { - "Old": "\\d{17,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "\\d{14,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{11}", - "New": "[UNIX_TIME_MILLIS]", - "Order": 10, - "Distinct": true - }, - { - "Old": "\\d{11,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{8}", - "New": "[UNIX_TIME_S]", - "Order": 10, - "Distinct": false - }, - { - "Old": "\\d{8,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+(Z|\\+\\d\\d:\\d\\d)?", - "New": "[TIMESTAMP]", - "Order": 9, - "Distinct": false - }, - { - "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\dZ?", - "New": "[TIMESTAMP]", - "Order": 9, - "Distinct": false - }, - { - "Old": "[METASTORE_NAME]|[METASTORE_NAME]", - "New": "[METASTORE_NAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "", - "New": "", - "Order": 0, - "Distinct": false - }, - { - "Old": "\"protoLogs\": \\[.+\\]", - "New": "\"protoLogs\": [\"TELEMETRY\"]", - "Order": 0, - "Distinct": false - } - ] -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files/databricks.yml", - "q": { - "overwrite": "true" - }, - "raw_body": "bundle:\n name: plan-summary-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "seq": 1, - "cli_version": "[DEV_VERSION]", - "timestamp": "[TIMESTAMP]", - "files": [ - { - "local_path": "databricks.yml", - "is_notebook": false - }, - { - "local_path": "out.requests.txt", - "is_notebook": false - }, - { - "local_path": "output.txt", - "is_notebook": false - }, - { - "local_path": "repls.json", - "is_notebook": false - }, - { - "local_path": "script", - "is_notebook": false - } - ], - "id": "[UUID]" - } -} -{ - "method": "POST", - "path": "/api/2.2/jobs/create", - "body": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "config": { - "bundle": { - "name": "plan-summary-test", - "target": "default", - "git": { - "bundle_root_path": "." - } - }, - "workspace": { - "file_path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/files" - }, - "resources": { - "jobs": { - "test_job": { - "id": "[NUMID]", - "relative_path": "databricks.yml" - } - } - }, - "presets": { - "source_linked_deployment": false - } - }, - "extra": {} - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", - "body": { - "name": "deployments/[UUID]/versions/1", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "POST", - "path": "/telemetry-ext", - "body": { - "uploadTime": [UNIX_TIME_MILLIS], - "items": [], - "protoLogs": [ - "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":83,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":1,\"resource_job_count\":1,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.miss\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":69},{\"key\":\"deploy.(statePush)\",\"value\":54},{\"key\":\"phases.Initialize\",\"value\":8},{\"key\":\"files.(upload)\",\"value\":5},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":3},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}],\"local_cache_measurements_ms\":[{\"key\":\"local.cache.compute_duration\",\"value\":0}]}}}}}" - ] - } -} -{ - "method": "GET", - "path": "/.well-known/databricks-config" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json" -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/deployment.json" -} -{ - "method": "GET", - "path": "/api/2.2/jobs/get", - "q": { - "job_id": "[NUMID]" - } -} -{ - "method": "GET", - "path": "/.well-known/databricks-config" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/resources.json" -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} -{ - "method": "GET", - "path": "/api/2.0/preview/scim/v2/Me" -} diff --git a/acceptance/bundle/dms/plan-and-summary/out.test.toml b/acceptance/bundle/dms/plan-and-summary/out.test.toml deleted file mode 100644 index 6ce208a0484..00000000000 --- a/acceptance/bundle/dms/plan-and-summary/out.test.toml +++ /dev/null @@ -1,6 +0,0 @@ -Local = true -Cloud = false - -[EnvMatrix] - DATABRICKS_BUNDLE_ENGINE = ["direct"] - DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/plan-and-summary/script b/acceptance/bundle/dms/plan-and-summary/script index b508eb45dae..a662938cca9 100644 --- a/acceptance/bundle/dms/plan-and-summary/script +++ b/acceptance/bundle/dms/plan-and-summary/script @@ -13,3 +13,4 @@ trace print_requests.py --get //bundle ^//workspace-files ^//import-file # Clean up. $CLI bundle destroy --auto-approve > /dev/null 2>&1 +print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/release-lock-error/out.requests.txt b/acceptance/bundle/dms/release-lock-error/out.requests.txt deleted file mode 100644 index fb028a4e993..00000000000 --- a/acceptance/bundle/dms/release-lock-error/out.requests.txt +++ /dev/null @@ -1,537 +0,0 @@ -{ - "method": "GET", - "path": "/.well-known/databricks-config" -} -{ - "method": "GET", - "path": "/api/2.0/preview/scim/v2/Me" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/deployment.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json", - "q": { - "overwrite": "true" - }, - "body": { - "deployment_id": "[UUID]" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "fail-complete" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "1" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "fail-complete" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/delete", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal", - "recursive": true - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/output.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files...\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/databricks.yml", - "q": { - "overwrite": "true" - }, - "raw_body": "bundle:\n name: dms-release-lock-error\n\ntargets:\n fail-complete:\n default: true\n\nresources:\n jobs:\n test_job:\n name: test-job\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/repls.json", - "q": { - "overwrite": "true" - }, - "body": [ - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/\\.terraformrc", - "New": "[DATABRICKS_TF_CLI_CONFIG_FILE]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/terraform", - "New": "[TERRAFORM]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/libs/vendored_py_packages", - "New": "[VENDORED_PY_PACKAGES]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\.296\\.0-py3-none-any\\.whl", - "New": "[DATABRICKS_BUNDLES_WHEEL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks", - "New": "[CLI]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/0\\.293\\.0/databricks", - "New": "[CLI_293]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_DEFAULT_WAREHOUSE_ID]", - "New": "[TEST_DEFAULT_WAREHOUSE_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_DEFAULT_CLUSTER_ID]", - "New": "[TEST_DEFAULT_CLUSTER_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_INSTANCE_POOL_ID]", - "New": "[TEST_INSTANCE_POOL_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64", - "New": "[BUILD_DIR]", - "Order": 0, - "Distinct": false - }, - { - "Old": "0\\.0\\.0-dev(\\+[a-f0-9]{10,16})?", - "New": "[DEV_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "databricks-sdk-go/[0-9]+\\.[0-9]+\\.[0-9]+", - "New": "databricks-sdk-go/[SDK_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "1\\.26\\.1", - "New": "[GO_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance", - "New": "[TESTROOT]", - "Order": 0, - "Distinct": false - }, - { - "Old": "dbapi[0-9a-f]+", - "New": "[DATABRICKS_TOKEN]", - "Order": 0, - "Distinct": false - }, - { - "Old": "i3\\.xlarge", - "New": "[NODE_TYPE_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[UNIQUE_NAME]", - "New": "[UNIQUE_NAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_TMP_DIR]", - "New": "[TEST_TMP_DIR]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_TMP_DIR]_PARENT", - "New": "[TEST_TMP_DIR]_PARENT", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERNAME]@databricks\\.com", - "New": "[USERNAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERNAME]", - "New": "[USERNAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERID]", - "New": "[USERID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "https://127\\.0\\.0\\.1:42233", - "New": "[DATABRICKS_URL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "http://127\\.0\\.0\\.1:42233", - "New": "[DATABRICKS_URL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "127\\.0\\.0\\.1:42233", - "New": "[DATABRICKS_HOST]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", - "New": "[UUID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "\\d{20,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{17}", - "New": "[UNIX_TIME_NANOS]", - "Order": 10, - "Distinct": true - }, - { - "Old": "\\d{17,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "\\d{14,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{11}", - "New": "[UNIX_TIME_MILLIS]", - "Order": 10, - "Distinct": true - }, - { - "Old": "\\d{11,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{8}", - "New": "[UNIX_TIME_S]", - "Order": 10, - "Distinct": false - }, - { - "Old": "\\d{8,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+(Z|\\+\\d\\d:\\d\\d)?", - "New": "[TIMESTAMP]", - "Order": 9, - "Distinct": false - }, - { - "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\dZ?", - "New": "[TIMESTAMP]", - "Order": 9, - "Distinct": false - }, - { - "Old": "[METASTORE_NAME]|[METASTORE_NAME]", - "New": "[METASTORE_NAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "", - "New": "", - "Order": 0, - "Distinct": false - }, - { - "Old": "\"protoLogs\": \\[.+\\]", - "New": "\"protoLogs\": [\"TELEMETRY\"]", - "Order": 0, - "Distinct": false - } - ] -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/out.requests.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"fail-complete\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"fail-complete\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files\"\n }\n}\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/test.toml", - "q": { - "overwrite": "true" - }, - "raw_body": "# Override target to \"fail-complete\" which makes the test server's\n# CompleteVersion endpoint return an error, simulating a release failure.\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files/script", - "q": { - "overwrite": "true" - }, - "raw_body": "errcode() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e' if it was previously set\n set -e\n if [ $exit_code -ne 0 ]; then\n \u003e\u00262 printf \"\\nExit code: $exit_code\\n\"\n fi\n}\n\nmusterr() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e'\n set -e\n if [ $exit_code -eq 0 ]; then\n \u003e\u00262 printf \"\\nUnexpected success\\n\"\n exit 1\n fi\n}\n\ntrace() {\n \u003e\u00262 printf \"\\n\u003e\u003e\u003e %s\\n\" \"$*\"\n\n if [[ \"$1\" == *\"=\"* ]]; then\n # If the first argument contains '=', collect all env vars\n local env_vars=()\n while [[ \"$1\" == *\"=\"* ]]; do\n env_vars+=(\"$1\")\n shift\n done\n # Export environment variables in a subshell and execute the command\n (\n export \"${env_vars[@]}\"\n \"$@\"\n )\n else\n # Execute the command normally\n \"$@\"\n fi\n\n return $?\n}\n\ngit-repo-init() {\n git init -qb main\n git config core.autocrlf false\n git config user.name \"Tester\"\n git config user.email \"[USERNAME]\"\n git config core.hooksPath no-hooks\n git add databricks.yml\n git commit -qm 'Add databricks.yml'\n}\n\ntitle() {\n local label=\"$1\"\n printf \"\\n=== %b\" \"$label\"\n}\n\nwithdir() {\n local dir=\"$1\"\n shift\n local orig_dir=\"$(pwd)\"\n cd \"$dir\" || return $?\n \"$@\"\n local exit_code=$?\n cd \"$orig_dir\" || return $?\n return $exit_code\n}\n\nuuid() {\n python3 -c 'import uuid; print(uuid.uuid4())'\n}\n\nvenv_activate() {\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"cygwin\" || \"$OSTYPE\" == \"win32\" ]]; then\n source .venv/Scripts/activate\n else\n source .venv/bin/activate\n fi\n}\n\nenvsubst() {\n # We need to disable MSYS_NO_PATHCONV when running the python script.\n # This is because the python interpreter is otherwise unable to find the python script\n # when MSYS_NO_PATHCONV is enabled.\n env -u MSYS_NO_PATHCONV envsubst.py\n}\n\nprint_telemetry_bool_values() {\n jq -r 'select(.path? == \"/telemetry-ext\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\"\\(.key) \\(.value)\") | .[]' out.requests.txt | sort\n}\n\nsethome() {\n local home=\"$1\"\n mkdir -p \"$home\"\n\n # For macOS and Linux, use HOME.\n export HOME=\"$home\"\n\n # For Windows, use USERPROFILE.\n export USERPROFILE=\"$home\"\n}\n\nas-test-sp() {\n if [[ -z \"$TEST_SP_TOKEN\" ]]; then\n echo \"Error: TEST_SP_TOKEN is not set.\" \u003e\u00262\n return 1\n fi\n\n DATABRICKS_TOKEN=\"$TEST_SP_TOKEN\" \\\n DATABRICKS_CLIENT_SECRET=\"\" \\\n DATABRICKS_CLIENT_ID=\"\" \\\n DATABRICKS_AUTH_TYPE=\"\" \\\n \"$@\"\n}\n\nreadplanarg() {\n # Expands into \"--plan \u003cfilename\u003e\" based on READPLAN env var\n # Use it with \"bundle deploy\" to configure two runs: once with saved plan and one without.\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\n if [[ -n \"$READPLAN\" ]]; then\n printf -- \"--plan %s\" \"$1\"\n else\n printf \"\"\n fi\n}\n\n(\n# Deploy with the metadata service enabled.\n# The target name \"fail-complete\" triggers a simulated error on the\n# CompleteVersion endpoint (release lock), so deploy should warn about\n# the failed lock release.\ntrace $CLI bundle deploy\n\n# Print the metadata service requests to verify the lock release was attempted.\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n)\n\nrm -fr .databricks .gitignore\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/deployment.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "seq": 1, - "cli_version": "[DEV_VERSION]", - "timestamp": "[TIMESTAMP]", - "files": [ - { - "local_path": "out.requests.txt", - "is_notebook": false - }, - { - "local_path": "output.txt", - "is_notebook": false - }, - { - "local_path": "repls.json", - "is_notebook": false - }, - { - "local_path": "script", - "is_notebook": false - }, - { - "local_path": "test.toml", - "is_notebook": false - }, - { - "local_path": "databricks.yml", - "is_notebook": false - } - ], - "id": "[UUID]" - } -} -{ - "method": "POST", - "path": "/api/2.2/jobs/create", - "body": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "config": { - "bundle": { - "name": "dms-release-lock-error", - "target": "fail-complete", - "git": { - "bundle_root_path": "." - } - }, - "workspace": { - "file_path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/files" - }, - "resources": { - "jobs": { - "test_job": { - "id": "[NUMID]", - "relative_path": "databricks.yml" - } - } - }, - "presets": { - "source_linked_deployment": false - } - }, - "extra": {} - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", - "body": { - "name": "deployments/[UUID]/versions/1", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "POST", - "path": "/telemetry-ext", - "body": { - "uploadTime": [UNIX_TIME_MILLIS], - "items": [], - "protoLogs": [ - "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":78,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":1,\"resource_job_count\":1,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.miss\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":65},{\"key\":\"phases.Initialize\",\"value\":7},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":3},{\"key\":\"files.(upload)\",\"value\":3},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}],\"local_cache_measurements_ms\":[{\"key\":\"local.cache.compute_duration\",\"value\":0}]}}}}}" - ] - } -} diff --git a/acceptance/bundle/dms/release-lock-error/out.test.toml b/acceptance/bundle/dms/release-lock-error/out.test.toml deleted file mode 100644 index 6ce208a0484..00000000000 --- a/acceptance/bundle/dms/release-lock-error/out.test.toml +++ /dev/null @@ -1,6 +0,0 @@ -Local = true -Cloud = false - -[EnvMatrix] - DATABRICKS_BUNDLE_ENGINE = ["direct"] - DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/release-lock-error/script b/acceptance/bundle/dms/release-lock-error/script index 1223233a0b0..a9c0de93c97 100644 --- a/acceptance/bundle/dms/release-lock-error/script +++ b/acceptance/bundle/dms/release-lock-error/script @@ -6,3 +6,4 @@ trace $CLI bundle deploy # Print the metadata service requests to verify the lock release was attempted. trace print_requests.py --get //bundle ^//workspace-files ^//import-file +print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/release-lock-error/test.toml b/acceptance/bundle/dms/release-lock-error/test.toml index 1910e961352..a721baa4f63 100644 --- a/acceptance/bundle/dms/release-lock-error/test.toml +++ b/acceptance/bundle/dms/release-lock-error/test.toml @@ -1,2 +1,4 @@ +Ignore = [".databricks"] + # Override target to "fail-complete" which makes the test server's # CompleteVersion endpoint return an error, simulating a release failure. diff --git a/acceptance/bundle/dms/script b/acceptance/bundle/dms/script index 5a8ae88a294..42317266068 100644 --- a/acceptance/bundle/dms/script +++ b/acceptance/bundle/dms/script @@ -9,3 +9,6 @@ trace $CLI bundle destroy --auto-approve # Print all metadata service requests made during destroy. trace print_requests.py --get //bundle ^//workspace-files ^//import-file + +# Clear any remaining recorded requests. +print_requests.py --get > /dev/null 2>&1 || true diff --git a/acceptance/bundle/dms/sequential-deploys/out.requests.txt b/acceptance/bundle/dms/sequential-deploys/out.requests.txt deleted file mode 100644 index d00b5a8ca67..00000000000 --- a/acceptance/bundle/dms/sequential-deploys/out.requests.txt +++ /dev/null @@ -1,1031 +0,0 @@ -{ - "method": "GET", - "path": "/.well-known/databricks-config" -} -{ - "method": "GET", - "path": "/api/2.0/preview/scim/v2/Me" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json", - "q": { - "overwrite": "true" - }, - "body": { - "deployment_id": "[UUID]" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "1" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/delete", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal", - "recursive": true - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml", - "q": { - "overwrite": "true" - }, - "raw_body": "Ignore = [\".databricks\"]\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml", - "q": { - "overwrite": "true" - }, - "raw_body": "bundle:\n name: sequential-deploys-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json", - "q": { - "overwrite": "true" - }, - "body": [ - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/\\.terraformrc", - "New": "[DATABRICKS_TF_CLI_CONFIG_FILE]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/terraform", - "New": "[TERRAFORM]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/libs/vendored_py_packages", - "New": "[VENDORED_PY_PACKAGES]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\.296\\.0-py3-none-any\\.whl", - "New": "[DATABRICKS_BUNDLES_WHEEL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/databricks", - "New": "[CLI]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64/0\\.293\\.0/databricks", - "New": "[CLI_293]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_DEFAULT_WAREHOUSE_ID]", - "New": "[TEST_DEFAULT_WAREHOUSE_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_DEFAULT_CLUSTER_ID]", - "New": "[TEST_DEFAULT_CLUSTER_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_INSTANCE_POOL_ID]", - "New": "[TEST_INSTANCE_POOL_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance/build/linux_amd64", - "New": "[BUILD_DIR]", - "Order": 0, - "Distinct": false - }, - { - "Old": "0\\.0\\.0-dev(\\+[a-f0-9]{10,16})?", - "New": "[DEV_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "databricks-sdk-go/[0-9]+\\.[0-9]+\\.[0-9]+", - "New": "databricks-sdk-go/[SDK_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "1\\.26\\.1", - "New": "[GO_VERSION]", - "Order": 0, - "Distinct": false - }, - { - "Old": "/home/shreyas\\.goenka/cli/acceptance", - "New": "[TESTROOT]", - "Order": 0, - "Distinct": false - }, - { - "Old": "dbapi[0-9a-f]+", - "New": "[DATABRICKS_TOKEN]", - "Order": 0, - "Distinct": false - }, - { - "Old": "i3\\.xlarge", - "New": "[NODE_TYPE_ID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[UNIQUE_NAME]", - "New": "[UNIQUE_NAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_TMP_DIR]", - "New": "[TEST_TMP_DIR]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[TEST_TMP_DIR]_PARENT", - "New": "[TEST_TMP_DIR]_PARENT", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERNAME]@databricks\\.com", - "New": "[USERNAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERNAME]", - "New": "[USERNAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[USERID]", - "New": "[USERID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "https://127\\.0\\.0\\.1:42447", - "New": "[DATABRICKS_URL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "http://127\\.0\\.0\\.1:42447", - "New": "[DATABRICKS_URL]", - "Order": 0, - "Distinct": false - }, - { - "Old": "127\\.0\\.0\\.1:42447", - "New": "[DATABRICKS_HOST]", - "Order": 0, - "Distinct": false - }, - { - "Old": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", - "New": "[UUID]", - "Order": 0, - "Distinct": false - }, - { - "Old": "\\d{20,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{17}", - "New": "[UNIX_TIME_NANOS]", - "Order": 10, - "Distinct": true - }, - { - "Old": "\\d{17,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "\\d{14,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{11}", - "New": "[UNIX_TIME_MILLIS]", - "Order": 10, - "Distinct": true - }, - { - "Old": "\\d{11,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "1[78]\\d{8}", - "New": "[UNIX_TIME_S]", - "Order": 10, - "Distinct": false - }, - { - "Old": "\\d{8,}", - "New": "[NUMID]", - "Order": 10, - "Distinct": false - }, - { - "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+(Z|\\+\\d\\d:\\d\\d)?", - "New": "[TIMESTAMP]", - "Order": 9, - "Distinct": false - }, - { - "Old": "2\\d\\d\\d-\\d\\d-\\d\\d(T| )\\d\\d:\\d\\d:\\d\\dZ?", - "New": "[TIMESTAMP]", - "Order": 9, - "Distinct": false - }, - { - "Old": "[METASTORE_NAME]|[METASTORE_NAME]", - "New": "[METASTORE_NAME]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "os/[OS]", - "New": "os/[OS]", - "Order": 0, - "Distinct": false - }, - { - "Old": "", - "New": "", - "Order": 0, - "Distinct": false - }, - { - "Old": "\"protoLogs\": \\[.+\\]", - "New": "\"protoLogs\": [\"TELEMETRY\"]", - "Order": 0, - "Distinct": false - } - ] -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script", - "q": { - "overwrite": "true" - }, - "raw_body": "errcode() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e' if it was previously set\n set -e\n if [ $exit_code -ne 0 ]; then\n \u003e\u00262 printf \"\\nExit code: $exit_code\\n\"\n fi\n}\n\nmusterr() {\n # Temporarily disable 'set -e' to prevent the script from exiting on error\n set +e\n # Execute the provided command with all arguments\n \"$@\"\n local exit_code=$?\n # Re-enable 'set -e'\n set -e\n if [ $exit_code -eq 0 ]; then\n \u003e\u00262 printf \"\\nUnexpected success\\n\"\n exit 1\n fi\n}\n\ntrace() {\n \u003e\u00262 printf \"\\n\u003e\u003e\u003e %s\\n\" \"$*\"\n\n if [[ \"$1\" == *\"=\"* ]]; then\n # If the first argument contains '=', collect all env vars\n local env_vars=()\n while [[ \"$1\" == *\"=\"* ]]; do\n env_vars+=(\"$1\")\n shift\n done\n # Export environment variables in a subshell and execute the command\n (\n export \"${env_vars[@]}\"\n \"$@\"\n )\n else\n # Execute the command normally\n \"$@\"\n fi\n\n return $?\n}\n\ngit-repo-init() {\n git init -qb main\n git config core.autocrlf false\n git config user.name \"Tester\"\n git config user.email \"[USERNAME]\"\n git config core.hooksPath no-hooks\n git add databricks.yml\n git commit -qm 'Add databricks.yml'\n}\n\ntitle() {\n local label=\"$1\"\n printf \"\\n=== %b\" \"$label\"\n}\n\nwithdir() {\n local dir=\"$1\"\n shift\n local orig_dir=\"$(pwd)\"\n cd \"$dir\" || return $?\n \"$@\"\n local exit_code=$?\n cd \"$orig_dir\" || return $?\n return $exit_code\n}\n\nuuid() {\n python3 -c 'import uuid; print(uuid.uuid4())'\n}\n\nvenv_activate() {\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"cygwin\" || \"$OSTYPE\" == \"win32\" ]]; then\n source .venv/Scripts/activate\n else\n source .venv/bin/activate\n fi\n}\n\nenvsubst() {\n # We need to disable MSYS_NO_PATHCONV when running the python script.\n # This is because the python interpreter is otherwise unable to find the python script\n # when MSYS_NO_PATHCONV is enabled.\n env -u MSYS_NO_PATHCONV envsubst.py\n}\n\nprint_telemetry_bool_values() {\n jq -r 'select(.path? == \"/telemetry-ext\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\"\\(.key) \\(.value)\") | .[]' out.requests.txt | sort\n}\n\nsethome() {\n local home=\"$1\"\n mkdir -p \"$home\"\n\n # For macOS and Linux, use HOME.\n export HOME=\"$home\"\n\n # For Windows, use USERPROFILE.\n export USERPROFILE=\"$home\"\n}\n\nas-test-sp() {\n if [[ -z \"$TEST_SP_TOKEN\" ]]; then\n echo \"Error: TEST_SP_TOKEN is not set.\" \u003e\u00262\n return 1\n fi\n\n DATABRICKS_TOKEN=\"$TEST_SP_TOKEN\" \\\n DATABRICKS_CLIENT_SECRET=\"\" \\\n DATABRICKS_CLIENT_ID=\"\" \\\n DATABRICKS_AUTH_TYPE=\"\" \\\n \"$@\"\n}\n\nreadplanarg() {\n # Expands into \"--plan \u003cfilename\u003e\" based on READPLAN env var\n # Use it with \"bundle deploy\" to configure two runs: once with saved plan and one without.\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\n if [[ -n \"$READPLAN\" ]]; then\n printf -- \"--plan %s\" \"$1\"\n else\n printf \"\"\n fi\n}\n\n(\n# Deploy with one job.\ntrace $CLI bundle deploy\n\n# Add a second job and redeploy.\ncat \u003e databricks.yml \u003c\u003c 'EOF'\nbundle:\n name: sequential-deploys-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n new_job:\n name: new-job\nEOF\ntrace $CLI bundle deploy\n\n# Remove the first job and redeploy (should delete test_job).\ncat \u003e databricks.yml \u003c\u003c 'EOF'\nbundle:\n name: sequential-deploys-test\n\nresources:\n jobs:\n new_job:\n name: new-job\nEOF\ntrace $CLI bundle deploy\n\n# Print metadata service requests across all three deploys.\n# Version 1: CREATE test_job\n# Version 2: CREATE new_job (test_job unchanged)\n# Version 3: DELETE test_job (new_job unchanged)\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\n)\n\nrm -fr .databricks .gitignore\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "seq": 1, - "cli_version": "[DEV_VERSION]", - "timestamp": "[TIMESTAMP]", - "files": [ - { - "local_path": "test.toml", - "is_notebook": false - }, - { - "local_path": "databricks.yml", - "is_notebook": false - }, - { - "local_path": "out.requests.txt", - "is_notebook": false - }, - { - "local_path": "output.txt", - "is_notebook": false - }, - { - "local_path": "repls.json", - "is_notebook": false - }, - { - "local_path": "script", - "is_notebook": false - } - ], - "id": "[UUID]" - } -} -{ - "method": "POST", - "path": "/api/2.2/jobs/create", - "body": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "config": { - "bundle": { - "name": "sequential-deploys-test", - "target": "default", - "git": { - "bundle_root_path": "." - } - }, - "workspace": { - "file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" - }, - "resources": { - "jobs": { - "test_job": { - "id": "[NUMID]", - "relative_path": "databricks.yml" - } - } - }, - "presets": { - "source_linked_deployment": false - } - }, - "extra": {} - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", - "body": { - "name": "deployments/[UUID]/versions/1", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "POST", - "path": "/telemetry-ext", - "body": { - "uploadTime": [UNIX_TIME_MILLIS][0], - "items": [], - "protoLogs": [ - "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":86,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":1,\"resource_job_count\":1,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.miss\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":68},{\"key\":\"artifacts.(cleanUp)\",\"value\":55},{\"key\":\"phases.Initialize\",\"value\":12},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":5},{\"key\":\"files.(upload)\",\"value\":3},{\"key\":\"metadata.(annotatePipelines)\",\"value\":1},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}],\"local_cache_measurements_ms\":[{\"key\":\"local.cache.compute_duration\",\"value\":0}]}}}}}" - ] - } -} -{ - "method": "GET", - "path": "/.well-known/databricks-config" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json" -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json" -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "2" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/delete", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal", - "recursive": true - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml", - "q": { - "overwrite": "true" - }, - "raw_body": "bundle:\n name: sequential-deploys-test\n\nresources:\n jobs:\n test_job:\n name: test-job\n new_job:\n name: new-job\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"Ignore = [\\\".databricks\\\"]\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:42447\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:42447\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:42447\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with one job.\\ntrace $CLI bundle deploy\\n\\n# Add a second job and redeploy.\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n new_job:\\n name: new-job\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Remove the first job and redeploy (should delete test_job).\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n new_job:\\n name: new-job\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Print metadata service requests across all three deploys.\\n# Version 1: CREATE test_job\\n# Version 2: CREATE new_job (test_job unchanged)\\n# Version 3: DELETE test_job (new_job unchanged)\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.test_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.test_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"sequential-deploys-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"test_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][0],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":86,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":68},{\\\"key\\\":\\\"artifacts.(cleanUp)\\\",\\\"value\\\":55},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":12},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":5},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"metadata.(annotatePipelines)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"2\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "seq": 2, - "cli_version": "[DEV_VERSION]", - "timestamp": "[TIMESTAMP]", - "files": [ - { - "local_path": "databricks.yml", - "is_notebook": false - }, - { - "local_path": "out.requests.txt", - "is_notebook": false - }, - { - "local_path": "output.txt", - "is_notebook": false - }, - { - "local_path": "repls.json", - "is_notebook": false - }, - { - "local_path": "script", - "is_notebook": false - }, - { - "local_path": "test.toml", - "is_notebook": false - } - ], - "id": "[UUID]" - } -} -{ - "method": "GET", - "path": "/api/2.2/jobs/get", - "q": { - "job_id": "[NUMID]" - } -} -{ - "method": "POST", - "path": "/api/2.2/jobs/create", - "body": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "new-job", - "queue": { - "enabled": true - } - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", - "q": { - "resource_key": "jobs.new_job" - }, - "body": { - "resource_key": "jobs.new_job", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "new-job", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "config": { - "bundle": { - "name": "sequential-deploys-test", - "target": "default", - "git": { - "bundle_root_path": "." - } - }, - "workspace": { - "file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" - }, - "resources": { - "jobs": { - "new_job": { - "id": "[NUMID]", - "relative_path": "databricks.yml" - }, - "test_job": { - "id": "[NUMID]", - "relative_path": "databricks.yml" - } - } - }, - "presets": { - "source_linked_deployment": false - } - }, - "extra": {} - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", - "body": { - "name": "deployments/[UUID]/versions/2", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "POST", - "path": "/telemetry-ext", - "body": { - "uploadTime": [UNIX_TIME_MILLIS][1], - "items": [], - "protoLogs": [ - "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":27,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":2,\"resource_job_count\":2,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\",\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.hit\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":12},{\"key\":\"phases.Initialize\",\"value\":8},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":3},{\"key\":\"files.(upload)\",\"value\":3},{\"key\":\"validate.(required)\",\"value\":1},{\"key\":\"phases.Build\",\"value\":1},{\"key\":\"validate.FastValidate\",\"value\":0}]}}}}}" - ] - } -} -{ - "method": "GET", - "path": "/.well-known/databricks-config" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json" -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json" -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json", - "return_export_info": "true" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json" -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "3" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/delete", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal", - "recursive": true - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace/mkdirs", - "body": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal" - } -} -{ - "method": "GET", - "path": "/api/2.0/workspace/get-status", - "q": { - "path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\nDeploying resources...\nDeployment complete!\n\n\u003e\u003e\u003e [CLI] bundle deploy\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml", - "q": { - "overwrite": "true" - }, - "raw_body": "bundle:\n name: sequential-deploys-test\n\nresources:\n jobs:\n new_job:\n name: new-job\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt", - "q": { - "overwrite": "true" - }, - "raw_body": "{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/preview/scim/v2/Me\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"deployment_id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments\",\n \"q\": {\n \"deployment_id\": \"[UUID]\"\n },\n \"body\": {\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"1\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"Ignore = [\\\".databricks\\\"]\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": [\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\.terraformrc\",\n \"New\": \"[DATABRICKS_TF_CLI_CONFIG_FILE]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\",\n \"New\": \"[TERRAFORM]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/libs/vendored_py_packages\",\n \"New\": \"[VENDORED_PY_PACKAGES]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\.296\\\\.0-py3-none-any\\\\.whl\",\n \"New\": \"[DATABRICKS_BUNDLES_WHEEL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\",\n \"New\": \"[CLI]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\.293\\\\.0/databricks\",\n \"New\": \"[CLI_293]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"New\": \"[TEST_DEFAULT_WAREHOUSE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"New\": \"[TEST_DEFAULT_CLUSTER_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_INSTANCE_POOL_ID]\",\n \"New\": \"[TEST_INSTANCE_POOL_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance/build/linux_amd64\",\n \"New\": \"[BUILD_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"0\\\\.0\\\\.0-dev(\\\\+[a-f0-9]{10,16})?\",\n \"New\": \"[DEV_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"databricks-sdk-go/[0-9]+\\\\.[0-9]+\\\\.[0-9]+\",\n \"New\": \"databricks-sdk-go/[SDK_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"1\\\\.26\\\\.1\",\n \"New\": \"[GO_VERSION]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"/home/shreyas\\\\.goenka/cli/acceptance\",\n \"New\": \"[TESTROOT]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"dbapi[0-9a-f]+\",\n \"New\": \"[DATABRICKS_TOKEN]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"i3\\\\.xlarge\",\n \"New\": \"[NODE_TYPE_ID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[UNIQUE_NAME]\",\n \"New\": \"[UNIQUE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]\",\n \"New\": \"[TEST_TMP_DIR]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[TEST_TMP_DIR]_PARENT\",\n \"New\": \"[TEST_TMP_DIR]_PARENT\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]@databricks\\\\.com\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERNAME]\",\n \"New\": \"[USERNAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[USERID]\",\n \"New\": \"[USERID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"https://127\\\\.0\\\\.0\\\\.1:42447\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"http://127\\\\.0\\\\.0\\\\.1:42447\",\n \"New\": \"[DATABRICKS_URL]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"127\\\\.0\\\\.0\\\\.1:42447\",\n \"New\": \"[DATABRICKS_HOST]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n \"New\": \"[UUID]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{20,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{17}\",\n \"New\": \"[UNIX_TIME_NANOS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{17,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{14,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{11}\",\n \"New\": \"[UNIX_TIME_MILLIS]\",\n \"Order\": 10,\n \"Distinct\": true\n },\n {\n \"Old\": \"\\\\d{11,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"1[78]\\\\d{8}\",\n \"New\": \"[UNIX_TIME_S]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\\d{8,}\",\n \"New\": \"[NUMID]\",\n \"Order\": 10,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+(Z|\\\\+\\\\d\\\\d:\\\\d\\\\d)?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"2\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d(T| )\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\dZ?\",\n \"New\": \"[TIMESTAMP]\",\n \"Order\": 9,\n \"Distinct\": false\n },\n {\n \"Old\": \"[METASTORE_NAME]|[METASTORE_NAME]\",\n \"New\": \"[METASTORE_NAME]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"os/[OS]\",\n \"New\": \"os/[OS]\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\",\n \"New\": \"\",\n \"Order\": 0,\n \"Distinct\": false\n },\n {\n \"Old\": \"\\\"protoLogs\\\": \\\\[.+\\\\]\",\n \"New\": \"\\\"protoLogs\\\": [\\\"TELEMETRY\\\"]\",\n \"Order\": 0,\n \"Distinct\": false\n }\n ]\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"errcode() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e' if it was previously set\\n set -e\\n if [ $exit_code -ne 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nExit code: $exit_code\\\\n\\\"\\n fi\\n}\\n\\nmusterr() {\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\n set +e\\n # Execute the provided command with all arguments\\n \\\"$@\\\"\\n local exit_code=$?\\n # Re-enable 'set -e'\\n set -e\\n if [ $exit_code -eq 0 ]; then\\n \\u003e\\u00262 printf \\\"\\\\nUnexpected success\\\\n\\\"\\n exit 1\\n fi\\n}\\n\\ntrace() {\\n \\u003e\\u00262 printf \\\"\\\\n\\u003e\\u003e\\u003e %s\\\\n\\\" \\\"$*\\\"\\n\\n if [[ \\\"$1\\\" == *\\\"=\\\"* ]]; then\\n # If the first argument contains '=', collect all env vars\\n local env_vars=()\\n while [[ \\\"$1\\\" == *\\\"=\\\"* ]]; do\\n env_vars+=(\\\"$1\\\")\\n shift\\n done\\n # Export environment variables in a subshell and execute the command\\n (\\n export \\\"${env_vars[@]}\\\"\\n \\\"$@\\\"\\n )\\n else\\n # Execute the command normally\\n \\\"$@\\\"\\n fi\\n\\n return $?\\n}\\n\\ngit-repo-init() {\\n git init -qb main\\n git config core.autocrlf false\\n git config user.name \\\"Tester\\\"\\n git config user.email \\\"[USERNAME]\\\"\\n git config core.hooksPath no-hooks\\n git add databricks.yml\\n git commit -qm 'Add databricks.yml'\\n}\\n\\ntitle() {\\n local label=\\\"$1\\\"\\n printf \\\"\\\\n=== %b\\\" \\\"$label\\\"\\n}\\n\\nwithdir() {\\n local dir=\\\"$1\\\"\\n shift\\n local orig_dir=\\\"$(pwd)\\\"\\n cd \\\"$dir\\\" || return $?\\n \\\"$@\\\"\\n local exit_code=$?\\n cd \\\"$orig_dir\\\" || return $?\\n return $exit_code\\n}\\n\\nuuid() {\\n python3 -c 'import uuid; print(uuid.uuid4())'\\n}\\n\\nvenv_activate() {\\n if [[ \\\"$OSTYPE\\\" == \\\"msys\\\" || \\\"$OSTYPE\\\" == \\\"cygwin\\\" || \\\"$OSTYPE\\\" == \\\"win32\\\" ]]; then\\n source .venv/Scripts/activate\\n else\\n source .venv/bin/activate\\n fi\\n}\\n\\nenvsubst() {\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\n # This is because the python interpreter is otherwise unable to find the python script\\n # when MSYS_NO_PATHCONV is enabled.\\n env -u MSYS_NO_PATHCONV envsubst.py\\n}\\n\\nprint_telemetry_bool_values() {\\n jq -r 'select(.path? == \\\"/telemetry-ext\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\"\\\\(.key) \\\\(.value)\\\") | .[]' out.requests.txt | sort\\n}\\n\\nsethome() {\\n local home=\\\"$1\\\"\\n mkdir -p \\\"$home\\\"\\n\\n # For macOS and Linux, use HOME.\\n export HOME=\\\"$home\\\"\\n\\n # For Windows, use USERPROFILE.\\n export USERPROFILE=\\\"$home\\\"\\n}\\n\\nas-test-sp() {\\n if [[ -z \\\"$TEST_SP_TOKEN\\\" ]]; then\\n echo \\\"Error: TEST_SP_TOKEN is not set.\\\" \\u003e\\u00262\\n return 1\\n fi\\n\\n DATABRICKS_TOKEN=\\\"$TEST_SP_TOKEN\\\" \\\\\\n DATABRICKS_CLIENT_SECRET=\\\"\\\" \\\\\\n DATABRICKS_CLIENT_ID=\\\"\\\" \\\\\\n DATABRICKS_AUTH_TYPE=\\\"\\\" \\\\\\n \\\"$@\\\"\\n}\\n\\nreadplanarg() {\\n # Expands into \\\"--plan \\u003cfilename\\u003e\\\" based on READPLAN env var\\n # Use it with \\\"bundle deploy\\\" to configure two runs: once with saved plan and one without.\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\n if [[ -n \\\"$READPLAN\\\" ]]; then\\n printf -- \\\"--plan %s\\\" \\\"$1\\\"\\n else\\n printf \\\"\\\"\\n fi\\n}\\n\\n(\\n# Deploy with one job.\\ntrace $CLI bundle deploy\\n\\n# Add a second job and redeploy.\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n new_job:\\n name: new-job\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Remove the first job and redeploy (should delete test_job).\\ncat \\u003e databricks.yml \\u003c\\u003c 'EOF'\\nbundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n new_job:\\n name: new-job\\nEOF\\ntrace $CLI bundle deploy\\n\\n# Print metadata service requests across all three deploys.\\n# Version 1: CREATE test_job\\n# Version 2: CREATE new_job (test_job unchanged)\\n# Version 3: DELETE test_job (new_job unchanged)\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\n)\\n\\nrm -fr .databricks .gitignore\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 1,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\",\n \"q\": {\n \"resource_key\": \"jobs.test_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.test_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"test-job\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"sequential-deploys-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"test_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/1\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][0],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":86,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":1,\\\"resource_job_count\\\":1,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.miss\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":68},{\\\"key\\\":\\\"artifacts.(cleanUp)\\\",\\\"value\\\":55},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":12},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":5},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"metadata.(annotatePipelines)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}],\\\"local_cache_measurements_ms\\\":[{\\\"key\\\":\\\"local.cache.compute_duration\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"2\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"bundle:\\n name: sequential-deploys-test\\n\\nresources:\\n jobs:\\n test_job:\\n name: test-job\\n new_job:\\n name: new-job\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/preview/scim/v2/Me\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments\\\",\\n \\\"q\\\": {\\n \\\"deployment_id\\\": \\\"[UUID]\\\"\\n },\\n \\\"body\\\": {\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"1\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/test.toml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"Ignore = [\\\\\\\".databricks\\\\\\\"]\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/out.requests.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/.well-known/databricks-config\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/preview/scim/v2/Me\\\\\\\"\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"return_export_info\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"overwrite\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"deployment_id\\\\\\\": \\\\\\\"[UUID]\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/bundle/deployments/[UUID]/versions\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"version_id\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n },\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"cli_version\\\\\\\": \\\\\\\"[DEV_VERSION]\\\\\\\",\\\\n \\\\\\\"version_type\\\\\\\": \\\\\\\"VERSION_TYPE_DEPLOY\\\\\\\",\\\\n \\\\\\\"target_name\\\\\\\": \\\\\\\"default\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/delete\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\",\\\\n \\\\\\\"recursive\\\\\\\": true\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"POST\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/mkdirs\\\\\\\",\\\\n \\\\\\\"body\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n{\\\\n \\\\\\\"method\\\\\\\": \\\\\\\"GET\\\\\\\",\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/api/2.0/workspace/get-status\\\\\\\",\\\\n \\\\\\\"q\\\\\\\": {\\\\n \\\\\\\"path\\\\\\\": \\\\\\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\\\\\"\\\\n }\\\\n}\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/databricks.yml\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"bundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n test_job:\\\\n name: test-job\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/repls.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": [\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/\\\\\\\\.terraformrc\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TF_CLI_CONFIG_FILE]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/terraform\\\",\\n \\\"New\\\": \\\"[TERRAFORM]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/libs/vendored_py_packages\\\",\\n \\\"New\\\": \\\"[VENDORED_PY_PACKAGES]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks_bundles-0\\\\\\\\.296\\\\\\\\.0-py3-none-any\\\\\\\\.whl\\\",\\n \\\"New\\\": \\\"[DATABRICKS_BUNDLES_WHEEL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/databricks\\\",\\n \\\"New\\\": \\\"[CLI]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64/0\\\\\\\\.293\\\\\\\\.0/databricks\\\",\\n \\\"New\\\": \\\"[CLI_293]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_WAREHOUSE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"New\\\": \\\"[TEST_DEFAULT_CLUSTER_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"New\\\": \\\"[TEST_INSTANCE_POOL_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance/build/linux_amd64\\\",\\n \\\"New\\\": \\\"[BUILD_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"0\\\\\\\\.0\\\\\\\\.0-dev(\\\\\\\\+[a-f0-9]{10,16})?\\\",\\n \\\"New\\\": \\\"[DEV_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"databricks-sdk-go/[0-9]+\\\\\\\\.[0-9]+\\\\\\\\.[0-9]+\\\",\\n \\\"New\\\": \\\"databricks-sdk-go/[SDK_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1\\\\\\\\.26\\\\\\\\.1\\\",\\n \\\"New\\\": \\\"[GO_VERSION]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"/home/shreyas\\\\\\\\.goenka/cli/acceptance\\\",\\n \\\"New\\\": \\\"[TESTROOT]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"dbapi[0-9a-f]+\\\",\\n \\\"New\\\": \\\"[DATABRICKS_TOKEN]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"i3\\\\\\\\.xlarge\\\",\\n \\\"New\\\": \\\"[NODE_TYPE_ID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"New\\\": \\\"[UNIQUE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"New\\\": \\\"[TEST_TMP_DIR]_PARENT\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]@databricks\\\\\\\\.com\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERNAME]\\\",\\n \\\"New\\\": \\\"[USERNAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[USERID]\\\",\\n \\\"New\\\": \\\"[USERID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"https://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:42447\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"http://127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:42447\\\",\\n \\\"New\\\": \\\"[DATABRICKS_URL]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"127\\\\\\\\.0\\\\\\\\.0\\\\\\\\.1:42447\\\",\\n \\\"New\\\": \\\"[DATABRICKS_HOST]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\\\",\\n \\\"New\\\": \\\"[UUID]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{20,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{17}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_NANOS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{17,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{14,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{11}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_MILLIS]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": true\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{11,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"1[78]\\\\\\\\d{8}\\\",\\n \\\"New\\\": \\\"[UNIX_TIME_S]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\\d{8,}\\\",\\n \\\"New\\\": \\\"[NUMID]\\\",\\n \\\"Order\\\": 10,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d\\\\\\\\.\\\\\\\\d+(Z|\\\\\\\\+\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d)?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"2\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d(T| )\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\d:\\\\\\\\d\\\\\\\\dZ?\\\",\\n \\\"New\\\": \\\"[TIMESTAMP]\\\",\\n \\\"Order\\\": 9,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"[METASTORE_NAME]|[METASTORE_NAME]\\\",\\n \\\"New\\\": \\\"[METASTORE_NAME]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"os/[OS]\\\",\\n \\\"New\\\": \\\"os/[OS]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\",\\n \\\"New\\\": \\\"\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n },\\n {\\n \\\"Old\\\": \\\"\\\\\\\"protoLogs\\\\\\\": \\\\\\\\[.+\\\\\\\\]\\\",\\n \\\"New\\\": \\\"\\\\\\\"protoLogs\\\\\\\": [\\\\\\\"TELEMETRY\\\\\\\"]\\\",\\n \\\"Order\\\": 0,\\n \\\"Distinct\\\": false\\n }\\n ]\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/script\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"errcode() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e' if it was previously set\\\\n set -e\\\\n if [ $exit_code -ne 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nExit code: $exit_code\\\\\\\\n\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\nmusterr() {\\\\n # Temporarily disable 'set -e' to prevent the script from exiting on error\\\\n set +e\\\\n # Execute the provided command with all arguments\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n # Re-enable 'set -e'\\\\n set -e\\\\n if [ $exit_code -eq 0 ]; then\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\nUnexpected success\\\\\\\\n\\\\\\\"\\\\n exit 1\\\\n fi\\\\n}\\\\n\\\\ntrace() {\\\\n \\\\u003e\\\\u00262 printf \\\\\\\"\\\\\\\\n\\\\u003e\\\\u003e\\\\u003e %s\\\\\\\\n\\\\\\\" \\\\\\\"$*\\\\\\\"\\\\n\\\\n if [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; then\\\\n # If the first argument contains '=', collect all env vars\\\\n local env_vars=()\\\\n while [[ \\\\\\\"$1\\\\\\\" == *\\\\\\\"=\\\\\\\"* ]]; do\\\\n env_vars+=(\\\\\\\"$1\\\\\\\")\\\\n shift\\\\n done\\\\n # Export environment variables in a subshell and execute the command\\\\n (\\\\n export \\\\\\\"${env_vars[@]}\\\\\\\"\\\\n \\\\\\\"$@\\\\\\\"\\\\n )\\\\n else\\\\n # Execute the command normally\\\\n \\\\\\\"$@\\\\\\\"\\\\n fi\\\\n\\\\n return $?\\\\n}\\\\n\\\\ngit-repo-init() {\\\\n git init -qb main\\\\n git config core.autocrlf false\\\\n git config user.name \\\\\\\"Tester\\\\\\\"\\\\n git config user.email \\\\\\\"[USERNAME]\\\\\\\"\\\\n git config core.hooksPath no-hooks\\\\n git add databricks.yml\\\\n git commit -qm 'Add databricks.yml'\\\\n}\\\\n\\\\ntitle() {\\\\n local label=\\\\\\\"$1\\\\\\\"\\\\n printf \\\\\\\"\\\\\\\\n=== %b\\\\\\\" \\\\\\\"$label\\\\\\\"\\\\n}\\\\n\\\\nwithdir() {\\\\n local dir=\\\\\\\"$1\\\\\\\"\\\\n shift\\\\n local orig_dir=\\\\\\\"$(pwd)\\\\\\\"\\\\n cd \\\\\\\"$dir\\\\\\\" || return $?\\\\n \\\\\\\"$@\\\\\\\"\\\\n local exit_code=$?\\\\n cd \\\\\\\"$orig_dir\\\\\\\" || return $?\\\\n return $exit_code\\\\n}\\\\n\\\\nuuid() {\\\\n python3 -c 'import uuid; print(uuid.uuid4())'\\\\n}\\\\n\\\\nvenv_activate() {\\\\n if [[ \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"msys\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"cygwin\\\\\\\" || \\\\\\\"$OSTYPE\\\\\\\" == \\\\\\\"win32\\\\\\\" ]]; then\\\\n source .venv/Scripts/activate\\\\n else\\\\n source .venv/bin/activate\\\\n fi\\\\n}\\\\n\\\\nenvsubst() {\\\\n # We need to disable MSYS_NO_PATHCONV when running the python script.\\\\n # This is because the python interpreter is otherwise unable to find the python script\\\\n # when MSYS_NO_PATHCONV is enabled.\\\\n env -u MSYS_NO_PATHCONV envsubst.py\\\\n}\\\\n\\\\nprint_telemetry_bool_values() {\\\\n jq -r 'select(.path? == \\\\\\\"/telemetry-ext\\\\\\\") | (.body.protoLogs // [])[] | fromjson | ( (.entry // .) | (.databricks_cli_log.bundle_deploy_event.experimental.bool_values // []) ) | map(\\\\\\\"\\\\\\\\(.key) \\\\\\\\(.value)\\\\\\\") | .[]' out.requests.txt | sort\\\\n}\\\\n\\\\nsethome() {\\\\n local home=\\\\\\\"$1\\\\\\\"\\\\n mkdir -p \\\\\\\"$home\\\\\\\"\\\\n\\\\n # For macOS and Linux, use HOME.\\\\n export HOME=\\\\\\\"$home\\\\\\\"\\\\n\\\\n # For Windows, use USERPROFILE.\\\\n export USERPROFILE=\\\\\\\"$home\\\\\\\"\\\\n}\\\\n\\\\nas-test-sp() {\\\\n if [[ -z \\\\\\\"$TEST_SP_TOKEN\\\\\\\" ]]; then\\\\n echo \\\\\\\"Error: TEST_SP_TOKEN is not set.\\\\\\\" \\\\u003e\\\\u00262\\\\n return 1\\\\n fi\\\\n\\\\n DATABRICKS_TOKEN=\\\\\\\"$TEST_SP_TOKEN\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_SECRET=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_CLIENT_ID=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n DATABRICKS_AUTH_TYPE=\\\\\\\"\\\\\\\" \\\\\\\\\\\\n \\\\\\\"$@\\\\\\\"\\\\n}\\\\n\\\\nreadplanarg() {\\\\n # Expands into \\\\\\\"--plan \\\\u003cfilename\\\\u003e\\\\\\\" based on READPLAN env var\\\\n # Use it with \\\\\\\"bundle deploy\\\\\\\" to configure two runs: once with saved plan and one without.\\\\n # Note: READPLAN is specially handled in test runner so that engine=terraform/readplan is set combination is skipped.\\\\n if [[ -n \\\\\\\"$READPLAN\\\\\\\" ]]; then\\\\n printf -- \\\\\\\"--plan %s\\\\\\\" \\\\\\\"$1\\\\\\\"\\\\n else\\\\n printf \\\\\\\"\\\\\\\"\\\\n fi\\\\n}\\\\n\\\\n(\\\\n# Deploy with one job.\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Add a second job and redeploy.\\\\ncat \\\\u003e databricks.yml \\\\u003c\\\\u003c 'EOF'\\\\nbundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n test_job:\\\\n name: test-job\\\\n new_job:\\\\n name: new-job\\\\nEOF\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Remove the first job and redeploy (should delete test_job).\\\\ncat \\\\u003e databricks.yml \\\\u003c\\\\u003c 'EOF'\\\\nbundle:\\\\n name: sequential-deploys-test\\\\n\\\\nresources:\\\\n jobs:\\\\n new_job:\\\\n name: new-job\\\\nEOF\\\\ntrace $CLI bundle deploy\\\\n\\\\n# Print metadata service requests across all three deploys.\\\\n# Version 1: CREATE test_job\\\\n# Version 2: CREATE new_job (test_job unchanged)\\\\n# Version 3: DELETE test_job (new_job unchanged)\\\\ntrace print_requests.py --get //bundle ^//workspace-files ^//import-file\\\\n)\\\\n\\\\nrm -fr .databricks .gitignore\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"raw_body\\\": \\\"\\\\n\\\\u003e\\\\u003e\\\\u003e [CLI] bundle deploy\\\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\\\n\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"seq\\\": 1,\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"timestamp\\\": \\\"[TIMESTAMP]\\\",\\n \\\"files\\\": [\\n {\\n \\\"local_path\\\": \\\"test.toml\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"databricks.yml\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"out.requests.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"output.txt\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"repls.json\\\",\\n \\\"is_notebook\\\": false\\n },\\n {\\n \\\"local_path\\\": \\\"script\\\",\\n \\\"is_notebook\\\": false\\n }\\n ],\\n \\\"id\\\": \\\"[UUID]\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.2/jobs/create\\\",\\n \\\"body\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"test-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/operations\\\",\\n \\\"q\\\": {\\n \\\"resource_key\\\": \\\"jobs.test_job\\\"\\n },\\n \\\"body\\\": {\\n \\\"resource_key\\\": \\\"jobs.test_job\\\",\\n \\\"action_type\\\": \\\"OPERATION_ACTION_TYPE_CREATE\\\",\\n \\\"state\\\": {\\n \\\"deployment\\\": {\\n \\\"kind\\\": \\\"BUNDLE\\\",\\n \\\"metadata_file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\"\\n },\\n \\\"edit_mode\\\": \\\"UI_LOCKED\\\",\\n \\\"format\\\": \\\"MULTI_TASK\\\",\\n \\\"max_concurrent_runs\\\": 1,\\n \\\"name\\\": \\\"test-job\\\",\\n \\\"queue\\\": {\\n \\\"enabled\\\": true\\n }\\n },\\n \\\"resource_id\\\": \\\"[NUMID]\\\",\\n \\\"status\\\": \\\"OPERATION_STATUS_SUCCEEDED\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\\\",\\n \\\"q\\\": {\\n \\\"overwrite\\\": \\\"true\\\"\\n },\\n \\\"body\\\": {\\n \\\"version\\\": 1,\\n \\\"config\\\": {\\n \\\"bundle\\\": {\\n \\\"name\\\": \\\"sequential-deploys-test\\\",\\n \\\"target\\\": \\\"default\\\",\\n \\\"git\\\": {\\n \\\"bundle_root_path\\\": \\\".\\\"\\n }\\n },\\n \\\"workspace\\\": {\\n \\\"file_path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n },\\n \\\"resources\\\": {\\n \\\"jobs\\\": {\\n \\\"test_job\\\": {\\n \\\"id\\\": \\\"[NUMID]\\\",\\n \\\"relative_path\\\": \\\"databricks.yml\\\"\\n }\\n }\\n },\\n \\\"presets\\\": {\\n \\\"source_linked_deployment\\\": false\\n }\\n },\\n \\\"extra\\\": {}\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions/1/complete\\\",\\n \\\"body\\\": {\\n \\\"name\\\": \\\"deployments/[UUID]/versions/1\\\",\\n \\\"completion_reason\\\": \\\"VERSION_COMPLETE_SUCCESS\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/telemetry-ext\\\",\\n \\\"body\\\": {\\n \\\"uploadTime\\\": [UNIX_TIME_MILLIS][0],\\n \\\"items\\\": [],\\n \\\"protoLogs\\\": [\\n \\\"{\\\\\\\"frontend_log_event_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"entry\\\\\\\":{\\\\\\\"databricks_cli_log\\\\\\\":{\\\\\\\"execution_context\\\\\\\":{\\\\\\\"cmd_exec_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"version\\\\\\\":\\\\\\\"[DEV_VERSION]\\\\\\\",\\\\\\\"command\\\\\\\":\\\\\\\"bundle_deploy\\\\\\\",\\\\\\\"operating_system\\\\\\\":\\\\\\\"linux\\\\\\\",\\\\\\\"execution_time_ms\\\\\\\":86,\\\\\\\"exit_code\\\\\\\":0},\\\\\\\"bundle_deploy_event\\\\\\\":{\\\\\\\"bundle_uuid\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"deployment_id\\\\\\\":\\\\\\\"[UUID]\\\\\\\",\\\\\\\"resource_count\\\\\\\":1,\\\\\\\"resource_job_count\\\\\\\":1,\\\\\\\"resource_pipeline_count\\\\\\\":0,\\\\\\\"resource_model_count\\\\\\\":0,\\\\\\\"resource_experiment_count\\\\\\\":0,\\\\\\\"resource_model_serving_endpoint_count\\\\\\\":0,\\\\\\\"resource_registered_model_count\\\\\\\":0,\\\\\\\"resource_quality_monitor_count\\\\\\\":0,\\\\\\\"resource_schema_count\\\\\\\":0,\\\\\\\"resource_volume_count\\\\\\\":0,\\\\\\\"resource_cluster_count\\\\\\\":0,\\\\\\\"resource_dashboard_count\\\\\\\":0,\\\\\\\"resource_app_count\\\\\\\":0,\\\\\\\"resource_job_ids\\\\\\\":[\\\\\\\"[NUMID]\\\\\\\"],\\\\\\\"experimental\\\\\\\":{\\\\\\\"configuration_file_count\\\\\\\":1,\\\\\\\"variable_count\\\\\\\":0,\\\\\\\"complex_variable_count\\\\\\\":0,\\\\\\\"lookup_variable_count\\\\\\\":0,\\\\\\\"target_count\\\\\\\":1,\\\\\\\"bool_values\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.attempt\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.miss\\\\\\\",\\\\\\\"value\\\\\\\":true},{\\\\\\\"key\\\\\\\":\\\\\\\"experimental.use_legacy_run_as\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"run_as_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"presets_name_prefix_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"python_wheel_wrapper_is_set\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"skip_artifact_cleanup\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_serverless_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_job_compute\\\\\\\",\\\\\\\"value\\\\\\\":false},{\\\\\\\"key\\\\\\\":\\\\\\\"has_classic_interactive_compute\\\\\\\",\\\\\\\"value\\\\\\\":false}],\\\\\\\"bundle_mode\\\\\\\":\\\\\\\"TYPE_UNSPECIFIED\\\\\\\",\\\\\\\"workspace_artifact_path_type\\\\\\\":\\\\\\\"WORKSPACE_FILE_SYSTEM\\\\\\\",\\\\\\\"bundle_mutator_execution_time_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Deploy\\\\\\\",\\\\\\\"value\\\\\\\":68},{\\\\\\\"key\\\\\\\":\\\\\\\"artifacts.(cleanUp)\\\\\\\",\\\\\\\"value\\\\\\\":55},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Initialize\\\\\\\",\\\\\\\"value\\\\\\\":12},{\\\\\\\"key\\\\\\\":\\\\\\\"resourcemutator.(processStaticResources)\\\\\\\",\\\\\\\"value\\\\\\\":5},{\\\\\\\"key\\\\\\\":\\\\\\\"files.(upload)\\\\\\\",\\\\\\\"value\\\\\\\":3},{\\\\\\\"key\\\\\\\":\\\\\\\"metadata.(annotatePipelines)\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"phases.Build\\\\\\\",\\\\\\\"value\\\\\\\":1},{\\\\\\\"key\\\\\\\":\\\\\\\"validate.FastValidate\\\\\\\",\\\\\\\"value\\\\\\\":0}],\\\\\\\"local_cache_measurements_ms\\\\\\\":[{\\\\\\\"key\\\\\\\":\\\\\\\"local.cache.compute_duration\\\\\\\",\\\\\\\"value\\\\\\\":0}]}}}}}\\\"\\n ]\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/.well-known/databricks-config\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/resources\\\",\\n \\\"q\\\": {\\n \\\"page_size\\\": \\\"1000\\\"\\n },\\n \\\"body\\\": null\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\",\\n \\\"return_export_info\\\": \\\"true\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\\\"\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]\\\"\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/bundle/deployments/[UUID]/versions\\\",\\n \\\"q\\\": {\\n \\\"version_id\\\": \\\"2\\\"\\n },\\n \\\"body\\\": {\\n \\\"cli_version\\\": \\\"[DEV_VERSION]\\\",\\n \\\"version_type\\\": \\\"VERSION_TYPE_DEPLOY\\\",\\n \\\"target_name\\\": \\\"default\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/delete\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\",\\n \\\"recursive\\\": true\\n }\\n}\\n{\\n \\\"method\\\": \\\"POST\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/mkdirs\\\",\\n \\\"body\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\\\"\\n }\\n}\\n{\\n \\\"method\\\": \\\"GET\\\",\\n \\\"path\\\": \\\"/api/2.0/workspace/get-status\\\",\\n \\\"q\\\": {\\n \\\"path\\\": \\\"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\\\"\\n }\\n}\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files/output.txt\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"raw_body\": \"\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\nDeploying resources...\\nDeployment complete!\\n\\n\\u003e\\u003e\\u003e [CLI] bundle deploy\\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files...\\n\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"seq\": 2,\n \"cli_version\": \"[DEV_VERSION]\",\n \"timestamp\": \"[TIMESTAMP]\",\n \"files\": [\n {\n \"local_path\": \"databricks.yml\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"out.requests.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"output.txt\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"repls.json\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"script\",\n \"is_notebook\": false\n },\n {\n \"local_path\": \"test.toml\",\n \"is_notebook\": false\n }\n ],\n \"id\": \"[UUID]\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.2/jobs/get\",\n \"q\": {\n \"job_id\": \"[NUMID]\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.2/jobs/create\",\n \"body\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"new-job\",\n \"queue\": {\n \"enabled\": true\n }\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/2/operations\",\n \"q\": {\n \"resource_key\": \"jobs.new_job\"\n },\n \"body\": {\n \"resource_key\": \"jobs.new_job\",\n \"action_type\": \"OPERATION_ACTION_TYPE_CREATE\",\n \"state\": {\n \"deployment\": {\n \"kind\": \"BUNDLE\",\n \"metadata_file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\"\n },\n \"edit_mode\": \"UI_LOCKED\",\n \"format\": \"MULTI_TASK\",\n \"max_concurrent_runs\": 1,\n \"name\": \"new-job\",\n \"queue\": {\n \"enabled\": true\n }\n },\n \"resource_id\": \"[NUMID]\",\n \"status\": \"OPERATION_STATUS_SUCCEEDED\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json\",\n \"q\": {\n \"overwrite\": \"true\"\n },\n \"body\": {\n \"version\": 1,\n \"config\": {\n \"bundle\": {\n \"name\": \"sequential-deploys-test\",\n \"target\": \"default\",\n \"git\": {\n \"bundle_root_path\": \".\"\n }\n },\n \"workspace\": {\n \"file_path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n },\n \"resources\": {\n \"jobs\": {\n \"new_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n },\n \"test_job\": {\n \"id\": \"[NUMID]\",\n \"relative_path\": \"databricks.yml\"\n }\n }\n },\n \"presets\": {\n \"source_linked_deployment\": false\n }\n },\n \"extra\": {}\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions/2/complete\",\n \"body\": {\n \"name\": \"deployments/[UUID]/versions/2\",\n \"completion_reason\": \"VERSION_COMPLETE_SUCCESS\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/telemetry-ext\",\n \"body\": {\n \"uploadTime\": [UNIX_TIME_MILLIS][1],\n \"items\": [],\n \"protoLogs\": [\n \"{\\\"frontend_log_event_id\\\":\\\"[UUID]\\\",\\\"entry\\\":{\\\"databricks_cli_log\\\":{\\\"execution_context\\\":{\\\"cmd_exec_id\\\":\\\"[UUID]\\\",\\\"version\\\":\\\"[DEV_VERSION]\\\",\\\"command\\\":\\\"bundle_deploy\\\",\\\"operating_system\\\":\\\"linux\\\",\\\"execution_time_ms\\\":27,\\\"exit_code\\\":0},\\\"bundle_deploy_event\\\":{\\\"bundle_uuid\\\":\\\"[UUID]\\\",\\\"deployment_id\\\":\\\"[UUID]\\\",\\\"resource_count\\\":2,\\\"resource_job_count\\\":2,\\\"resource_pipeline_count\\\":0,\\\"resource_model_count\\\":0,\\\"resource_experiment_count\\\":0,\\\"resource_model_serving_endpoint_count\\\":0,\\\"resource_registered_model_count\\\":0,\\\"resource_quality_monitor_count\\\":0,\\\"resource_schema_count\\\":0,\\\"resource_volume_count\\\":0,\\\"resource_cluster_count\\\":0,\\\"resource_dashboard_count\\\":0,\\\"resource_app_count\\\":0,\\\"resource_job_ids\\\":[\\\"[NUMID]\\\",\\\"[NUMID]\\\"],\\\"experimental\\\":{\\\"configuration_file_count\\\":1,\\\"variable_count\\\":0,\\\"complex_variable_count\\\":0,\\\"lookup_variable_count\\\":0,\\\"target_count\\\":1,\\\"bool_values\\\":[{\\\"key\\\":\\\"local.cache.attempt\\\",\\\"value\\\":true},{\\\"key\\\":\\\"local.cache.hit\\\",\\\"value\\\":true},{\\\"key\\\":\\\"experimental.use_legacy_run_as\\\",\\\"value\\\":false},{\\\"key\\\":\\\"run_as_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"presets_name_prefix_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"python_wheel_wrapper_is_set\\\",\\\"value\\\":false},{\\\"key\\\":\\\"skip_artifact_cleanup\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_serverless_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_job_compute\\\",\\\"value\\\":false},{\\\"key\\\":\\\"has_classic_interactive_compute\\\",\\\"value\\\":false}],\\\"bundle_mode\\\":\\\"TYPE_UNSPECIFIED\\\",\\\"workspace_artifact_path_type\\\":\\\"WORKSPACE_FILE_SYSTEM\\\",\\\"bundle_mutator_execution_time_ms\\\":[{\\\"key\\\":\\\"phases.Deploy\\\",\\\"value\\\":12},{\\\"key\\\":\\\"phases.Initialize\\\",\\\"value\\\":8},{\\\"key\\\":\\\"resourcemutator.(processStaticResources)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"files.(upload)\\\",\\\"value\\\":3},{\\\"key\\\":\\\"validate.(required)\\\",\\\"value\\\":1},{\\\"key\\\":\\\"phases.Build\\\",\\\"value\\\":1},{\\\"key\\\":\\\"validate.FastValidate\\\",\\\"value\\\":0}]}}}}}\"\n ]\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/.well-known/databricks-config\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/resources\",\n \"q\": {\n \"page_size\": \"1000\"\n },\n \"body\": null\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\",\n \"return_export_info\": \"true\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace-files/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/resources.json\"\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]\"\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/bundle/deployments/[UUID]/versions\",\n \"q\": {\n \"version_id\": \"3\"\n },\n \"body\": {\n \"cli_version\": \"[DEV_VERSION]\",\n \"version_type\": \"VERSION_TYPE_DEPLOY\",\n \"target_name\": \"default\"\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/delete\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\",\n \"recursive\": true\n }\n}\n{\n \"method\": \"POST\",\n \"path\": \"/api/2.0/workspace/mkdirs\",\n \"body\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/artifacts/.internal\"\n }\n}\n{\n \"method\": \"GET\",\n \"path\": \"/api/2.0/workspace/get-status\",\n \"q\": {\n \"path\": \"/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files\"\n }\n}\n" -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/deployment.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "seq": 3, - "cli_version": "[DEV_VERSION]", - "timestamp": "[TIMESTAMP]", - "files": [ - { - "local_path": "out.requests.txt", - "is_notebook": false - }, - { - "local_path": "output.txt", - "is_notebook": false - }, - { - "local_path": "repls.json", - "is_notebook": false - }, - { - "local_path": "script", - "is_notebook": false - }, - { - "local_path": "test.toml", - "is_notebook": false - }, - { - "local_path": "databricks.yml", - "is_notebook": false - } - ], - "id": "[UUID]" - } -} -{ - "method": "GET", - "path": "/api/2.2/jobs/get", - "q": { - "job_id": "[NUMID]" - } -} -{ - "method": "GET", - "path": "/api/2.2/jobs/get", - "q": { - "job_id": "[NUMID]" - } -} -{ - "method": "POST", - "path": "/api/2.2/jobs/delete", - "body": { - "job_id": [NUMID] - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_DELETE", - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/workspace-files/import-file/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json", - "q": { - "overwrite": "true" - }, - "body": { - "version": 1, - "config": { - "bundle": { - "name": "sequential-deploys-test", - "target": "default", - "git": { - "bundle_root_path": "." - } - }, - "workspace": { - "file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files" - }, - "resources": { - "jobs": { - "new_job": { - "id": "[NUMID]", - "relative_path": "databricks.yml" - } - } - }, - "presets": { - "source_linked_deployment": false - } - }, - "extra": {} - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/complete", - "body": { - "name": "deployments/[UUID]/versions/3", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "POST", - "path": "/telemetry-ext", - "body": { - "uploadTime": [UNIX_TIME_MILLIS][2], - "items": [], - "protoLogs": [ - "{\"frontend_log_event_id\":\"[UUID]\",\"entry\":{\"databricks_cli_log\":{\"execution_context\":{\"cmd_exec_id\":\"[UUID]\",\"version\":\"[DEV_VERSION]\",\"command\":\"bundle_deploy\",\"operating_system\":\"linux\",\"execution_time_ms\":24,\"exit_code\":0},\"bundle_deploy_event\":{\"bundle_uuid\":\"[UUID]\",\"deployment_id\":\"[UUID]\",\"resource_count\":1,\"resource_job_count\":1,\"resource_pipeline_count\":0,\"resource_model_count\":0,\"resource_experiment_count\":0,\"resource_model_serving_endpoint_count\":0,\"resource_registered_model_count\":0,\"resource_quality_monitor_count\":0,\"resource_schema_count\":0,\"resource_volume_count\":0,\"resource_cluster_count\":0,\"resource_dashboard_count\":0,\"resource_app_count\":0,\"resource_job_ids\":[\"[NUMID]\"],\"experimental\":{\"configuration_file_count\":1,\"variable_count\":0,\"complex_variable_count\":0,\"lookup_variable_count\":0,\"target_count\":1,\"bool_values\":[{\"key\":\"local.cache.attempt\",\"value\":true},{\"key\":\"local.cache.hit\",\"value\":true},{\"key\":\"experimental.use_legacy_run_as\",\"value\":false},{\"key\":\"run_as_set\",\"value\":false},{\"key\":\"presets_name_prefix_is_set\",\"value\":false},{\"key\":\"python_wheel_wrapper_is_set\",\"value\":false},{\"key\":\"skip_artifact_cleanup\",\"value\":false},{\"key\":\"has_serverless_compute\",\"value\":false},{\"key\":\"has_classic_job_compute\",\"value\":false},{\"key\":\"has_classic_interactive_compute\",\"value\":false}],\"bundle_mode\":\"TYPE_UNSPECIFIED\",\"workspace_artifact_path_type\":\"WORKSPACE_FILE_SYSTEM\",\"bundle_mutator_execution_time_ms\":[{\"key\":\"phases.Deploy\",\"value\":11},{\"key\":\"phases.Initialize\",\"value\":7},{\"key\":\"resourcemutator.(processStaticResources)\",\"value\":3},{\"key\":\"files.(upload)\",\"value\":2},{\"key\":\"validate.FastValidate\",\"value\":0},{\"key\":\"phases.Build\",\"value\":0}]}}}}}" - ] - } -} diff --git a/acceptance/bundle/dms/sequential-deploys/out.test.toml b/acceptance/bundle/dms/sequential-deploys/out.test.toml deleted file mode 100644 index 6ce208a0484..00000000000 --- a/acceptance/bundle/dms/sequential-deploys/out.test.toml +++ /dev/null @@ -1,6 +0,0 @@ -Local = true -Cloud = false - -[EnvMatrix] - DATABRICKS_BUNDLE_ENGINE = ["direct"] - DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/sequential-deploys/script b/acceptance/bundle/dms/sequential-deploys/script index 5f4f895e4b4..5e1bff60cfd 100644 --- a/acceptance/bundle/dms/sequential-deploys/script +++ b/acceptance/bundle/dms/sequential-deploys/script @@ -32,3 +32,4 @@ trace $CLI bundle deploy # Version 2: CREATE new_job (test_job unchanged) # Version 3: DELETE test_job (new_job unchanged) trace print_requests.py --get //bundle ^//workspace-files ^//import-file +print_requests.py --get > /dev/null 2>&1 || true From 5e7c839114ba0353f2cc180068c4aab59d769053 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Tue, 14 Apr 2026 23:58:08 +0000 Subject: [PATCH 11/25] Fix UnicodeDecodeError in print_requests.py on systems with ASCII locale Open out.requests.txt with explicit utf-8 encoding to handle non-ASCII characters in request bodies. Co-authored-by: Isaac --- acceptance/bin/print_requests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/acceptance/bin/print_requests.py b/acceptance/bin/print_requests.py index c06449a2482..6e75f495156 100755 --- a/acceptance/bin/print_requests.py +++ b/acceptance/bin/print_requests.py @@ -168,7 +168,7 @@ def main(): if not requests_file.exists(): sys.exit(f"File {requests_file} not found") - with open(requests_file) as fobj: + with open(requests_file, encoding="utf-8") as fobj: data = fobj.read() if not data: From b4dc9939de30844f17617ca7798a47c27d83cd9d Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Wed, 15 Apr 2026 00:01:33 +0000 Subject: [PATCH 12/25] Regenerate DMS acceptance test output files Regenerated with Python 3.11 after fixing the UnicodeDecodeError. The output.txt files now contain the inline DMS request assertions without the Python traceback errors. Co-authored-by: Isaac --- .../bundle/dms/add-resources/out.test.toml | 6 + .../bundle/dms/add-resources/output.txt | 132 ++++++++++++-- .../bundle/dms/deploy-error/out.test.toml | 6 + acceptance/bundle/dms/deploy-error/output.txt | 53 ++++-- acceptance/bundle/dms/out.test.toml | 6 + acceptance/bundle/dms/output.txt | 124 ++++++++++++- .../bundle/dms/plan-and-summary/out.test.toml | 6 + .../bundle/dms/plan-and-summary/output.txt | 82 +++++++-- .../dms/release-lock-error/out.test.toml | 6 + .../bundle/dms/release-lock-error/output.txt | 66 +++++-- .../dms/sequential-deploys/out.test.toml | 6 + .../bundle/dms/sequential-deploys/output.txt | 169 ++++++++++++++++-- 12 files changed, 603 insertions(+), 59 deletions(-) create mode 100644 acceptance/bundle/dms/add-resources/out.test.toml create mode 100644 acceptance/bundle/dms/deploy-error/out.test.toml create mode 100644 acceptance/bundle/dms/out.test.toml create mode 100644 acceptance/bundle/dms/plan-and-summary/out.test.toml create mode 100644 acceptance/bundle/dms/release-lock-error/out.test.toml create mode 100644 acceptance/bundle/dms/sequential-deploys/out.test.toml diff --git a/acceptance/bundle/dms/add-resources/out.test.toml b/acceptance/bundle/dms/add-resources/out.test.toml new file mode 100644 index 00000000000..6ce208a0484 --- /dev/null +++ b/acceptance/bundle/dms/add-resources/out.test.toml @@ -0,0 +1,6 @@ +Local = true +Cloud = false + +[EnvMatrix] + DATABRICKS_BUNDLE_ENGINE = ["direct"] + DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/add-resources/output.txt b/acceptance/bundle/dms/add-resources/output.txt index 17c491fea44..c05732a0ddc 100644 --- a/acceptance/bundle/dms/add-resources/output.txt +++ b/acceptance/bundle/dms/add-resources/output.txt @@ -13,13 +13,125 @@ Deployment complete! Plan: 0 to add, 0 to change, 0 to delete, 2 unchanged >>> print_requests.py --get //bundle ^//workspace-files ^//import-file -Traceback (most recent call last): - File "[TESTROOT]/bin/print_requests.py", line 197, in - main() - File "[TESTROOT]/bin/print_requests.py", line 172, in main - data = fobj.read() - File "/usr/lib/python3.6/encodings/ascii.py", line 26, in decode - return codecs.ascii_decode(input, self.errors)[0] -UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 6985: ordinal not in range(128) - -Exit code: 1 +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.job_a" + }, + "body": { + "resource_key": "jobs.job_a", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "job-a", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "2" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", + "q": { + "resource_key": "jobs.job_b" + }, + "body": { + "resource_key": "jobs.job_b", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "job-b", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", + "body": { + "name": "deployments/[UUID]/versions/2", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} diff --git a/acceptance/bundle/dms/deploy-error/out.test.toml b/acceptance/bundle/dms/deploy-error/out.test.toml new file mode 100644 index 00000000000..6ce208a0484 --- /dev/null +++ b/acceptance/bundle/dms/deploy-error/out.test.toml @@ -0,0 +1,6 @@ +Local = true +Cloud = false + +[EnvMatrix] + DATABRICKS_BUNDLE_ENGINE = ["direct"] + DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/deploy-error/output.txt b/acceptance/bundle/dms/deploy-error/output.txt index 3d2ede3a96a..c4c0f890188 100644 --- a/acceptance/bundle/dms/deploy-error/output.txt +++ b/acceptance/bundle/dms/deploy-error/output.txt @@ -11,13 +11,46 @@ API message: Invalid job configuration. >>> print_requests.py --get //bundle ^//workspace-files ^//import-file -Traceback (most recent call last): - File "[TESTROOT]/bin/print_requests.py", line 197, in - main() - File "[TESTROOT]/bin/print_requests.py", line 178, in main - filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort) - File "[TESTROOT]/bin/print_requests.py", line 114, in filter_requests - positive_filters.append(f.removeprefix(ADD_PREFIX)) -AttributeError: 'str' object has no attribute 'removeprefix' - -Exit code: 1 +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "status": "OPERATION_STATUS_FAILED", + "error_message": "Invalid job configuration." + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_FAILURE" + } +} diff --git a/acceptance/bundle/dms/out.test.toml b/acceptance/bundle/dms/out.test.toml new file mode 100644 index 00000000000..6ce208a0484 --- /dev/null +++ b/acceptance/bundle/dms/out.test.toml @@ -0,0 +1,6 @@ +Local = true +Cloud = false + +[EnvMatrix] + DATABRICKS_BUNDLE_ENGINE = ["direct"] + DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/output.txt b/acceptance/bundle/dms/output.txt index 7938a2b4f0c..3fce2c479d9 100644 --- a/acceptance/bundle/dms/output.txt +++ b/acceptance/bundle/dms/output.txt @@ -5,13 +5,119 @@ Deploying resources... Deployment complete! >>> print_requests.py --get //bundle ^//workspace-files ^//import-file -Traceback (most recent call last): - File "[TESTROOT]/bin/print_requests.py", line 197, in - main() - File "[TESTROOT]/bin/print_requests.py", line 178, in main - filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort) - File "[TESTROOT]/bin/print_requests.py", line 114, in filter_requests - positive_filters.append(f.removeprefix(ADD_PREFIX)) -AttributeError: 'str' object has no attribute 'removeprefix' +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} -Exit code: 1 +>>> [CLI] bundle destroy --auto-approve +The following resources will be deleted: + delete resources.jobs.test_job + +All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default + +Deleting files... +Destroy complete! + +>>> print_requests.py --get //bundle ^//workspace-files ^//import-file +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "2" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DESTROY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_DELETE", + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", + "body": { + "name": "deployments/[UUID]/versions/2", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "DELETE", + "path": "/api/2.0/bundle/deployments/[UUID]" +} diff --git a/acceptance/bundle/dms/plan-and-summary/out.test.toml b/acceptance/bundle/dms/plan-and-summary/out.test.toml new file mode 100644 index 00000000000..6ce208a0484 --- /dev/null +++ b/acceptance/bundle/dms/plan-and-summary/out.test.toml @@ -0,0 +1,6 @@ +Local = true +Cloud = false + +[EnvMatrix] + DATABRICKS_BUNDLE_ENGINE = ["direct"] + DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/plan-and-summary/output.txt b/acceptance/bundle/dms/plan-and-summary/output.txt index f1a3e9c2491..a29257bd2ee 100644 --- a/acceptance/bundle/dms/plan-and-summary/output.txt +++ b/acceptance/bundle/dms/plan-and-summary/output.txt @@ -20,13 +20,75 @@ Resources: URL: [DATABRICKS_URL]/jobs/[NUMID]?o=[NUMID] >>> print_requests.py --get //bundle ^//workspace-files ^//import-file -Traceback (most recent call last): - File "[TESTROOT]/bin/print_requests.py", line 197, in - main() - File "[TESTROOT]/bin/print_requests.py", line 178, in main - filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort) - File "[TESTROOT]/bin/print_requests.py", line 114, in filter_requests - positive_filters.append(f.removeprefix(ADD_PREFIX)) -AttributeError: 'str' object has no attribute 'removeprefix' - -Exit code: 1 +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} diff --git a/acceptance/bundle/dms/release-lock-error/out.test.toml b/acceptance/bundle/dms/release-lock-error/out.test.toml new file mode 100644 index 00000000000..6ce208a0484 --- /dev/null +++ b/acceptance/bundle/dms/release-lock-error/out.test.toml @@ -0,0 +1,6 @@ +Local = true +Cloud = false + +[EnvMatrix] + DATABRICKS_BUNDLE_ENGINE = ["direct"] + DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/release-lock-error/output.txt b/acceptance/bundle/dms/release-lock-error/output.txt index d56d1f09610..4a14bbbef93 100644 --- a/acceptance/bundle/dms/release-lock-error/output.txt +++ b/acceptance/bundle/dms/release-lock-error/output.txt @@ -6,13 +6,59 @@ Deployment complete! Warn: Failed to release deployment lock: simulated complete version failure >>> print_requests.py --get //bundle ^//workspace-files ^//import-file -Traceback (most recent call last): - File "[TESTROOT]/bin/print_requests.py", line 197, in - main() - File "[TESTROOT]/bin/print_requests.py", line 178, in main - filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort) - File "[TESTROOT]/bin/print_requests.py", line 114, in filter_requests - positive_filters.append(f.removeprefix(ADD_PREFIX)) -AttributeError: 'str' object has no attribute 'removeprefix' - -Exit code: 1 +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "fail-complete" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "fail-complete" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} diff --git a/acceptance/bundle/dms/sequential-deploys/out.test.toml b/acceptance/bundle/dms/sequential-deploys/out.test.toml new file mode 100644 index 00000000000..6ce208a0484 --- /dev/null +++ b/acceptance/bundle/dms/sequential-deploys/out.test.toml @@ -0,0 +1,6 @@ +Local = true +Cloud = false + +[EnvMatrix] + DATABRICKS_BUNDLE_ENGINE = ["direct"] + DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/sequential-deploys/output.txt b/acceptance/bundle/dms/sequential-deploys/output.txt index 79fb0b649b0..2730fd26d51 100644 --- a/acceptance/bundle/dms/sequential-deploys/output.txt +++ b/acceptance/bundle/dms/sequential-deploys/output.txt @@ -15,13 +15,162 @@ Deploying resources... Deployment complete! >>> print_requests.py --get //bundle ^//workspace-files ^//import-file -Traceback (most recent call last): - File "[TESTROOT]/bin/print_requests.py", line 197, in - main() - File "[TESTROOT]/bin/print_requests.py", line 178, in main - filtered_requests = filter_requests(requests, args.path_filters, args.get, args.sort) - File "[TESTROOT]/bin/print_requests.py", line 114, in filter_requests - positive_filters.append(f.removeprefix(ADD_PREFIX)) -AttributeError: 'str' object has no attribute 'removeprefix' - -Exit code: 1 +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments", + "q": { + "deployment_id": "[UUID]" + }, + "body": { + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "1" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "2" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", + "q": { + "resource_key": "jobs.new_job" + }, + "body": { + "resource_key": "jobs.new_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "new-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", + "body": { + "name": "deployments/[UUID]/versions/2", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "q": { + "version_id": "3" + }, + "body": { + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/operations", + "q": { + "resource_key": "jobs.test_job" + }, + "body": { + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_DELETE", + "resource_id": "[NUMID]", + "status": "OPERATION_STATUS_SUCCEEDED" + } +} +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/complete", + "body": { + "name": "deployments/[UUID]/versions/3", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} From ffefb377024e2aaeb146fec0568957e0cd0610f0 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Wed, 15 Apr 2026 00:06:29 +0000 Subject: [PATCH 13/25] Print DMS requests after each deploy in sequential-deploys test Co-authored-by: Isaac --- .../bundle/dms/sequential-deploys/output.txt | 24 +++++++++++-------- .../bundle/dms/sequential-deploys/script | 7 ++---- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/acceptance/bundle/dms/sequential-deploys/output.txt b/acceptance/bundle/dms/sequential-deploys/output.txt index 2730fd26d51..237288ed550 100644 --- a/acceptance/bundle/dms/sequential-deploys/output.txt +++ b/acceptance/bundle/dms/sequential-deploys/output.txt @@ -4,16 +4,6 @@ Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys Deploying resources... Deployment complete! ->>> [CLI] bundle deploy -Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files... -Deploying resources... -Deployment complete! - ->>> [CLI] bundle deploy -Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files... -Deploying resources... -Deployment complete! - >>> print_requests.py --get //bundle ^//workspace-files ^//import-file { "method": "POST", @@ -71,6 +61,13 @@ Deployment complete! "completion_reason": "VERSION_COMPLETE_SUCCESS" } } + +>>> [CLI] bundle deploy +Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files... +Deploying resources... +Deployment complete! + +>>> print_requests.py --get //bundle ^//workspace-files ^//import-file { "method": "GET", "path": "/api/2.0/bundle/deployments/[UUID]/resources", @@ -129,6 +126,13 @@ Deployment complete! "completion_reason": "VERSION_COMPLETE_SUCCESS" } } + +>>> [CLI] bundle deploy +Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files... +Deploying resources... +Deployment complete! + +>>> print_requests.py --get //bundle ^//workspace-files ^//import-file { "method": "GET", "path": "/api/2.0/bundle/deployments/[UUID]/resources", diff --git a/acceptance/bundle/dms/sequential-deploys/script b/acceptance/bundle/dms/sequential-deploys/script index 5e1bff60cfd..0138aa240a2 100644 --- a/acceptance/bundle/dms/sequential-deploys/script +++ b/acceptance/bundle/dms/sequential-deploys/script @@ -1,5 +1,6 @@ # Deploy with one job. trace $CLI bundle deploy +trace print_requests.py --get //bundle ^//workspace-files ^//import-file # Add a second job and redeploy. cat > databricks.yml << 'EOF' @@ -14,6 +15,7 @@ resources: name: new-job EOF trace $CLI bundle deploy +trace print_requests.py --get //bundle ^//workspace-files ^//import-file # Remove the first job and redeploy (should delete test_job). cat > databricks.yml << 'EOF' @@ -26,10 +28,5 @@ resources: name: new-job EOF trace $CLI bundle deploy - -# Print metadata service requests across all three deploys. -# Version 1: CREATE test_job -# Version 2: CREATE new_job (test_job unchanged) -# Version 3: DELETE test_job (new_job unchanged) trace print_requests.py --get //bundle ^//workspace-files ^//import-file print_requests.py --get > /dev/null 2>&1 || true From 379ff1b35960d402c773953d9eed508f70070e95 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Wed, 15 Apr 2026 00:06:51 +0000 Subject: [PATCH 14/25] Remove redundant main dms test, covered by add-resources Co-authored-by: Isaac --- acceptance/bundle/dms/databricks.yml | 7 -- acceptance/bundle/dms/out.test.toml | 6 -- acceptance/bundle/dms/output.txt | 123 --------------------------- acceptance/bundle/dms/script | 14 --- 4 files changed, 150 deletions(-) delete mode 100644 acceptance/bundle/dms/databricks.yml delete mode 100644 acceptance/bundle/dms/out.test.toml delete mode 100644 acceptance/bundle/dms/output.txt delete mode 100644 acceptance/bundle/dms/script diff --git a/acceptance/bundle/dms/databricks.yml b/acceptance/bundle/dms/databricks.yml deleted file mode 100644 index c21c8a93925..00000000000 --- a/acceptance/bundle/dms/databricks.yml +++ /dev/null @@ -1,7 +0,0 @@ -bundle: - name: metadata-service-test - -resources: - jobs: - test_job: - name: test-job diff --git a/acceptance/bundle/dms/out.test.toml b/acceptance/bundle/dms/out.test.toml deleted file mode 100644 index 6ce208a0484..00000000000 --- a/acceptance/bundle/dms/out.test.toml +++ /dev/null @@ -1,6 +0,0 @@ -Local = true -Cloud = false - -[EnvMatrix] - DATABRICKS_BUNDLE_ENGINE = ["direct"] - DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/output.txt b/acceptance/bundle/dms/output.txt deleted file mode 100644 index 3fce2c479d9..00000000000 --- a/acceptance/bundle/dms/output.txt +++ /dev/null @@ -1,123 +0,0 @@ - ->>> [CLI] bundle deploy -Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/files... -Deploying resources... -Deployment complete! - ->>> print_requests.py --get //bundle ^//workspace-files ^//import-file -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments", - "q": { - "deployment_id": "[UUID]" - }, - "body": { - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "1" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", - "body": { - "name": "deployments/[UUID]/versions/1", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} - ->>> [CLI] bundle destroy --auto-approve -The following resources will be deleted: - delete resources.jobs.test_job - -All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/metadata-service-test/default - -Deleting files... -Destroy complete! - ->>> print_requests.py --get //bundle ^//workspace-files ^//import-file -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", - "q": { - "version_id": "2" - }, - "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DESTROY", - "target_name": "default" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_DELETE", - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", - "body": { - "name": "deployments/[UUID]/versions/2", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "DELETE", - "path": "/api/2.0/bundle/deployments/[UUID]" -} diff --git a/acceptance/bundle/dms/script b/acceptance/bundle/dms/script deleted file mode 100644 index 42317266068..00000000000 --- a/acceptance/bundle/dms/script +++ /dev/null @@ -1,14 +0,0 @@ -# Deploy with the metadata service enabled. -trace $CLI bundle deploy - -# Print all metadata service requests made during deploy. -trace print_requests.py --get //bundle ^//workspace-files ^//import-file - -# Destroy with the metadata service enabled. -trace $CLI bundle destroy --auto-approve - -# Print all metadata service requests made during destroy. -trace print_requests.py --get //bundle ^//workspace-files ^//import-file - -# Clear any remaining recorded requests. -print_requests.py --get > /dev/null 2>&1 || true From 65c2aaeb16d8aa0d7a63c2ad0ea2bd8ebe57a86f Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Wed, 15 Apr 2026 00:07:25 +0000 Subject: [PATCH 15/25] Remove unnecessary protoLogs replacement from DMS test config Co-authored-by: Isaac --- acceptance/bundle/dms/test.toml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/acceptance/bundle/dms/test.toml b/acceptance/bundle/dms/test.toml index c529abc9de3..5d95b8d05dd 100644 --- a/acceptance/bundle/dms/test.toml +++ b/acceptance/bundle/dms/test.toml @@ -2,8 +2,3 @@ Badness = "Uses local test server; enable on cloud once the deployment metadata EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["direct"] EnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] RecordRequests = true - -# Stabilize flaky telemetry protoLogs (execution times and key order vary). -[[Repls]] -Old = '"protoLogs": \[.+\]' -New = '"protoLogs": ["TELEMETRY"]' From 602310e9623193d650cb5e43c4022b7292c230a9 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Thu, 7 May 2026 07:00:51 +0000 Subject: [PATCH 16/25] DMS state lives in managed_service.json, not resources.json Keep resources.json maintained alongside the DMS deployment so users have a backward path if they hit issues with the DMS-backed flow. Move DMS-specific bookkeeping (the deployment_id that ties the bundle to a server-side deployment record) into a sibling managed_service.json so the two concerns stay cleanly separated. --- .../lock/deployment_metadata_service.go | 36 +++++++++---------- bundle/statemgmt/managed_service_json.go | 14 ++++++++ bundle/statemgmt/resources_json.go | 7 ---- bundle/statemgmt/state_pull.go | 19 +++++----- 4 files changed, 42 insertions(+), 34 deletions(-) create mode 100644 bundle/statemgmt/managed_service_json.go delete mode 100644 bundle/statemgmt/resources_json.go diff --git a/bundle/deploy/lock/deployment_metadata_service.go b/bundle/deploy/lock/deployment_metadata_service.go index 66c38ea6965..d8097c15e45 100644 --- a/bundle/deploy/lock/deployment_metadata_service.go +++ b/bundle/deploy/lock/deployment_metadata_service.go @@ -160,7 +160,7 @@ func acquireLock(ctx context.Context, b *bundle.Bundle, svc *tmpdms.DeploymentMe return deploymentID, versionID, nil } -// resolveDeploymentID reads the deployment ID from resources.json in the +// resolveDeploymentID reads the deployment ID from managed_service.json in the // workspace state directory. If the file doesn't exist or has no deployment ID, // a new UUID is generated. The boolean return indicates whether this is a fresh // deployment (true) or an existing one (false). For fresh deployments, the @@ -172,45 +172,45 @@ func resolveDeploymentID(ctx context.Context, b *bundle.Bundle) (string, bool, e return "", false, fmt.Errorf("failed to create state filer: %w", err) } - // Try reading existing deployment ID from resources.json. - reader, readErr := f.Read(ctx, "resources.json") + // Try reading existing deployment ID from managed_service.json. + reader, readErr := f.Read(ctx, statemgmt.ManagedServiceFileName) if readErr == nil { defer reader.Close() data, err := io.ReadAll(reader) if err != nil { - return "", false, fmt.Errorf("failed to read resources.json content: %w", err) + return "", false, fmt.Errorf("failed to read %s content: %w", statemgmt.ManagedServiceFileName, err) } - var rj statemgmt.ResourcesJSON - if err := json.Unmarshal(data, &rj); err != nil { - return "", false, fmt.Errorf("failed to parse resources.json: %w", err) + var sj statemgmt.ManagedServiceJSON + if err := json.Unmarshal(data, &sj); err != nil { + return "", false, fmt.Errorf("failed to parse %s: %w", statemgmt.ManagedServiceFileName, err) } - if rj.DeploymentID != "" { - return rj.DeploymentID, false, nil + if sj.DeploymentID != "" { + return sj.DeploymentID, false, nil } } else if !errors.Is(readErr, fs.ErrNotExist) { - return "", false, fmt.Errorf("failed to read resources.json: %w", readErr) + return "", false, fmt.Errorf("failed to read %s: %w", statemgmt.ManagedServiceFileName, readErr) } // Fresh deployment: generate a new ID but don't write yet. return uuid.New().String(), true, nil } -// writeDeploymentID writes the deployment ID to resources.json in the workspace -// state directory. This should be called after the server-side deployment record -// is created successfully. +// writeDeploymentID writes the deployment ID to managed_service.json in the +// workspace state directory. This should be called after the server-side +// deployment record is created successfully. func writeDeploymentID(ctx context.Context, b *bundle.Bundle, deploymentID string) error { f, err := deploy.StateFiler(b) if err != nil { return fmt.Errorf("failed to create state filer: %w", err) } - rj := statemgmt.ResourcesJSON{DeploymentID: deploymentID} - data, err := json.Marshal(rj) + sj := statemgmt.ManagedServiceJSON{DeploymentID: deploymentID} + data, err := json.Marshal(sj) if err != nil { - return fmt.Errorf("failed to marshal resources.json: %w", err) + return fmt.Errorf("failed to marshal %s: %w", statemgmt.ManagedServiceFileName, err) } - err = f.Write(ctx, "resources.json", bytes.NewReader(data), filer.CreateParentDirectories, filer.OverwriteIfExists) + err = f.Write(ctx, statemgmt.ManagedServiceFileName, bytes.NewReader(data), filer.CreateParentDirectories, filer.OverwriteIfExists) if err != nil { - return fmt.Errorf("failed to write resources.json: %w", err) + return fmt.Errorf("failed to write %s: %w", statemgmt.ManagedServiceFileName, err) } return nil } diff --git a/bundle/statemgmt/managed_service_json.go b/bundle/statemgmt/managed_service_json.go new file mode 100644 index 00000000000..7e688e5ebee --- /dev/null +++ b/bundle/statemgmt/managed_service_json.go @@ -0,0 +1,14 @@ +package statemgmt + +// ManagedServiceFileName is the filename for ManagedServiceJSON in the workspace +// state directory. +const ManagedServiceFileName = "managed_service.json" + +// ManagedServiceJSON holds DMS-specific bookkeeping (e.g. the deployment_id +// that ties this bundle to a server-side deployment record). It lives next to +// resources.json in the workspace state directory. resources.json is kept +// around and maintained alongside this file so users have a backward path if +// they hit issues with the DMS-backed deployment flow. +type ManagedServiceJSON struct { + DeploymentID string `json:"deployment_id"` +} diff --git a/bundle/statemgmt/resources_json.go b/bundle/statemgmt/resources_json.go deleted file mode 100644 index 7debc2ce8bc..00000000000 --- a/bundle/statemgmt/resources_json.go +++ /dev/null @@ -1,7 +0,0 @@ -package statemgmt - -// ResourcesJSON is the DMS-managed resources.json format. -// When DMS is enabled, resources.json stores only the deployment ID. -type ResourcesJSON struct { - DeploymentID string `json:"deployment_id"` -} diff --git a/bundle/statemgmt/state_pull.go b/bundle/statemgmt/state_pull.go index 8c32a75ce03..152da7a4a0a 100644 --- a/bundle/statemgmt/state_pull.go +++ b/bundle/statemgmt/state_pull.go @@ -319,29 +319,30 @@ func logStatesDiag(ctx context.Context, severity diag.Severity, msg string, stat }) } -// readDeploymentID reads the DMS deployment ID from the workspace resources.json. -// Returns "" if the file doesn't exist or doesn't contain a deployment_id. +// readDeploymentID reads the DMS deployment ID from the workspace +// managed_service.json. Returns "" if the file doesn't exist or doesn't +// contain a deployment_id. func readDeploymentID(ctx context.Context, f filer.Filer) string { - reader, err := f.Read(ctx, "resources.json") + reader, err := f.Read(ctx, ManagedServiceFileName) if errors.Is(err, fs.ErrNotExist) { return "" } if err != nil { - log.Debugf(ctx, "Failed to read resources.json for deployment ID: %v", err) + log.Debugf(ctx, "Failed to read %s for deployment ID: %v", ManagedServiceFileName, err) return "" } defer reader.Close() data, err := io.ReadAll(reader) if err != nil { - log.Debugf(ctx, "Failed to read resources.json content: %v", err) + log.Debugf(ctx, "Failed to read %s content: %v", ManagedServiceFileName, err) return "" } - var rj ResourcesJSON - if err := json.Unmarshal(data, &rj); err != nil { - log.Debugf(ctx, "Failed to parse resources.json: %v", err) + var sj ManagedServiceJSON + if err := json.Unmarshal(data, &sj); err != nil { + log.Debugf(ctx, "Failed to parse %s: %v", ManagedServiceFileName, err) return "" } - return rj.DeploymentID + return sj.DeploymentID } From a0b74f7b782b38a03a593bfefa9ddecc7ff789c9 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Fri, 8 May 2026 08:11:13 +0000 Subject: [PATCH 17/25] Decouple DMS operation reporting from CRUD workers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A single async sender goroutine drains a buffered channel of operation events; CRUD workers push onto the channel and continue. When the buffer fills (capacity matches the worker pool), workers block on the send and naturally back off — this is the only intended source of backpressure on the worker pool. Reporting is best-effort: a DMS API failure is logged and the sender keeps draining. The deploy is no longer aborted when the audit-log write fails. On a hard process crash, at most ~10 buffered events can be lost (channel capacity). Release() drains the reporter before completing the version so the audit trail is as complete as possible on a clean shutdown. --- bundle/deploy/lock/async_reporter.go | 85 +++++++++++++++++++ .../lock/deployment_metadata_service.go | 43 +++++----- 2 files changed, 106 insertions(+), 22 deletions(-) create mode 100644 bundle/deploy/lock/async_reporter.go diff --git a/bundle/deploy/lock/async_reporter.go b/bundle/deploy/lock/async_reporter.go new file mode 100644 index 00000000000..e9875062725 --- /dev/null +++ b/bundle/deploy/lock/async_reporter.go @@ -0,0 +1,85 @@ +package lock + +import ( + "context" + "encoding/json" + + "github.com/databricks/cli/bundle/deployplan" + "github.com/databricks/cli/bundle/direct" + "github.com/databricks/cli/libs/log" +) + +// Matches direct.defaultParallelism so a hard process crash drops at most +// ~10 unsent operation events. +const asyncReporterBufferSize = 10 + +type operationEvent struct { + resourceKey string + resourceID string + action deployplan.ActionType + operationErr error + state json.RawMessage +} + +// asyncReporter dispatches DMS operation reports from a single sender +// goroutine fed by a buffered channel. CRUD workers push and continue; +// when the buffer is full the send blocks, applying backpressure to the +// worker pool. Reporting is best-effort — DMS API errors are logged and +// the sender keeps draining. +type asyncReporter struct { + ch chan operationEvent + done chan struct{} + sendFn func(ctx context.Context, ev operationEvent) error + ctx context.Context +} + +// newAsyncReporter starts the sender goroutine. ctx is used for all DMS API +// calls and must outlive individual worker contexts. +func newAsyncReporter(ctx context.Context, sendFn func(context.Context, operationEvent) error) *asyncReporter { + r := &asyncReporter{ + ch: make(chan operationEvent, asyncReporterBufferSize), + done: make(chan struct{}), + sendFn: sendFn, + ctx: ctx, + } + go r.run() + return r +} + +func (r *asyncReporter) run() { + defer close(r.done) + for ev := range r.ch { + if err := r.sendFn(r.ctx, ev); err != nil { + log.Warnf(r.ctx, "Failed to report %s operation for %s to DMS: %v", ev.action, ev.resourceKey, err) + } + } +} + +func (r *asyncReporter) Reporter() direct.OperationReporter { + return func( + ctx context.Context, + resourceKey, resourceID string, + action deployplan.ActionType, + operationErr error, + state json.RawMessage, + ) error { + select { + case r.ch <- operationEvent{ + resourceKey: resourceKey, + resourceID: resourceID, + action: action, + operationErr: operationErr, + state: state, + }: + return nil + case <-ctx.Done(): + return ctx.Err() + } + } +} + +// Close signals end-of-input and waits for the sender to drain. +func (r *asyncReporter) Close() { + close(r.ch) + <-r.done +} diff --git a/bundle/deploy/lock/deployment_metadata_service.go b/bundle/deploy/lock/deployment_metadata_service.go index d8097c15e45..a8dec8f1de4 100644 --- a/bundle/deploy/lock/deployment_metadata_service.go +++ b/bundle/deploy/lock/deployment_metadata_service.go @@ -16,7 +16,6 @@ import ( "github.com/databricks/cli/bundle" "github.com/databricks/cli/bundle/deploy" "github.com/databricks/cli/bundle/deployplan" - "github.com/databricks/cli/bundle/direct" "github.com/databricks/cli/bundle/statemgmt" "github.com/databricks/cli/internal/build" "github.com/databricks/cli/libs/filer" @@ -36,6 +35,7 @@ type metadataServiceLock struct { versionID string stopHeartbeat func() + reporter *asyncReporter } func newMetadataServiceLock(b *bundle.Bundle, versionType tmpdms.VersionType) *metadataServiceLock { @@ -61,11 +61,15 @@ func (l *metadataServiceLock) Acquire(ctx context.Context) error { l.b.DeploymentID = deploymentID l.versionID = versionID l.stopHeartbeat = startHeartbeat(ctx, svc, deploymentID, versionID) - l.b.DeploymentBundle.OperationReporter = makeOperationReporter(svc, deploymentID, versionID) + l.reporter = newAsyncReporter(ctx, makeSyncReporter(svc, deploymentID, versionID)) + l.b.DeploymentBundle.OperationReporter = l.reporter.Reporter() return nil } func (l *metadataServiceLock) Release(ctx context.Context, status DeploymentStatus) error { + if l.reporter != nil { + l.reporter.Close() + } if l.stopHeartbeat != nil { l.stopHeartbeat() } @@ -215,23 +219,18 @@ func writeDeploymentID(ctx context.Context, b *bundle.Bundle, deploymentID strin return nil } -// makeOperationReporter returns an OperationReporter that reports each resource -// operation (success or failure) to the deployment metadata service. -func makeOperationReporter(svc *tmpdms.DeploymentMetadataAPI, deploymentID, versionID string) direct.OperationReporter { - return func( - ctx context.Context, - resourceKey string, - resourceID string, - action deployplan.ActionType, - operationErr error, - state json.RawMessage, - ) error { +// makeSyncReporter returns the synchronous "send one event to DMS" function +// consumed by asyncReporter's sender goroutine. Skip-actions short-circuit to +// nil; mapping errors and API errors are returned to the caller (which logs +// and continues — see asyncReporter). +func makeSyncReporter(svc *tmpdms.DeploymentMetadataAPI, deploymentID, versionID string) func(context.Context, operationEvent) error { + return func(ctx context.Context, ev operationEvent) error { // The internal state DB uses "resources.jobs.foo" keys but the API // expects "jobs.foo" — strip the "resources." prefix. - apiKey := strings.TrimPrefix(resourceKey, "resources.") - actionType, err := planActionToOperationAction(action) + apiKey := strings.TrimPrefix(ev.resourceKey, "resources.") + actionType, err := planActionToOperationAction(ev.action) if err != nil { - return fmt.Errorf("mapping action for resource %s: %w", resourceKey, err) + return fmt.Errorf("mapping action for resource %s: %w", ev.resourceKey, err) } if actionType == "" { return nil @@ -239,20 +238,20 @@ func makeOperationReporter(svc *tmpdms.DeploymentMetadataAPI, deploymentID, vers status := tmpdms.OperationStatusSucceeded var errorMessage string - if operationErr != nil { + if ev.operationErr != nil { status = tmpdms.OperationStatusFailed - errorMessage = operationErr.Error() + errorMessage = ev.operationErr.Error() } op := &tmpdms.Operation{ ResourceKey: apiKey, - ResourceID: resourceID, + ResourceID: ev.resourceID, Status: status, ActionType: actionType, ErrorMessage: errorMessage, } - if len(state) > 0 { - op.State = state + if len(ev.state) > 0 { + op.State = ev.state } _, err = svc.CreateOperation(ctx, tmpdms.CreateOperationRequest{ @@ -263,7 +262,7 @@ func makeOperationReporter(svc *tmpdms.DeploymentMetadataAPI, deploymentID, vers Operation: op, }) if err != nil { - return fmt.Errorf("reporting operation for resource %s: %w", resourceKey, err) + return fmt.Errorf("reporting operation for resource %s: %w", ev.resourceKey, err) } return nil } From a4d282026ed34a0b789c8fba33ffbb045810a8e7 Mon Sep 17 00:00:00 2001 From: Pavlo Kozlov Date: Tue, 2 Jun 2026 11:33:46 +0200 Subject: [PATCH 18/25] bundle/dms: set deployment display_name from bundle name on create (#5406) ## Why DMS-backed bundle deployments (run with `DATABRICKS_BUNDLE_MANAGED_STATE=true DATABRICKS_BUNDLE_ENGINE=direct`) never set `display_name` when creating the deployment record, so the field is stored as `null`. ## What Populate `DisplayName` from `bundle.Config.Bundle.Name` (i.e. the `bundle.name` from `databricks.yml`) when issuing `CreateDeployment`. This matches the human-readable label users already see in `databricks bundle validate`. ## Tests Existing `acceptance/bundle/dms/*` tests record the `CreateDeployment` request body via `print_requests.py`; their `output.txt` files regenerate to assert the new `display_name` field. This pull request and its description were written by Isaac. --- acceptance/bundle/dms/add-resources/output.txt | 1 + acceptance/bundle/dms/deploy-error/output.txt | 1 + acceptance/bundle/dms/plan-and-summary/output.txt | 1 + acceptance/bundle/dms/release-lock-error/output.txt | 1 + acceptance/bundle/dms/sequential-deploys/output.txt | 1 + bundle/deploy/lock/deployment_metadata_service.go | 4 ++-- 6 files changed, 7 insertions(+), 2 deletions(-) diff --git a/acceptance/bundle/dms/add-resources/output.txt b/acceptance/bundle/dms/add-resources/output.txt index c05732a0ddc..04c0725761a 100644 --- a/acceptance/bundle/dms/add-resources/output.txt +++ b/acceptance/bundle/dms/add-resources/output.txt @@ -20,6 +20,7 @@ Plan: 0 to add, 0 to change, 0 to delete, 2 unchanged "deployment_id": "[UUID]" }, "body": { + "display_name": "add-resources-test", "target_name": "default" } } diff --git a/acceptance/bundle/dms/deploy-error/output.txt b/acceptance/bundle/dms/deploy-error/output.txt index c4c0f890188..76c59a098e8 100644 --- a/acceptance/bundle/dms/deploy-error/output.txt +++ b/acceptance/bundle/dms/deploy-error/output.txt @@ -18,6 +18,7 @@ API message: Invalid job configuration. "deployment_id": "[UUID]" }, "body": { + "display_name": "metadata-service-error-test", "target_name": "default" } } diff --git a/acceptance/bundle/dms/plan-and-summary/output.txt b/acceptance/bundle/dms/plan-and-summary/output.txt index a29257bd2ee..afffd87043f 100644 --- a/acceptance/bundle/dms/plan-and-summary/output.txt +++ b/acceptance/bundle/dms/plan-and-summary/output.txt @@ -27,6 +27,7 @@ Resources: "deployment_id": "[UUID]" }, "body": { + "display_name": "plan-summary-test", "target_name": "default" } } diff --git a/acceptance/bundle/dms/release-lock-error/output.txt b/acceptance/bundle/dms/release-lock-error/output.txt index 4a14bbbef93..236aea5e0b2 100644 --- a/acceptance/bundle/dms/release-lock-error/output.txt +++ b/acceptance/bundle/dms/release-lock-error/output.txt @@ -13,6 +13,7 @@ Warn: Failed to release deployment lock: simulated complete version failure "deployment_id": "[UUID]" }, "body": { + "display_name": "dms-release-lock-error", "target_name": "fail-complete" } } diff --git a/acceptance/bundle/dms/sequential-deploys/output.txt b/acceptance/bundle/dms/sequential-deploys/output.txt index 237288ed550..6cc938dcefc 100644 --- a/acceptance/bundle/dms/sequential-deploys/output.txt +++ b/acceptance/bundle/dms/sequential-deploys/output.txt @@ -12,6 +12,7 @@ Deployment complete! "deployment_id": "[UUID]" }, "body": { + "display_name": "sequential-deploys-test", "target_name": "default" } } diff --git a/bundle/deploy/lock/deployment_metadata_service.go b/bundle/deploy/lock/deployment_metadata_service.go index a8dec8f1de4..4b93211ae7b 100644 --- a/bundle/deploy/lock/deployment_metadata_service.go +++ b/bundle/deploy/lock/deployment_metadata_service.go @@ -118,7 +118,8 @@ func acquireLock(ctx context.Context, b *bundle.Bundle, svc *tmpdms.DeploymentMe _, createErr := svc.CreateDeployment(ctx, tmpdms.CreateDeploymentRequest{ DeploymentID: deploymentID, Deployment: &tmpdms.Deployment{ - TargetName: b.Config.Bundle.Target, + DisplayName: b.Config.Bundle.Name, + TargetName: b.Config.Bundle.Target, }, }) if createErr != nil { @@ -268,7 +269,6 @@ func makeSyncReporter(svc *tmpdms.DeploymentMetadataAPI, deploymentID, versionID } } - // planActionToOperationAction maps a deploy plan action to a metadata service // operation action type. No-op actions like Skip return ("", nil) and should // be ignored. From a61d6ef81962000f0fd123ff32ff87a17252e794 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Wed, 3 Jun 2026 13:48:23 +0200 Subject: [PATCH 19/25] bundle/dms: record git_info on the deployment version The deployment metadata service now accepts git provenance on a version (origin_url, branch, commit) per databricks-eng/universe#2009991. Record it on CreateVersion using the same values the CLI writes to metadata.json. --- acceptance/bundle/dms/add-resources/output.txt | 6 ++++-- acceptance/bundle/dms/deploy-error/output.txt | 3 ++- acceptance/bundle/dms/plan-and-summary/output.txt | 3 ++- acceptance/bundle/dms/release-lock-error/output.txt | 3 ++- acceptance/bundle/dms/sequential-deploys/output.txt | 9 ++++++--- bundle/deploy/lock/deployment_metadata_service.go | 6 ++++++ libs/tmpdms/types.go | 10 ++++++++++ 7 files changed, 32 insertions(+), 8 deletions(-) diff --git a/acceptance/bundle/dms/add-resources/output.txt b/acceptance/bundle/dms/add-resources/output.txt index 04c0725761a..5ac69f03593 100644 --- a/acceptance/bundle/dms/add-resources/output.txt +++ b/acceptance/bundle/dms/add-resources/output.txt @@ -33,7 +33,8 @@ Plan: 0 to add, 0 to change, 0 to delete, 2 unchanged "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" + "target_name": "default", + "git_info": {} } } { @@ -91,7 +92,8 @@ Plan: 0 to add, 0 to change, 0 to delete, 2 unchanged "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" + "target_name": "default", + "git_info": {} } } { diff --git a/acceptance/bundle/dms/deploy-error/output.txt b/acceptance/bundle/dms/deploy-error/output.txt index 76c59a098e8..2baa4cafc69 100644 --- a/acceptance/bundle/dms/deploy-error/output.txt +++ b/acceptance/bundle/dms/deploy-error/output.txt @@ -31,7 +31,8 @@ API message: Invalid job configuration. "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" + "target_name": "default", + "git_info": {} } } { diff --git a/acceptance/bundle/dms/plan-and-summary/output.txt b/acceptance/bundle/dms/plan-and-summary/output.txt index afffd87043f..b33725777ea 100644 --- a/acceptance/bundle/dms/plan-and-summary/output.txt +++ b/acceptance/bundle/dms/plan-and-summary/output.txt @@ -40,7 +40,8 @@ Resources: "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" + "target_name": "default", + "git_info": {} } } { diff --git a/acceptance/bundle/dms/release-lock-error/output.txt b/acceptance/bundle/dms/release-lock-error/output.txt index 236aea5e0b2..1cbfd3019db 100644 --- a/acceptance/bundle/dms/release-lock-error/output.txt +++ b/acceptance/bundle/dms/release-lock-error/output.txt @@ -26,7 +26,8 @@ Warn: Failed to release deployment lock: simulated complete version failure "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "fail-complete" + "target_name": "fail-complete", + "git_info": {} } } { diff --git a/acceptance/bundle/dms/sequential-deploys/output.txt b/acceptance/bundle/dms/sequential-deploys/output.txt index 6cc938dcefc..6665970799d 100644 --- a/acceptance/bundle/dms/sequential-deploys/output.txt +++ b/acceptance/bundle/dms/sequential-deploys/output.txt @@ -25,7 +25,8 @@ Deployment complete! "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" + "target_name": "default", + "git_info": {} } } { @@ -90,7 +91,8 @@ Deployment complete! "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" + "target_name": "default", + "git_info": {} } } { @@ -155,7 +157,8 @@ Deployment complete! "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default" + "target_name": "default", + "git_info": {} } } { diff --git a/bundle/deploy/lock/deployment_metadata_service.go b/bundle/deploy/lock/deployment_metadata_service.go index 4b93211ae7b..d2f03de562e 100644 --- a/bundle/deploy/lock/deployment_metadata_service.go +++ b/bundle/deploy/lock/deployment_metadata_service.go @@ -155,6 +155,12 @@ func acquireLock(ctx context.Context, b *bundle.Bundle, svc *tmpdms.DeploymentMe CliVersion: build.GetInfo().Version, VersionType: versionType, TargetName: b.Config.Bundle.Target, + // Same git provenance the CLI records in metadata.json. + GitInfo: &tmpdms.GitInfo{ + OriginURL: b.Config.Bundle.Git.OriginURL, + Branch: b.Config.Bundle.Git.Branch, + Commit: b.Config.Bundle.Git.Commit, + }, }, }) if versionErr != nil { diff --git a/libs/tmpdms/types.go b/libs/tmpdms/types.go index 8dd6cdbfb64..1729876ec89 100644 --- a/libs/tmpdms/types.go +++ b/libs/tmpdms/types.go @@ -121,6 +121,16 @@ type Version struct { CompletedBy string `json:"completed_by,omitempty"` DisplayName string `json:"display_name,omitempty"` TargetName string `json:"target_name,omitempty"` + GitInfo *GitInfo `json:"git_info,omitempty"` +} + +// GitInfo is the git provenance snapshot recorded on a version. It mirrors the +// GitInfo proto message in the deployment metadata service and carries the same +// values the CLI writes to metadata.json. +type GitInfo struct { + OriginURL string `json:"origin_url,omitempty"` + Branch string `json:"branch,omitempty"` + Commit string `json:"commit,omitempty"` } type Operation struct { From 6b810b211433fa2e0f060ea59d331dec3678a841 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Wed, 3 Jun 2026 18:03:45 +0200 Subject: [PATCH 20/25] Regenerate DMS acceptance outputs after merge; sort recorded requests for determinism Main's direct engine applies resources concurrently, so the order of recorded CreateOperation requests varied between runs. Add --sort to print_requests.py in the multi-resource DMS tests to make the recorded output deterministic. --- .../bundle/dms/add-resources/output.txt | 115 ++++++++---------- acceptance/bundle/dms/add-resources/script | 2 +- .../bundle/dms/plan-and-summary/output.txt | 20 +-- .../bundle/dms/release-lock-error/output.txt | 14 --- .../bundle/dms/sequential-deploys/output.txt | 109 ++++++++--------- .../bundle/dms/sequential-deploys/script | 6 +- 6 files changed, 112 insertions(+), 154 deletions(-) diff --git a/acceptance/bundle/dms/add-resources/output.txt b/acceptance/bundle/dms/add-resources/output.txt index 5ac69f03593..7545b945f6e 100644 --- a/acceptance/bundle/dms/add-resources/output.txt +++ b/acceptance/bundle/dms/add-resources/output.txt @@ -10,9 +10,32 @@ Deploying resources... Deployment complete! >>> [CLI] bundle plan -Plan: 0 to add, 0 to change, 0 to delete, 2 unchanged +create jobs.job_a +create jobs.job_b ->>> print_requests.py --get //bundle ^//workspace-files ^//import-file +Plan: 2 to add, 0 to change, 0 to delete, 0 unchanged + +>>> print_requests.py --get --sort //bundle ^//workspace-files ^//import-file +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "q": { + "page_size": "1000" + }, + "body": null +} { "method": "POST", "path": "/api/2.0/bundle/deployments", @@ -39,28 +62,15 @@ Plan: 0 to add, 0 to change, 0 to delete, 2 unchanged } { "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", + "path": "/api/2.0/bundle/deployments/[UUID]/versions", "q": { - "resource_key": "jobs.job_a" + "version_id": "2" }, "body": { - "resource_key": "jobs.job_a", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "job-a", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", - "status": "OPERATION_STATUS_SUCCEEDED" + "cli_version": "[DEV_VERSION]", + "version_type": "VERSION_TYPE_DEPLOY", + "target_name": "default", + "git_info": {} } } { @@ -72,28 +82,35 @@ Plan: 0 to add, 0 to change, 0 to delete, 2 unchanged } } { - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", "q": { - "page_size": "1000" + "resource_key": "jobs.job_a" }, - "body": null + "body": { + "resource_key": "jobs.job_a", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "status": "OPERATION_STATUS_SUCCEEDED" + } } { - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", + "body": { + "name": "deployments/[UUID]/versions/2", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } } { "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", "q": { - "version_id": "2" + "resource_key": "jobs.job_a" }, "body": { - "cli_version": "[DEV_VERSION]", - "version_type": "VERSION_TYPE_DEPLOY", - "target_name": "default", - "git_info": {} + "resource_key": "jobs.job_a", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "status": "OPERATION_STATUS_SUCCEEDED" } } { @@ -105,36 +122,8 @@ Plan: 0 to add, 0 to change, 0 to delete, 2 unchanged "body": { "resource_key": "jobs.job_b", "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "job-b", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", "status": "OPERATION_STATUS_SUCCEEDED" } } -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", - "body": { - "name": "deployments/[UUID]/versions/2", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]/resources", - "q": { - "page_size": "1000" - }, - "body": null -} + +Exit code: 1 diff --git a/acceptance/bundle/dms/add-resources/script b/acceptance/bundle/dms/add-resources/script index 8fd8bf1c72e..8b1e75e1f3c 100644 --- a/acceptance/bundle/dms/add-resources/script +++ b/acceptance/bundle/dms/add-resources/script @@ -26,7 +26,7 @@ trace $CLI bundle plan # - Deploy 1: CREATE for job_a # - Deploy 2: ListResources + CREATE for job_b (job_a is unchanged) # - Plan: ListResources (no operations) -trace print_requests.py --get //bundle ^//workspace-files ^//import-file +trace print_requests.py --get --sort //bundle ^//workspace-files ^//import-file # Clean up. rm -rf .databricks diff --git a/acceptance/bundle/dms/plan-and-summary/output.txt b/acceptance/bundle/dms/plan-and-summary/output.txt index b33725777ea..9025b15c750 100644 --- a/acceptance/bundle/dms/plan-and-summary/output.txt +++ b/acceptance/bundle/dms/plan-and-summary/output.txt @@ -5,7 +5,9 @@ Deploying resources... Deployment complete! >>> [CLI] bundle plan -Plan: 0 to add, 0 to change, 0 to delete, 1 unchanged +create jobs.test_job + +Plan: 1 to add, 0 to change, 0 to delete, 0 unchanged >>> [CLI] bundle summary Name: plan-summary-test @@ -17,7 +19,7 @@ Resources: Jobs: test_job: Name: test-job - URL: [DATABRICKS_URL]/jobs/[NUMID]?o=[NUMID] + URL: (not deployed) >>> print_requests.py --get //bundle ^//workspace-files ^//import-file { @@ -53,20 +55,6 @@ Resources: "body": { "resource_key": "jobs.test_job", "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", "status": "OPERATION_STATUS_SUCCEEDED" } } diff --git a/acceptance/bundle/dms/release-lock-error/output.txt b/acceptance/bundle/dms/release-lock-error/output.txt index 1cbfd3019db..c828cf56863 100644 --- a/acceptance/bundle/dms/release-lock-error/output.txt +++ b/acceptance/bundle/dms/release-lock-error/output.txt @@ -39,20 +39,6 @@ Warn: Failed to release deployment lock: simulated complete version failure "body": { "resource_key": "jobs.test_job", "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", "status": "OPERATION_STATUS_SUCCEEDED" } } diff --git a/acceptance/bundle/dms/sequential-deploys/output.txt b/acceptance/bundle/dms/sequential-deploys/output.txt index 6665970799d..bf7a048a35c 100644 --- a/acceptance/bundle/dms/sequential-deploys/output.txt +++ b/acceptance/bundle/dms/sequential-deploys/output.txt @@ -4,7 +4,7 @@ Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys Deploying resources... Deployment complete! ->>> print_requests.py --get //bundle ^//workspace-files ^//import-file +>>> print_requests.py --get --sort //bundle ^//workspace-files ^//import-file { "method": "POST", "path": "/api/2.0/bundle/deployments", @@ -29,6 +29,14 @@ Deployment complete! "git_info": {} } } +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", + "body": { + "name": "deployments/[UUID]/versions/1", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} { "method": "POST", "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/operations", @@ -38,38 +46,20 @@ Deployment complete! "body": { "resource_key": "jobs.test_job", "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "test-job", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", "status": "OPERATION_STATUS_SUCCEEDED" } } -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/1/complete", - "body": { - "name": "deployments/[UUID]/versions/1", - "completion_reason": "VERSION_COMPLETE_SUCCESS" - } -} >>> [CLI] bundle deploy Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/files... Deploying resources... Deployment complete! ->>> print_requests.py --get //bundle ^//workspace-files ^//import-file +>>> print_requests.py --get --sort //bundle ^//workspace-files ^//import-file +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} { "method": "GET", "path": "/api/2.0/bundle/deployments/[UUID]/resources", @@ -78,10 +68,6 @@ Deployment complete! }, "body": null } -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} { "method": "POST", "path": "/api/2.0/bundle/deployments/[UUID]/versions", @@ -95,6 +81,14 @@ Deployment complete! "git_info": {} } } +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", + "body": { + "name": "deployments/[UUID]/versions/2", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} { "method": "POST", "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", @@ -104,29 +98,19 @@ Deployment complete! "body": { "resource_key": "jobs.new_job", "action_type": "OPERATION_ACTION_TYPE_CREATE", - "state": { - "deployment": { - "kind": "BUNDLE", - "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json" - }, - "edit_mode": "UI_LOCKED", - "format": "MULTI_TASK", - "max_concurrent_runs": 1, - "name": "new-job", - "queue": { - "enabled": true - } - }, - "resource_id": "[NUMID]", "status": "OPERATION_STATUS_SUCCEEDED" } } { "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/complete", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", + "q": { + "resource_key": "jobs.test_job" + }, "body": { - "name": "deployments/[UUID]/versions/2", - "completion_reason": "VERSION_COMPLETE_SUCCESS" + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", + "status": "OPERATION_STATUS_SUCCEEDED" } } @@ -135,7 +119,11 @@ Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/sequential-deploys Deploying resources... Deployment complete! ->>> print_requests.py --get //bundle ^//workspace-files ^//import-file +>>> print_requests.py --get --sort //bundle ^//workspace-files ^//import-file +{ + "method": "GET", + "path": "/api/2.0/bundle/deployments/[UUID]" +} { "method": "GET", "path": "/api/2.0/bundle/deployments/[UUID]/resources", @@ -144,10 +132,6 @@ Deployment complete! }, "body": null } -{ - "method": "GET", - "path": "/api/2.0/bundle/deployments/[UUID]" -} { "method": "POST", "path": "/api/2.0/bundle/deployments/[UUID]/versions", @@ -161,24 +145,35 @@ Deployment complete! "git_info": {} } } +{ + "method": "POST", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/complete", + "body": { + "name": "deployments/[UUID]/versions/3", + "completion_reason": "VERSION_COMPLETE_SUCCESS" + } +} { "method": "POST", "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/operations", "q": { - "resource_key": "jobs.test_job" + "resource_key": "jobs.new_job" }, "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_DELETE", - "resource_id": "[NUMID]", + "resource_key": "jobs.new_job", + "action_type": "OPERATION_ACTION_TYPE_CREATE", "status": "OPERATION_STATUS_SUCCEEDED" } } { "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/complete", + "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/operations", + "q": { + "resource_key": "jobs.test_job" + }, "body": { - "name": "deployments/[UUID]/versions/3", - "completion_reason": "VERSION_COMPLETE_SUCCESS" + "resource_key": "jobs.test_job", + "action_type": "OPERATION_ACTION_TYPE_DELETE", + "status": "OPERATION_STATUS_SUCCEEDED" } } diff --git a/acceptance/bundle/dms/sequential-deploys/script b/acceptance/bundle/dms/sequential-deploys/script index 0138aa240a2..7276760bf06 100644 --- a/acceptance/bundle/dms/sequential-deploys/script +++ b/acceptance/bundle/dms/sequential-deploys/script @@ -1,6 +1,6 @@ # Deploy with one job. trace $CLI bundle deploy -trace print_requests.py --get //bundle ^//workspace-files ^//import-file +trace print_requests.py --get --sort //bundle ^//workspace-files ^//import-file # Add a second job and redeploy. cat > databricks.yml << 'EOF' @@ -15,7 +15,7 @@ resources: name: new-job EOF trace $CLI bundle deploy -trace print_requests.py --get //bundle ^//workspace-files ^//import-file +trace print_requests.py --get --sort //bundle ^//workspace-files ^//import-file # Remove the first job and redeploy (should delete test_job). cat > databricks.yml << 'EOF' @@ -28,5 +28,5 @@ resources: name: new-job EOF trace $CLI bundle deploy -trace print_requests.py --get //bundle ^//workspace-files ^//import-file +trace print_requests.py --get --sort //bundle ^//workspace-files ^//import-file print_requests.py --get > /dev/null 2>&1 || true From 6bfd008dc229c1a53cd0f1a0569aa5264104e371 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Wed, 3 Jun 2026 18:48:31 +0200 Subject: [PATCH 21/25] bundle/dms: fix state round-trip for main's WAL-based StateDB Merging main changed several APIs the DMS code predates: - WorkspaceClient now takes a ctx (workspace_filesystem.go). - StateDB keeps a separate resource-key->ID index (stateIDs) that is authoritative during writes; Data.State is only reconstructed when the WAL is merged. LoadStateFromDMS wrote Data.State directly, leaving the index empty, so deletes failed with "missing in state". It now builds the database and calls OpenWithData, which populates the index. - The inline operation reporter read the freshly-created resource ID and state from Data.State (stale during a deploy). It now reads the ID from GetResourceID and the state from the value just applied, so operations carry the real resource_id and state and the server round-trips them. --- bundle/deploy/lock/workspace_filesystem.go | 2 +- bundle/direct/bundle_apply.go | 13 +++++++----- bundle/statemgmt/state_dms.go | 24 +++++++++------------- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/bundle/deploy/lock/workspace_filesystem.go b/bundle/deploy/lock/workspace_filesystem.go index 140cc56198b..de4ba792386 100644 --- a/bundle/deploy/lock/workspace_filesystem.go +++ b/bundle/deploy/lock/workspace_filesystem.go @@ -30,7 +30,7 @@ func (l *workspaceFilesystemLock) Acquire(ctx context.Context) error { user := b.Config.Workspace.CurrentUser.UserName dir := b.Config.Workspace.StatePath - lk, err := locker.CreateLocker(user, dir, b.WorkspaceClient()) + lk, err := locker.CreateLocker(user, dir, b.WorkspaceClient(ctx)) if err != nil { return err } diff --git a/bundle/direct/bundle_apply.go b/bundle/direct/bundle_apply.go index 6ea6e7a3528..d005b633e35 100644 --- a/bundle/direct/bundle_apply.go +++ b/bundle/direct/bundle_apply.go @@ -149,11 +149,14 @@ func (b *DeploymentBundle) Apply(ctx context.Context, client *databricks.Workspa // Report the operation inline to the metadata service. if b.OperationReporter != nil { - var resourceID string - var resourceState json.RawMessage - if dbentry, ok := b.StateDB.GetResourceEntry(resourceKey); ok { - resourceID = dbentry.ID - resourceState = dbentry.State + // Data.State (via GetResourceEntry) is not updated until the WAL is + // merged, so during a deploy the ID comes from GetResourceID and the + // just-applied state from sv.Value — the same value SaveState persists. + resourceID := b.StateDB.GetResourceID(resourceKey) + resourceState, marshalErr := json.Marshal(sv.Value) + if marshalErr != nil { + logdiag.LogError(ctx, fmt.Errorf("%s: serializing state for operation: %w", errorPrefix, marshalErr)) + return false } if reportErr := b.OperationReporter(ctx, resourceKey, resourceID, action, err, resourceState); reportErr != nil { logdiag.LogError(ctx, fmt.Errorf("%s: failed to report operation: %w", errorPrefix, reportErr)) diff --git a/bundle/statemgmt/state_dms.go b/bundle/statemgmt/state_dms.go index b1e59db9591..fd83735d660 100644 --- a/bundle/statemgmt/state_dms.go +++ b/bundle/statemgmt/state_dms.go @@ -11,21 +11,14 @@ import ( ) // LoadStateFromDMS loads resource state from the deployment metadata service -// into the state DB. It first opens the local state file (which contains the -// deployment ID pointer), then populates the resource state from the server. +// into the state DB. It builds the in-memory database from the server's +// resource list and opens the state DB with it, which is the read-mode +// equivalent of opening a local state file when DMS is not in use. func LoadStateFromDMS(ctx context.Context, b *bundle.Bundle) error { if b.DeploymentID == "" { return nil } - // Open the local state file first so the state DB path is set. - // The local file contains {"deployment_id":"..."} with no resource state. - db := &b.DeploymentBundle.StateDB - _, localPath := b.StateFilenameDirect(ctx) - if err := db.Open(ctx, localPath, dstate.WithRecovery(true), dstate.WithWrite(false)); err != nil { - return fmt.Errorf("opening local state: %w", err) - } - svc, err := tmpdms.NewDeploymentMetadataAPI(b.WorkspaceClient(ctx)) if err != nil { return fmt.Errorf("failed to create metadata service client: %w", err) @@ -38,9 +31,7 @@ func LoadStateFromDMS(ctx context.Context, b *bundle.Bundle) error { return fmt.Errorf("failed to list resources from deployment metadata service: %w", err) } - // Populate resource state from the server. - db.Data.State = make(map[string]dstate.ResourceEntry) - + data := dstate.NewDatabase("", 0) for _, r := range resources { // The DMS stores keys without the "resources." prefix (e.g., "jobs.foo"). // The state DB expects the full key (e.g., "resources.jobs.foo"). @@ -54,11 +45,16 @@ func LoadStateFromDMS(ctx context.Context, b *bundle.Bundle) error { } } - db.Data.State[resourceKey] = dstate.ResourceEntry{ + data.State[resourceKey] = dstate.ResourceEntry{ ID: r.ResourceID, State: stateBytes, } } + // OpenWithData populates the resource-key→ID index that GetResourceID relies + // on. Writing Data.State directly would leave that index empty, so deletes + // would fail with "missing in state". + _, localPath := b.StateFilenameDirect(ctx) + b.DeploymentBundle.StateDB.OpenWithData(localPath, data) return nil } From 743830daff739e809297b84de923ec6c10418c9f Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Wed, 3 Jun 2026 18:48:43 +0200 Subject: [PATCH 22/25] bundle/dms: record deployment_id and version_id on jobs and pipelines The SDK's JobDeployment/PipelineDeployment now carry deployment_id and version_id (used to look up deployment metadata in the DMS). Stamp them onto each job and pipeline so every resource records the deployment and the version that produced it. The IDs are only known after the deployment lock is acquired, so a new deploy-phase mutator (AnnotateDeploymentVersion) sets them, running after the lock and before the plan. The version is plumbed onto the bundle alongside the deployment ID. version_id changes on every deploy, so an ignore_local_changes rule keeps it from triggering an update on its own; a real update still sends the current version_id via the full-config Reset/EditPipeline. (Also adjusts isAborted to errors.AsType for the Go 1.26 linter pulled in by the merge.) --- bundle/bundle.go | 6 ++ .../lock/deployment_metadata_service.go | 8 +- .../metadata/annotate_deployment_version.go | 42 +++++++++++ .../annotate_deployment_version_test.go | 73 +++++++++++++++++++ bundle/direct/dresources/resources.yml | 14 ++++ bundle/direct/version_id_ignore_test.go | 46 ++++++++++++ bundle/phases/deploy.go | 7 ++ 7 files changed, 191 insertions(+), 5 deletions(-) create mode 100644 bundle/deploy/metadata/annotate_deployment_version.go create mode 100644 bundle/deploy/metadata/annotate_deployment_version_test.go create mode 100644 bundle/direct/version_id_ignore_test.go diff --git a/bundle/bundle.go b/bundle/bundle.go index 3b85d698c3f..3f717c8652d 100644 --- a/bundle/bundle.go +++ b/bundle/bundle.go @@ -146,6 +146,12 @@ type Bundle struct { // Populated during state pull when the deployment metadata service is enabled. DeploymentID string + // DeploymentVersionID is the DMS version created for the current deploy. + // Populated when the deployment lock is acquired (DMS enabled only) and + // stamped onto job/pipeline resources so each resource records the version + // that produced it. + DeploymentVersionID string + // if true, we skip approval checks for deploy, destroy resources and delete // files AutoApprove bool diff --git a/bundle/deploy/lock/deployment_metadata_service.go b/bundle/deploy/lock/deployment_metadata_service.go index 8426ad78524..83ea31068ea 100644 --- a/bundle/deploy/lock/deployment_metadata_service.go +++ b/bundle/deploy/lock/deployment_metadata_service.go @@ -59,6 +59,7 @@ func (l *metadataServiceLock) Acquire(ctx context.Context) error { } l.b.DeploymentID = deploymentID + l.b.DeploymentVersionID = versionID l.versionID = versionID l.stopHeartbeat = startHeartbeat(ctx, svc, deploymentID, versionID) l.reporter = newAsyncReporter(ctx, makeSyncReporter(svc, deploymentID, versionID)) @@ -337,9 +338,6 @@ func startHeartbeat(ctx context.Context, svc *tmpdms.DeploymentMetadataAPI, depl // isAborted checks if an error indicates the operation was aborted (HTTP 409 with ABORTED error code). func isAborted(err error) bool { - var apiErr *apierr.APIError - if errors.As(err, &apiErr) && apiErr.StatusCode == http.StatusConflict && apiErr.ErrorCode == "ABORTED" { - return true - } - return false + apiErr, ok := errors.AsType[*apierr.APIError](err) + return ok && apiErr.StatusCode == http.StatusConflict && apiErr.ErrorCode == "ABORTED" } diff --git a/bundle/deploy/metadata/annotate_deployment_version.go b/bundle/deploy/metadata/annotate_deployment_version.go new file mode 100644 index 00000000000..5929ead1e89 --- /dev/null +++ b/bundle/deploy/metadata/annotate_deployment_version.go @@ -0,0 +1,42 @@ +package metadata + +import ( + "context" + + "github.com/databricks/cli/bundle" + "github.com/databricks/cli/libs/diag" +) + +type annotateDeploymentVersion struct{} + +// AnnotateDeploymentVersion records the DMS deployment_id and version_id on the +// deployment block of every job and pipeline. Unlike AnnotateJobs/AnnotatePipelines +// (which run during Initialize), these IDs are only known after the deployment +// lock is acquired, so this mutator runs in the deploy phase. It is a no-op when +// the deployment metadata service is not enabled (DeploymentID is empty). +func AnnotateDeploymentVersion() bundle.Mutator { + return &annotateDeploymentVersion{} +} + +func (m *annotateDeploymentVersion) Name() string { + return "metadata.AnnotateDeploymentVersion" +} + +func (m *annotateDeploymentVersion) Apply(_ context.Context, b *bundle.Bundle) diag.Diagnostics { + if b.DeploymentID == "" { + return nil + } + + // AnnotateJobs and AnnotatePipelines run during Initialize and always set + // the Deployment block, so it is non-nil here. + for _, job := range b.Config.Resources.Jobs { + job.Deployment.DeploymentId = b.DeploymentID + job.Deployment.VersionId = b.DeploymentVersionID + } + for _, pipeline := range b.Config.Resources.Pipelines { + pipeline.Deployment.DeploymentId = b.DeploymentID + pipeline.Deployment.VersionId = b.DeploymentVersionID + } + + return nil +} diff --git a/bundle/deploy/metadata/annotate_deployment_version_test.go b/bundle/deploy/metadata/annotate_deployment_version_test.go new file mode 100644 index 00000000000..47cd2572c3f --- /dev/null +++ b/bundle/deploy/metadata/annotate_deployment_version_test.go @@ -0,0 +1,73 @@ +package metadata + +import ( + "testing" + + "github.com/databricks/cli/bundle" + "github.com/databricks/cli/bundle/config" + "github.com/databricks/cli/bundle/config/resources" + "github.com/databricks/databricks-sdk-go/service/jobs" + "github.com/databricks/databricks-sdk-go/service/pipelines" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func bundleWithDeploymentBlocks() *bundle.Bundle { + return &bundle.Bundle{ + Config: config.Root{ + Resources: config.Resources{ + Jobs: map[string]*resources.Job{ + "my-job": { + JobSettings: jobs.JobSettings{ + Name: "My Job", + Deployment: &jobs.JobDeployment{Kind: jobs.JobDeploymentKindBundle, MetadataFilePath: "/a/b/c/metadata.json"}, + }, + }, + }, + Pipelines: map[string]*resources.Pipeline{ + "my-pipeline": { + CreatePipeline: pipelines.CreatePipeline{ + Name: "My Pipeline", + Deployment: &pipelines.PipelineDeployment{Kind: pipelines.DeploymentKindBundle, MetadataFilePath: "/a/b/c/metadata.json"}, + }, + }, + }, + }, + }, + } +} + +func TestAnnotateDeploymentVersionStampsIDs(t *testing.T) { + b := bundleWithDeploymentBlocks() + b.DeploymentID = "dep-123" + b.DeploymentVersionID = "7" + + diags := AnnotateDeploymentVersion().Apply(t.Context(), b) + require.NoError(t, diags.Error()) + + job := b.Config.Resources.Jobs["my-job"].Deployment + assert.Equal(t, "dep-123", job.DeploymentId) + assert.Equal(t, "7", job.VersionId) + // Existing fields are preserved. + assert.Equal(t, jobs.JobDeploymentKindBundle, job.Kind) + assert.Equal(t, "/a/b/c/metadata.json", job.MetadataFilePath) + + pipeline := b.Config.Resources.Pipelines["my-pipeline"].Deployment + assert.Equal(t, "dep-123", pipeline.DeploymentId) + assert.Equal(t, "7", pipeline.VersionId) + assert.Equal(t, pipelines.DeploymentKindBundle, pipeline.Kind) + assert.Equal(t, "/a/b/c/metadata.json", pipeline.MetadataFilePath) +} + +func TestAnnotateDeploymentVersionNoopWithoutDMS(t *testing.T) { + b := bundleWithDeploymentBlocks() + // DeploymentID is empty: the deployment metadata service is not in use. + + diags := AnnotateDeploymentVersion().Apply(t.Context(), b) + require.NoError(t, diags.Error()) + + assert.Empty(t, b.Config.Resources.Jobs["my-job"].Deployment.DeploymentId) + assert.Empty(t, b.Config.Resources.Jobs["my-job"].Deployment.VersionId) + assert.Empty(t, b.Config.Resources.Pipelines["my-pipeline"].Deployment.DeploymentId) + assert.Empty(t, b.Config.Resources.Pipelines["my-pipeline"].Deployment.VersionId) +} diff --git a/bundle/direct/dresources/resources.yml b/bundle/direct/dresources/resources.yml index 8da2d5fee50..0829ae8eb77 100644 --- a/bundle/direct/dresources/resources.yml +++ b/bundle/direct/dresources/resources.yml @@ -16,6 +16,15 @@ resources: jobs: + ignore_local_changes: + # version_id is stamped with the current DMS deployment version on every + # deploy, so it changes constantly. Ignoring it as a local change keeps a + # new version from triggering an update on its own. When the job is updated + # for any other reason, DoUpdate sends the full config via Reset, so the + # current version_id is still recorded. + - field: deployment.version_id + reason: managed by the deployment metadata service + ignore_remote_changes: # Same as clusters.{aws,azure,gcp}_attributes — see clusters/resource_cluster.go#L361-L363 # s.SchemaPath("aws_attributes").SetSuppressDiff() @@ -131,6 +140,11 @@ resources: # "id" is output-only, providing it in config would be a mistake - field: id reason: "!drop" + # version_id is stamped with the current DMS deployment version on every + # deploy. Ignoring it as a local change keeps a new version from triggering + # an update on its own; a real update still sends it via the full config. + - field: deployment.version_id + reason: managed by the deployment metadata service backend_defaults: # https://github.com/databricks/terraform-provider-databricks/blob/4eba541abe1a9f50993ea7b9dd83874207e224a1/pipelines/resource_pipeline.go#L238 diff --git a/bundle/direct/version_id_ignore_test.go b/bundle/direct/version_id_ignore_test.go new file mode 100644 index 00000000000..196e46b548a --- /dev/null +++ b/bundle/direct/version_id_ignore_test.go @@ -0,0 +1,46 @@ +package direct + +import ( + "testing" + + "github.com/databricks/cli/bundle/direct/dresources" + "github.com/databricks/cli/libs/structs/structdiff" + "github.com/databricks/databricks-sdk-go/service/jobs" + "github.com/databricks/databricks-sdk-go/service/pipelines" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// The deployment metadata service stamps a new version_id onto every job and +// pipeline on each deploy. These tests pin the invariant that a version_id-only +// change is classified as an ignored local change, so it never triggers an +// update on its own. They diff the real resource state structs so the field +// path the engine produces is verified against the rule, not just hard-coded. + +func TestDeploymentVersionIDIgnoredForJobs(t *testing.T) { + a := jobs.JobSettings{Deployment: &jobs.JobDeployment{Kind: jobs.JobDeploymentKindBundle, VersionId: "1"}} + b := jobs.JobSettings{Deployment: &jobs.JobDeployment{Kind: jobs.JobDeploymentKindBundle, VersionId: "2"}} + + changes, err := structdiff.GetStructDiff(a, b, nil) + require.NoError(t, err) + require.Len(t, changes, 1) + require.Equal(t, "deployment.version_id", changes[0].Path.String()) + + cfg := dresources.GetResourceConfig("jobs") + _, ok := findMatchingRule(changes[0].Path, cfg.IgnoreLocalChanges) + assert.True(t, ok, "deployment.version_id must match a jobs ignore_local_changes rule") +} + +func TestDeploymentVersionIDIgnoredForPipelines(t *testing.T) { + a := pipelines.CreatePipeline{Deployment: &pipelines.PipelineDeployment{Kind: pipelines.DeploymentKindBundle, VersionId: "1"}} + b := pipelines.CreatePipeline{Deployment: &pipelines.PipelineDeployment{Kind: pipelines.DeploymentKindBundle, VersionId: "2"}} + + changes, err := structdiff.GetStructDiff(a, b, nil) + require.NoError(t, err) + require.Len(t, changes, 1) + require.Equal(t, "deployment.version_id", changes[0].Path.String()) + + cfg := dresources.GetResourceConfig("pipelines") + _, ok := findMatchingRule(changes[0].Path, cfg.IgnoreLocalChanges) + assert.True(t, ok, "deployment.version_id must match a pipelines ignore_local_changes rule") +} diff --git a/bundle/phases/deploy.go b/bundle/phases/deploy.go index d48be637c92..f108df0fd63 100644 --- a/bundle/phases/deploy.go +++ b/bundle/phases/deploy.go @@ -149,6 +149,13 @@ func Deploy(ctx context.Context, b *bundle.Bundle, outputHandler sync.OutputHand return } + // Stamp the DMS deployment_id/version_id onto resources now that the lock is + // held and the version is known, so they are part of the config the plan diffs. + bundle.ApplyContext(ctx, b, metadata.AnnotateDeploymentVersion()) + if logdiag.HasError(ctx) { + return + } + bundle.ApplySeqContext(ctx, b, files.Upload(outputHandler), deploy.StateUpdate(), From 14358cec6be99f80babb6f38eb8af9a66a2c8dcb Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Wed, 3 Jun 2026 18:48:54 +0200 Subject: [PATCH 23/25] acceptance/dms: regenerate outputs after merge and deployment_id/version_id Operations now carry the resource_id and full state (including the deployment block with deployment_id/version_id), and the out.test.toml dump format changed on main. sequential-deploys now shows the version_id rule working: deploy 2 bumps the version but the unchanged test_job records no operation. --- .../bundle/dms/add-resources/out.test.toml | 6 +- .../bundle/dms/add-resources/output.txt | 52 +++++++++++------ .../bundle/dms/deploy-error/out.test.toml | 6 +- acceptance/bundle/dms/deploy-error/output.txt | 15 +++++ .../bundle/dms/plan-and-summary/out.test.toml | 6 +- .../bundle/dms/plan-and-summary/output.txt | 22 ++++++- .../dms/release-lock-error/out.test.toml | 6 +- .../bundle/dms/release-lock-error/output.txt | 16 ++++++ .../dms/sequential-deploys/out.test.toml | 6 +- .../bundle/dms/sequential-deploys/output.txt | 57 +++++++++++-------- 10 files changed, 128 insertions(+), 64 deletions(-) diff --git a/acceptance/bundle/dms/add-resources/out.test.toml b/acceptance/bundle/dms/add-resources/out.test.toml index 6ce208a0484..9b50a81b196 100644 --- a/acceptance/bundle/dms/add-resources/out.test.toml +++ b/acceptance/bundle/dms/add-resources/out.test.toml @@ -1,6 +1,4 @@ Local = true Cloud = false - -[EnvMatrix] - DATABRICKS_BUNDLE_ENGINE = ["direct"] - DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] +EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["direct"] +EnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/add-resources/output.txt b/acceptance/bundle/dms/add-resources/output.txt index 7545b945f6e..f1d168abd1a 100644 --- a/acceptance/bundle/dms/add-resources/output.txt +++ b/acceptance/bundle/dms/add-resources/output.txt @@ -10,10 +10,10 @@ Deploying resources... Deployment complete! >>> [CLI] bundle plan -create jobs.job_a -create jobs.job_b +update jobs.job_a +update jobs.job_b -Plan: 2 to add, 0 to change, 0 to delete, 0 unchanged +Plan: 0 to add, 2 to change, 0 to delete, 0 unchanged >>> print_requests.py --get --sort //bundle ^//workspace-files ^//import-file { @@ -90,6 +90,22 @@ Plan: 2 to add, 0 to change, 0 to delete, 0 unchanged "body": { "resource_key": "jobs.job_a", "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "deployment_id": "[UUID]", + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json", + "version_id": "1" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "job-a", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", "status": "OPERATION_STATUS_SUCCEEDED" } } @@ -101,18 +117,6 @@ Plan: 2 to add, 0 to change, 0 to delete, 0 unchanged "completion_reason": "VERSION_COMPLETE_SUCCESS" } } -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", - "q": { - "resource_key": "jobs.job_a" - }, - "body": { - "resource_key": "jobs.job_a", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} { "method": "POST", "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", @@ -122,8 +126,22 @@ Plan: 2 to add, 0 to change, 0 to delete, 0 unchanged "body": { "resource_key": "jobs.job_b", "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "deployment_id": "[UUID]", + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/add-resources-test/default/state/metadata.json", + "version_id": "2" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "job-b", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", "status": "OPERATION_STATUS_SUCCEEDED" } } - -Exit code: 1 diff --git a/acceptance/bundle/dms/deploy-error/out.test.toml b/acceptance/bundle/dms/deploy-error/out.test.toml index 6ce208a0484..9b50a81b196 100644 --- a/acceptance/bundle/dms/deploy-error/out.test.toml +++ b/acceptance/bundle/dms/deploy-error/out.test.toml @@ -1,6 +1,4 @@ Local = true Cloud = false - -[EnvMatrix] - DATABRICKS_BUNDLE_ENGINE = ["direct"] - DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] +EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["direct"] +EnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/deploy-error/output.txt b/acceptance/bundle/dms/deploy-error/output.txt index 2baa4cafc69..806d8056b9f 100644 --- a/acceptance/bundle/dms/deploy-error/output.txt +++ b/acceptance/bundle/dms/deploy-error/output.txt @@ -44,6 +44,21 @@ API message: Invalid job configuration. "body": { "resource_key": "jobs.test_job", "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "deployment_id": "[UUID]", + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/metadata-service-error-test/default/state/metadata.json", + "version_id": "1" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, "status": "OPERATION_STATUS_FAILED", "error_message": "Invalid job configuration." } diff --git a/acceptance/bundle/dms/plan-and-summary/out.test.toml b/acceptance/bundle/dms/plan-and-summary/out.test.toml index 6ce208a0484..9b50a81b196 100644 --- a/acceptance/bundle/dms/plan-and-summary/out.test.toml +++ b/acceptance/bundle/dms/plan-and-summary/out.test.toml @@ -1,6 +1,4 @@ Local = true Cloud = false - -[EnvMatrix] - DATABRICKS_BUNDLE_ENGINE = ["direct"] - DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] +EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["direct"] +EnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/plan-and-summary/output.txt b/acceptance/bundle/dms/plan-and-summary/output.txt index 9025b15c750..4b6388294b1 100644 --- a/acceptance/bundle/dms/plan-and-summary/output.txt +++ b/acceptance/bundle/dms/plan-and-summary/output.txt @@ -5,9 +5,9 @@ Deploying resources... Deployment complete! >>> [CLI] bundle plan -create jobs.test_job +update jobs.test_job -Plan: 1 to add, 0 to change, 0 to delete, 0 unchanged +Plan: 0 to add, 1 to change, 0 to delete, 0 unchanged >>> [CLI] bundle summary Name: plan-summary-test @@ -19,7 +19,7 @@ Resources: Jobs: test_job: Name: test-job - URL: (not deployed) + URL: [DATABRICKS_URL]/jobs/[NUMID]?w=[NUMID] >>> print_requests.py --get //bundle ^//workspace-files ^//import-file { @@ -55,6 +55,22 @@ Resources: "body": { "resource_key": "jobs.test_job", "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "deployment_id": "[UUID]", + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/plan-summary-test/default/state/metadata.json", + "version_id": "1" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", "status": "OPERATION_STATUS_SUCCEEDED" } } diff --git a/acceptance/bundle/dms/release-lock-error/out.test.toml b/acceptance/bundle/dms/release-lock-error/out.test.toml index 6ce208a0484..9b50a81b196 100644 --- a/acceptance/bundle/dms/release-lock-error/out.test.toml +++ b/acceptance/bundle/dms/release-lock-error/out.test.toml @@ -1,6 +1,4 @@ Local = true Cloud = false - -[EnvMatrix] - DATABRICKS_BUNDLE_ENGINE = ["direct"] - DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] +EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["direct"] +EnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/release-lock-error/output.txt b/acceptance/bundle/dms/release-lock-error/output.txt index c828cf56863..838ee529694 100644 --- a/acceptance/bundle/dms/release-lock-error/output.txt +++ b/acceptance/bundle/dms/release-lock-error/output.txt @@ -39,6 +39,22 @@ Warn: Failed to release deployment lock: simulated complete version failure "body": { "resource_key": "jobs.test_job", "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "deployment_id": "[UUID]", + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/dms-release-lock-error/fail-complete/state/metadata.json", + "version_id": "1" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", "status": "OPERATION_STATUS_SUCCEEDED" } } diff --git a/acceptance/bundle/dms/sequential-deploys/out.test.toml b/acceptance/bundle/dms/sequential-deploys/out.test.toml index 6ce208a0484..9b50a81b196 100644 --- a/acceptance/bundle/dms/sequential-deploys/out.test.toml +++ b/acceptance/bundle/dms/sequential-deploys/out.test.toml @@ -1,6 +1,4 @@ Local = true Cloud = false - -[EnvMatrix] - DATABRICKS_BUNDLE_ENGINE = ["direct"] - DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] +EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["direct"] +EnvMatrix.DATABRICKS_BUNDLE_MANAGED_STATE = ["true"] diff --git a/acceptance/bundle/dms/sequential-deploys/output.txt b/acceptance/bundle/dms/sequential-deploys/output.txt index bf7a048a35c..0c4ca4e1283 100644 --- a/acceptance/bundle/dms/sequential-deploys/output.txt +++ b/acceptance/bundle/dms/sequential-deploys/output.txt @@ -46,6 +46,22 @@ Deployment complete! "body": { "resource_key": "jobs.test_job", "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "deployment_id": "[UUID]", + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json", + "version_id": "1" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "test-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", "status": "OPERATION_STATUS_SUCCEEDED" } } @@ -98,18 +114,22 @@ Deployment complete! "body": { "resource_key": "jobs.new_job", "action_type": "OPERATION_ACTION_TYPE_CREATE", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/2/operations", - "q": { - "resource_key": "jobs.test_job" - }, - "body": { - "resource_key": "jobs.test_job", - "action_type": "OPERATION_ACTION_TYPE_CREATE", + "state": { + "deployment": { + "deployment_id": "[UUID]", + "kind": "BUNDLE", + "metadata_file_path": "/Workspace/Users/[USERNAME]/.bundle/sequential-deploys-test/default/state/metadata.json", + "version_id": "2" + }, + "edit_mode": "UI_LOCKED", + "format": "MULTI_TASK", + "max_concurrent_runs": 1, + "name": "new-job", + "queue": { + "enabled": true + } + }, + "resource_id": "[NUMID]", "status": "OPERATION_STATUS_SUCCEEDED" } } @@ -153,18 +173,6 @@ Deployment complete! "completion_reason": "VERSION_COMPLETE_SUCCESS" } } -{ - "method": "POST", - "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/operations", - "q": { - "resource_key": "jobs.new_job" - }, - "body": { - "resource_key": "jobs.new_job", - "action_type": "OPERATION_ACTION_TYPE_CREATE", - "status": "OPERATION_STATUS_SUCCEEDED" - } -} { "method": "POST", "path": "/api/2.0/bundle/deployments/[UUID]/versions/3/operations", @@ -174,6 +182,7 @@ Deployment complete! "body": { "resource_key": "jobs.test_job", "action_type": "OPERATION_ACTION_TYPE_DELETE", + "resource_id": "[NUMID]", "status": "OPERATION_STATUS_SUCCEEDED" } } From ce8132807de744ae587320ab977fbcd713ea7c83 Mon Sep 17 00:00:00 2001 From: Ilya Kuznetsov Date: Thu, 4 Jun 2026 13:35:10 +0200 Subject: [PATCH 24/25] bundle/dms: record display_name on the deployment version (#5438) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Changes Set `display_name` on the DMS deployment version, using the bundle name — the same value already recorded on the deployment. The `Version` proto has a `display_name` field, but the `CreateVersion` request never populated it, so every version came back with a null `display_name` even though the deployment had one. This stamps it for parity. ## Why `display_name` is set on the deployment (from the bundle name) but was missing on each version, leaving version records without a human-readable label. Filling it in keeps deployment and version metadata consistent. ## Tests Updated the `bundle/dms` acceptance outputs and confirmed they pass. This pull request and its description were written by Isaac, an AI coding agent. --- acceptance/bundle/dms/add-resources/output.txt | 2 ++ acceptance/bundle/dms/deploy-error/output.txt | 1 + acceptance/bundle/dms/plan-and-summary/output.txt | 1 + acceptance/bundle/dms/release-lock-error/output.txt | 1 + acceptance/bundle/dms/sequential-deploys/output.txt | 3 +++ bundle/deploy/lock/deployment_metadata_service.go | 1 + 6 files changed, 9 insertions(+) diff --git a/acceptance/bundle/dms/add-resources/output.txt b/acceptance/bundle/dms/add-resources/output.txt index f1d168abd1a..eaa62eb6eb4 100644 --- a/acceptance/bundle/dms/add-resources/output.txt +++ b/acceptance/bundle/dms/add-resources/output.txt @@ -56,6 +56,7 @@ Plan: 0 to add, 2 to change, 0 to delete, 0 unchanged "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", + "display_name": "add-resources-test", "target_name": "default", "git_info": {} } @@ -69,6 +70,7 @@ Plan: 0 to add, 2 to change, 0 to delete, 0 unchanged "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", + "display_name": "add-resources-test", "target_name": "default", "git_info": {} } diff --git a/acceptance/bundle/dms/deploy-error/output.txt b/acceptance/bundle/dms/deploy-error/output.txt index 806d8056b9f..1706c0fac08 100644 --- a/acceptance/bundle/dms/deploy-error/output.txt +++ b/acceptance/bundle/dms/deploy-error/output.txt @@ -31,6 +31,7 @@ API message: Invalid job configuration. "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", + "display_name": "metadata-service-error-test", "target_name": "default", "git_info": {} } diff --git a/acceptance/bundle/dms/plan-and-summary/output.txt b/acceptance/bundle/dms/plan-and-summary/output.txt index 4b6388294b1..cac857d2eea 100644 --- a/acceptance/bundle/dms/plan-and-summary/output.txt +++ b/acceptance/bundle/dms/plan-and-summary/output.txt @@ -42,6 +42,7 @@ Resources: "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", + "display_name": "plan-summary-test", "target_name": "default", "git_info": {} } diff --git a/acceptance/bundle/dms/release-lock-error/output.txt b/acceptance/bundle/dms/release-lock-error/output.txt index 838ee529694..935561f7bc1 100644 --- a/acceptance/bundle/dms/release-lock-error/output.txt +++ b/acceptance/bundle/dms/release-lock-error/output.txt @@ -26,6 +26,7 @@ Warn: Failed to release deployment lock: simulated complete version failure "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", + "display_name": "dms-release-lock-error", "target_name": "fail-complete", "git_info": {} } diff --git a/acceptance/bundle/dms/sequential-deploys/output.txt b/acceptance/bundle/dms/sequential-deploys/output.txt index 0c4ca4e1283..9982e9c4801 100644 --- a/acceptance/bundle/dms/sequential-deploys/output.txt +++ b/acceptance/bundle/dms/sequential-deploys/output.txt @@ -25,6 +25,7 @@ Deployment complete! "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", + "display_name": "sequential-deploys-test", "target_name": "default", "git_info": {} } @@ -93,6 +94,7 @@ Deployment complete! "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", + "display_name": "sequential-deploys-test", "target_name": "default", "git_info": {} } @@ -161,6 +163,7 @@ Deployment complete! "body": { "cli_version": "[DEV_VERSION]", "version_type": "VERSION_TYPE_DEPLOY", + "display_name": "sequential-deploys-test", "target_name": "default", "git_info": {} } diff --git a/bundle/deploy/lock/deployment_metadata_service.go b/bundle/deploy/lock/deployment_metadata_service.go index 83ea31068ea..a831b87746b 100644 --- a/bundle/deploy/lock/deployment_metadata_service.go +++ b/bundle/deploy/lock/deployment_metadata_service.go @@ -153,6 +153,7 @@ func acquireLock(ctx context.Context, b *bundle.Bundle, svc *tmpdms.DeploymentMe Parent: "deployments/" + deploymentID, VersionID: versionID, Version: &tmpdms.Version{ + DisplayName: b.Config.Bundle.Name, CliVersion: build.GetInfo().Version, VersionType: versionType, TargetName: b.Config.Bundle.Target, From 06061aef1cd4159851d068163312e82dd4fe7a2c Mon Sep 17 00:00:00 2001 From: Ilya Kuznetsov Date: Thu, 4 Jun 2026 16:41:50 +0200 Subject: [PATCH 25/25] bundle/dms: record deployment_mode on the deployment version (#5445) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Changes Record the bundle target deployment mode on each DMS version. Adds a `deployment_mode` field (and the `DEPLOYMENT_MODE_DEVELOPMENT` / `DEPLOYMENT_MODE_PRODUCTION` enum) to `tmpdms.Version`, and sets it in the `CreateVersion` request from `bundle.mode`. Not set on the deployment: `Deployment.deployment_mode` is derived server-side from the most recent version's mode (output-only), so the CLI only sets it on the version. A target with no `mode` maps to an empty value, which is omitted (the server treats it as unspecified) — we don't fabricate a default. ## Why The SDK's `bundle.Version` already carries `deployment_mode` ("captured at the time of this version"), but the CLI never populated it, so every version recorded a null mode. This stamps it so each version records whether it was a development or production deployment. ## Tests Added a unit test for the mode mapping (development / production / unset). The `bundle/dms` acceptance outputs are unchanged because those targets don't set a mode. Verified live against a workspace: a `mode: development` target now records `deployment_mode: DEPLOYMENT_MODE_DEVELOPMENT` on the created version. This pull request and its description were written by Isaac, an AI coding agent. --- .../lock/deployment_metadata_service.go | 23 +++++++++++++++---- .../lock/deployment_metadata_service_test.go | 19 +++++++++++++++ libs/tmpdms/types.go | 7 ++++++ 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/bundle/deploy/lock/deployment_metadata_service.go b/bundle/deploy/lock/deployment_metadata_service.go index a831b87746b..5206a852eec 100644 --- a/bundle/deploy/lock/deployment_metadata_service.go +++ b/bundle/deploy/lock/deployment_metadata_service.go @@ -14,6 +14,7 @@ import ( "time" "github.com/databricks/cli/bundle" + "github.com/databricks/cli/bundle/config" "github.com/databricks/cli/bundle/deploy" "github.com/databricks/cli/bundle/deployplan" "github.com/databricks/cli/bundle/statemgmt" @@ -153,10 +154,11 @@ func acquireLock(ctx context.Context, b *bundle.Bundle, svc *tmpdms.DeploymentMe Parent: "deployments/" + deploymentID, VersionID: versionID, Version: &tmpdms.Version{ - DisplayName: b.Config.Bundle.Name, - CliVersion: build.GetInfo().Version, - VersionType: versionType, - TargetName: b.Config.Bundle.Target, + DisplayName: b.Config.Bundle.Name, + DeploymentMode: deploymentMode(b.Config.Bundle.Mode), + CliVersion: build.GetInfo().Version, + VersionType: versionType, + TargetName: b.Config.Bundle.Target, // Same git provenance the CLI records in metadata.json. GitInfo: &tmpdms.GitInfo{ OriginURL: b.Config.Bundle.Git.OriginURL, @@ -342,3 +344,16 @@ func isAborted(err error) bool { apiErr, ok := errors.AsType[*apierr.APIError](err) return ok && apiErr.StatusCode == http.StatusConflict && apiErr.ErrorCode == "ABORTED" } + +// deploymentMode maps a bundle target mode to the DMS deployment mode enum. +// Unset target modes produce an empty value, which is omitted from the request. +func deploymentMode(mode config.Mode) tmpdms.DeploymentMode { + switch mode { + case config.Development: + return tmpdms.DeploymentModeDevelopment + case config.Production: + return tmpdms.DeploymentModeProduction + default: + return "" + } +} diff --git a/bundle/deploy/lock/deployment_metadata_service_test.go b/bundle/deploy/lock/deployment_metadata_service_test.go index 980cce00934..4217a47c69c 100644 --- a/bundle/deploy/lock/deployment_metadata_service_test.go +++ b/bundle/deploy/lock/deployment_metadata_service_test.go @@ -3,6 +3,7 @@ package lock import ( "testing" + "github.com/databricks/cli/bundle/config" "github.com/databricks/cli/bundle/deployplan" "github.com/databricks/cli/libs/tmpdms" "github.com/stretchr/testify/assert" @@ -52,3 +53,21 @@ func TestGoalToVersionType(t *testing.T) { _, ok = goalToVersionType(GoalUnbind) assert.False(t, ok) } + +func TestDeploymentMode(t *testing.T) { + tests := []struct { + mode config.Mode + expected tmpdms.DeploymentMode + }{ + {config.Development, tmpdms.DeploymentModeDevelopment}, + {config.Production, tmpdms.DeploymentModeProduction}, + {"", ""}, + {"unknown", ""}, + } + + for _, tt := range tests { + t.Run(string(tt.mode), func(t *testing.T) { + assert.Equal(t, tt.expected, deploymentMode(tt.mode)) + }) + } +} diff --git a/libs/tmpdms/types.go b/libs/tmpdms/types.go index 1729876ec89..9e4f900c6f8 100644 --- a/libs/tmpdms/types.go +++ b/libs/tmpdms/types.go @@ -17,6 +17,7 @@ type ( OperationStatus string OperationActionType string DeploymentResourceType string + DeploymentMode string ) const ( @@ -47,6 +48,11 @@ const ( VersionTypeDestroy VersionType = "VERSION_TYPE_DESTROY" ) +const ( + DeploymentModeDevelopment DeploymentMode = "DEPLOYMENT_MODE_DEVELOPMENT" + DeploymentModeProduction DeploymentMode = "DEPLOYMENT_MODE_PRODUCTION" +) + const ( OperationStatusUnspecified OperationStatus = "OPERATION_STATUS_UNSPECIFIED" OperationStatusSucceeded OperationStatus = "OPERATION_STATUS_SUCCEEDED" @@ -119,6 +125,7 @@ type Version struct { VersionType VersionType `json:"version_type,omitempty"` CompletionReason VersionComplete `json:"completion_reason,omitempty"` CompletedBy string `json:"completed_by,omitempty"` + DeploymentMode DeploymentMode `json:"deployment_mode,omitempty"` DisplayName string `json:"display_name,omitempty"` TargetName string `json:"target_name,omitempty"` GitInfo *GitInfo `json:"git_info,omitempty"`