-
Notifications
You must be signed in to change notification settings - Fork 198
Add support for UC secrets #5861
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 10 commits
cf22286
6682795
3daa042
4a52fd3
e8c51ad
2ed6960
e1b0b77
44965b1
1f56144
3821f05
e37a7e5
65611e0
3e8298d
4ae6be9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| bundle: | ||
| name: test-bundle-$UNIQUE_NAME | ||
|
|
||
| variables: | ||
| secret_value: | ||
| description: "Test secret value" | ||
| default: "initial-secret-value" | ||
|
|
||
| resources: | ||
| secrets: | ||
| secret1: | ||
| catalog_name: main | ||
| schema_name: default | ||
| name: test_secret_$UNIQUE_NAME | ||
| value: ${var.secret_value} | ||
| comment: "Test secret" | ||
| grants: | ||
| - principal: account users | ||
| privileges: | ||
| - READ_SECRET | ||
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| bundle: | ||
| name: test-bundle-$UNIQUE_NAME | ||
|
|
||
| variables: | ||
| secret_value: | ||
| description: "Test secret value" | ||
| default: "initial-secret-value" | ||
|
|
||
| resources: | ||
| secrets: | ||
| secret1: | ||
| catalog_name: main | ||
| schema_name: default | ||
| name: test_secret | ||
| value: ${var.secret_value} | ||
| comment: "Test secret for acceptance testing" |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,102 @@ | ||
|
|
||
| >>> [CLI] bundle validate | ||
| Name: test-bundle-[UNIQUE_NAME] | ||
| Target: default | ||
| Workspace: | ||
| User: [USERNAME] | ||
| Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle-[UNIQUE_NAME]/default | ||
|
|
||
| Validation OK! | ||
|
|
||
| >>> [CLI] bundle summary | ||
| Name: test-bundle-[UNIQUE_NAME] | ||
| Target: default | ||
| Workspace: | ||
| User: [USERNAME] | ||
| Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle-[UNIQUE_NAME]/default | ||
| Resources: | ||
| Secrets: | ||
| secret1: | ||
| Name: main.default.test_secret | ||
| URL: (not deployed) | ||
|
|
||
| >>> [CLI] bundle deploy | ||
| Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle-[UNIQUE_NAME]/default/files... | ||
| Deploying resources... | ||
| Updating deployment state... | ||
| Deployment complete! | ||
|
|
||
| >>> print_requests.py //unity-catalog | ||
| { | ||
| "method": "POST", | ||
| "path": "/api/2.1/unity-catalog/secrets", | ||
| "body": { | ||
| "catalog_name": "main", | ||
| "comment": "Test secret for acceptance testing", | ||
| "name": "test_secret", | ||
| "schema_name": "default", | ||
| "value": "initial-secret-value" | ||
| } | ||
| } | ||
| secrets secret1 catalog_name='main' schema_name='default' name='test_secret' comment='Test secret for acceptance testing' | ||
|
|
||
| === Update comment and re-deploy | ||
| >>> update_file.py databricks.yml Test secret for acceptance testing Updated comment | ||
|
|
||
| >>> [CLI] bundle deploy | ||
| Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle-[UNIQUE_NAME]/default/files... | ||
| Deploying resources... | ||
| Updating deployment state... | ||
| Deployment complete! | ||
|
|
||
| >>> print_requests.py //unity-catalog | ||
| { | ||
| "method": "PATCH", | ||
| "path": "/api/2.1/unity-catalog/secrets/main.default.test_secret", | ||
| "q": { | ||
| "update_mask": "*" | ||
| }, | ||
| "body": { | ||
| "catalog_name": "main", | ||
| "comment": "Updated comment", | ||
| "name": "test_secret", | ||
| "schema_name": "default", | ||
| "value": "initial-secret-value" | ||
| } | ||
| } | ||
| secrets secret1 catalog_name='main' schema_name='default' name='test_secret' comment='Updated comment' | ||
|
|
||
| === Restore comment and re-deploy | ||
| >>> update_file.py databricks.yml Updated comment Test secret for acceptance testing | ||
|
|
||
| >>> [CLI] bundle deploy | ||
| Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle-[UNIQUE_NAME]/default/files... | ||
| Deploying resources... | ||
| Updating deployment state... | ||
| Deployment complete! | ||
|
|
||
| >>> print_requests.py //unity-catalog | ||
| { | ||
| "method": "PATCH", | ||
| "path": "/api/2.1/unity-catalog/secrets/main.default.test_secret", | ||
| "q": { | ||
| "update_mask": "*" | ||
| }, | ||
| "body": { | ||
| "catalog_name": "main", | ||
| "comment": "Test secret for acceptance testing", | ||
| "name": "test_secret", | ||
| "schema_name": "default", | ||
| "value": "initial-secret-value" | ||
| } | ||
| } | ||
| secrets secret1 catalog_name='main' schema_name='default' name='test_secret' comment='Test secret for acceptance testing' | ||
|
|
||
| >>> [CLI] bundle destroy --auto-approve | ||
| The following resources will be deleted: | ||
| delete resources.secrets.secret1 | ||
|
|
||
| All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/test-bundle-[UNIQUE_NAME]/default | ||
|
|
||
| Deleting files... | ||
| Destroy complete! |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,28 @@ | ||
| envsubst < databricks.yml.tmpl > databricks.yml | ||
|
|
||
| cleanup() { | ||
| trace $CLI bundle destroy --auto-approve | ||
| rm out.requests.txt | ||
| } | ||
| trap cleanup EXIT | ||
|
|
||
| trace $CLI bundle validate | ||
| trace $CLI bundle summary | ||
| trace $CLI bundle deploy | ||
|
|
||
| trace print_requests.py //unity-catalog | ||
| read_state.py secrets secret1 catalog_name schema_name name comment | ||
|
|
||
| title "Update comment and re-deploy" | ||
| trace update_file.py databricks.yml "Test secret for acceptance testing" "Updated comment" | ||
| trace $CLI bundle deploy | ||
| trace print_requests.py //unity-catalog | ||
| read_state.py secrets secret1 catalog_name schema_name name comment | ||
|
|
||
| title "Restore comment and re-deploy" | ||
| trace update_file.py databricks.yml "Updated comment" "Test secret for acceptance testing" | ||
| trace $CLI bundle deploy | ||
| trace print_requests.py //unity-catalog | ||
| read_state.py secrets secret1 catalog_name schema_name name comment | ||
|
|
||
| rm -f out.requests.txt |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| Local = true | ||
| Cloud = true | ||
| RecordRequests = true | ||
|
|
||
| Ignore = [".databricks"] | ||
|
|
||
| [EnvMatrix] | ||
| DATABRICKS_BUNDLE_ENGINE = ["direct"] |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,15 @@ | ||
| bundle: | ||
| name: test-bundle | ||
|
|
||
| variables: | ||
| secret_value: | ||
| description: "Test secret value" | ||
| default: "test-value" | ||
|
|
||
| resources: | ||
| secrets: | ||
| secret1: | ||
| catalog_name: main | ||
| schema_name: default | ||
| name: test_secret | ||
| value: ${var.secret_value} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
|
|
||
| === Deploy should fail in terraform mode | ||
| >>> [CLI] bundle deploy | ||
| Error: Secret resources are only supported with direct deployment mode | ||
| in databricks.yml:11:5 | ||
|
|
||
| Secret resources require direct deployment mode. Please set the DATABRICKS_BUNDLE_ENGINE environment variable to 'direct' or set 'bundle.engine: direct' in your databricks.yml to use secret resources. | ||
| Learn more at https://docs.databricks.com/dev-tools/bundles/direct | ||
|
|
||
|
|
||
| Exit code: 1 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| title "Deploy should fail in terraform mode" | ||
| trace $CLI bundle deploy 2>&1 | contains.py \ | ||
| "Secret resources are only supported with direct deployment mode" \ | ||
| "DATABRICKS_BUNDLE_ENGINE" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| Local = true | ||
| Cloud = false | ||
| RecordRequests = false | ||
|
|
||
| Ignore = [".databricks"] | ||
|
|
||
| [EnvMatrix] | ||
| DATABRICKS_BUNDLE_ENGINE = ["terraform"] |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| bundle: | ||
| name: test-bundle | ||
|
|
||
| variables: | ||
| secret_value: | ||
| description: "Test secret value" | ||
| default: "initial-secret-value" | ||
|
|
||
| resources: | ||
| secrets: | ||
| secret1: | ||
| catalog_name: main | ||
| schema_name: default | ||
| name: test_secret | ||
| value: ${var.secret_value} | ||
| comment: "Test secret" |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,68 @@ | ||
|
|
||
| >>> [CLI] bundle deploy | ||
| Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files... | ||
| Deploying resources... | ||
| Updating deployment state... | ||
| Deployment complete! | ||
|
|
||
| >>> print_requests.py //unity-catalog | ||
| { | ||
| "method": "POST", | ||
| "path": "/api/2.1/unity-catalog/secrets", | ||
| "body": { | ||
| "catalog_name": "main", | ||
| "comment": "Test secret", | ||
| "name": "test_secret", | ||
| "schema_name": "default", | ||
| "value": "initial-secret-value" | ||
| } | ||
| } | ||
| secrets secret1 catalog_name='main' schema_name='default' name='test_secret' comment='Test secret' value='initial-secret-value' | ||
|
|
||
| === Update secret value by changing variable default | ||
| >>> update_file.py databricks.yml initial-secret-value updated-secret-value | ||
|
|
||
| >>> [CLI] bundle deploy | ||
| Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files... | ||
| Deploying resources... | ||
| Updating deployment state... | ||
| Deployment complete! | ||
|
|
||
| >>> print_requests.py //unity-catalog | ||
| { | ||
| "method": "PATCH", | ||
| "path": "/api/2.1/unity-catalog/secrets/main.default.test_secret", | ||
| "q": { | ||
| "update_mask": "*" | ||
| }, | ||
| "body": { | ||
| "catalog_name": "main", | ||
| "comment": "Test secret", | ||
| "name": "test_secret", | ||
| "schema_name": "default", | ||
| "value": "updated-secret-value" | ||
| } | ||
| } | ||
| secrets secret1 catalog_name='main' schema_name='default' name='test_secret' comment='Test secret' value='updated-secret-value' | ||
|
|
||
| === Verify state does not contain actual secret value | ||
| >>> print_state.py | ||
| { | ||
| "state_version": 2, | ||
| "cli_version": "[CLI_VERSION]", | ||
| "lineage": "[UUID]", | ||
| "serial": 2, | ||
| "state": { | ||
| "resources.secrets.secret1": { | ||
| "__id__": "main.default.test_secret", | ||
| "state": { | ||
| "catalog_name": "main", | ||
| "comment": "Test secret", | ||
| "name": "test_secret", | ||
| "schema_name": "default", | ||
| "value": "updated-secret-value" | ||
| contains error: 'updated-secret-value' was not expected: '"value": "updated-secret-value"' | ||
| } | ||
| } | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,15 @@ | ||
| trace $CLI bundle deploy | ||
|
|
||
| trace print_requests.py //unity-catalog | ||
| read_state.py secrets secret1 catalog_name schema_name name comment value | ||
|
|
||
| title "Update secret value by changing variable default" | ||
| trace update_file.py databricks.yml "initial-secret-value" "updated-secret-value" | ||
| trace $CLI bundle deploy | ||
| trace print_requests.py //unity-catalog | ||
| read_state.py secrets secret1 catalog_name schema_name name comment value | ||
|
|
||
| title "Verify state does not contain actual secret value" | ||
| { trace print_state.py | contains.py "!initial-secret-value" "!updated-secret-value"; } || true | ||
|
|
||
| rm -f out.requests.txt |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we disallow this pattern? Error if we detect this? Secrets should not be stored in plain text in YAML.