From cdc80c7c448e10cc5751293ac9f33c73e88099b0 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Tue, 14 Apr 2026 12:32:17 +0000 Subject: [PATCH 01/15] 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 0000000000..6914816970 --- /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 0000000000..5971e67292 --- /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 0000000000..6ce208a048 --- /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 0000000000..19450055a6 --- /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 0000000000..c3b8fda676 --- /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 0000000000..601384fdf9 --- /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 0000000000..c21c8a9392 --- /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 0000000000..4786eeddf7 --- /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 0000000000..6ce208a048 --- /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 0000000000..7ee1e3e8ab --- /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 0000000000..4624ecc6ce --- /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 0000000000..9d7f2c1348 --- /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 0000000000..6ce208a048 --- /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 0000000000..52fcc7fa16 --- /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 0000000000..57120c0b94 --- /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 0000000000..e20c91719e --- /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 0000000000..6ce208a048 --- /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 0000000000..85363efa8b --- /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 0000000000..b508eb45da --- /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 0000000000..94323b84d9 --- /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 0000000000..6ce208a048 --- /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 0000000000..e7d0f274ce --- /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 0000000000..1223233a0b --- /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 0000000000..1910e96135 --- /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 0000000000..5a8ae88a29 --- /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 0000000000..0d7c1fb63b --- /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 0000000000..6ce208a048 --- /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 0000000000..9899405bf7 --- /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 0000000000..6e9b9a477f --- /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 0000000000..5d95b8d05d --- /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 f4d33daed1..1207cd3d73 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 d4f788c3ca..0000000000 --- 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 0000000000..b4284859b6 --- /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 0000000000..980cce0093 --- /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 0000000000..c51b17c912 --- /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 26f95edfc9..0000000000 --- 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 0000000000..e84f327d84 --- /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 e0dcd9b288..44e21427aa 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 a7f3ee65fc..66c991305d 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 15ccf2ac4e..9007bbeebe 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 58b9bc6b4b..e7aef75927 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 0000000000..a4d08c7cd0 --- /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 fbed0aaef1..7631fd3ca4 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 110ab75731..76f82e224a 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 12720f1dc5..1b6c8125c3 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 0000000000..7debc2ce8b --- /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 7490897ff5..8c32a75ce0 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 b2da9f893c..b545cfac4e 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 a6f48d99fa..448b2e0374 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 0000000000..a612aae817 --- /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 0ac7fe34aa..21def45372 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 b2a95b1902..8bfa295f98 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 2d7048dc8d..54d291fb7e 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 0000000000..a729553b03 --- /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 0000000000..8dd6cdbfb6 --- /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/15] 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 66c991305d..b9c3d93e11 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 76f82e224a..7603dabec5 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 1b6c8125c3..0e1ff4d708 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/15] 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 b4284859b6..5407b1606c 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 0000000000..f489e3d39b --- /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 448b2e0374..3e4d252354 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/15] 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 5407b1606c..f5c53ef33b 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/15] 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 c51b17c912..2d08c52ba4 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/15] 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 5971e67292..0000000000 --- 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 c3b8fda676..b569be070e 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 4624ecc6ce..849571a1df 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 e20c91719e..0000000000 --- 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 b508eb45da..7648f7584a 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 1223233a0b..68290e6fc8 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 5a8ae88a29..8c0d42927c 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 6e9b9a477f..407df194b2 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/15] 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 0000000000..c6bdf78405 --- /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 19450055a6..57beaa1f09 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 b569be070e..c3b8fda676 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 0000000000..060493c638 --- /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 7ee1e3e8ab..3d2ede3a96 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 849571a1df..4624ecc6ce 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 0000000000..f888ee5656 --- /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 52fcc7fa16..e00b914c32 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 0000000000..b7d21bb27c --- /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 85363efa8b..f1a3e9c249 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 7648f7584a..b508eb45da 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 0000000000..fb028a4e99 --- /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 e7d0f274ce..d56d1f0961 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 68290e6fc8..1223233a0b 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 8c0d42927c..5a8ae88a29 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 0000000000..d00b5a8ca6 --- /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 9899405bf7..79fb0b649b 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 407df194b2..5f4f895e4b 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 0000000000..601384fdf9 --- /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 5d95b8d05d..c529abc9de 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/15] 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 f5c53ef33b..66c38ea696 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/15] 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 e84f327d84..140cc56198 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/15] 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 c6bdf78405..0000000000 --- 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 6ce208a048..0000000000 --- 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 57beaa1f09..17c491fea4 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 c3b8fda676..8fd8bf1c72 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 060493c638..0000000000 --- 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 6ce208a048..0000000000 --- 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 4624ecc6ce..28a0e4501f 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 9d7f2c1348..70b16ea757 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 f888ee5656..0000000000 --- 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 6ce208a048..0000000000 --- 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 e00b914c32..7938a2b4f0 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 b7d21bb27c..0000000000 --- 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 6ce208a048..0000000000 --- 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 b508eb45da..a662938cca 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 fb028a4e99..0000000000 --- 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 6ce208a048..0000000000 --- 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 1223233a0b..a9c0de93c9 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 1910e96135..a721baa4f6 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 5a8ae88a29..4231726606 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 d00b5a8ca6..0000000000 --- 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 6ce208a048..0000000000 --- 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 5f4f895e4b..5e1bff60cf 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/15] 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 c06449a248..6e75f49515 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/15] 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 0000000000..6ce208a048 --- /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 17c491fea4..c05732a0dd 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 0000000000..6ce208a048 --- /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 3d2ede3a96..c4c0f89018 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 0000000000..6ce208a048 --- /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 7938a2b4f0..3fce2c479d 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 0000000000..6ce208a048 --- /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 f1a3e9c249..a29257bd2e 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 0000000000..6ce208a048 --- /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 d56d1f0961..4a14bbbef9 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 0000000000..6ce208a048 --- /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 79fb0b649b..2730fd26d5 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/15] 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 2730fd26d5..237288ed55 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 5e1bff60cf..0138aa240a 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/15] 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 c21c8a9392..0000000000 --- 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 6ce208a048..0000000000 --- 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 3fce2c479d..0000000000 --- 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 4231726606..0000000000 --- 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/15] 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 c529abc9de..5d95b8d05d 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"]'