Skip to content

Commit 47079b9

Browse files
authored
Support terraform references in direct engine (#5392)
## Changes - New package bundle/terraform_dabs_map that contains generator for a mapping between terraform and DABs schema as well as utilities to map from terraform and DABs resource references. - In direct engine, we now use this mapper to support terraform references. We also explicitly error when a reference is using terraform-only field that has no equivalent. - In terraform, we also use this mapper to warn about references that are not going to work on direct engine. When we encounter such reference, we also set a flag in telemetry. - The package also contains a function that maps DABs references to Terraform, that is not used currently but will be needed for new state migration implementation. ## Why Enables seamless and unattended migration to direct engine. ## Tests New acceptance and unit tests.,
1 parent 30db14f commit 47079b9

54 files changed

Lines changed: 2612 additions & 86 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Taskfile.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ tasks:
5353
# committed). Run `./task generate` explicitly when codegen inputs change.
5454
- task: generate-refschema
5555
- task: generate-schema
56+
- task: generate-schema-map
5657
- task: generate-schema-docs
5758
- task: generate-validation
5859
- task: generate-docs
@@ -854,6 +855,19 @@ tasks:
854855
cmds:
855856
- "sh -c 'go run ./bundle/internal/validation/. && gofmt -w -s ./bundle/internal/validation/generated'"
856857

858+
generate-schema-map:
859+
desc: Regenerate bundle/terraform_dabs_map/generated.go
860+
sources:
861+
- "**/*.go"
862+
- exclude: bundle/terraform_dabs_map/generated.go
863+
- go.mod
864+
- go.sum
865+
- "{{.EMBED_SOURCES}}"
866+
generates:
867+
- bundle/terraform_dabs_map/generated.go
868+
cmds:
869+
- go test ./bundle/terraform_dabs_map -run TestGenerateSchemaMap -update -v
870+
857871
generate-direct:
858872
desc: Generate direct engine config (apitypes + resources)
859873
deps: ['generate-direct-apitypes', 'generate-direct-resources']

acceptance/bin/print_requests.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ def main():
166166
requests_file = Path(args.fname)
167167

168168
if not requests_file.exists():
169-
sys.exit(f"File {requests_file} not found")
169+
sys.exit(f"File {requests_file.as_posix()} not found")
170170

171171
with open(requests_file) as fobj:
172172
data = fobj.read()
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...
2-
Error: cannot plan resources.jobs.bar: cannot resolve "${resources.jobs.foo.url}": schema mismatch: url: field "url" not found in jobs.JobSettings; url: field "url" not found in dresources.JobRemote
3-
4-
Error: planning failed
1+
Error: "resources.jobs.foo.url": Terraform-only field; cross-resource references to Terraform-only fields are not supported by the direct engine
2+
in databricks.yml:11:12
53

64

75
Exit code: 1

acceptance/bundle/bundle_tag/url_ref/out.deploy.terraform.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
Warning: "resources.jobs.foo.url": Terraform-only field; this reference will not work with the direct engine
2+
in databricks.yml:11:12
3+
14
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...
25
Deploying resources...
36
Updating deployment state...
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
File [TEST_TMP_DIR]/out.requests.txt not found
2+
3+
Exit code: 1
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default
1+
Error: "resources.jobs.foo.url": Terraform-only field; cross-resource references to Terraform-only fields are not supported by the direct engine
2+
in databricks.yml:11:12
23

3-
Deleting files...
4-
Destroy complete!
4+
5+
Exit code: 1

acceptance/bundle/bundle_tag/url_ref/out.destroy.terraform.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
Warning: "resources.jobs.foo.url": Terraform-only field; this reference will not work with the direct engine
2+
in databricks.yml:11:12
3+
14
The following resources will be deleted:
25
delete resources.jobs.bar
36
delete resources.jobs.foo
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
Error: cannot plan resources.jobs.bar: cannot resolve "${resources.jobs.foo.url}": schema mismatch: url: field "url" not found in jobs.JobSettings; url: field "url" not found in dresources.JobRemote
2-
3-
Error: planning failed
1+
Error: "resources.jobs.foo.url": Terraform-only field; cross-resource references to Terraform-only fields are not supported by the direct engine
2+
in databricks.yml:11:12
43

54

65
Exit code: 1

acceptance/bundle/bundle_tag/url_ref/out.plan.terraform.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
Warning: "resources.jobs.foo.url": Terraform-only field; this reference will not work with the direct engine
2+
in databricks.yml:11:12
3+
14
create jobs.bar
25
create jobs.foo
36

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,5 @@
1-
Name: test-bundle
2-
Target: default
3-
Workspace:
4-
User: [USERNAME]
5-
Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default
6-
Resources:
7-
Jobs:
8-
bar:
9-
Name: Untitled
10-
URL: ${resources.jobs.foo.url}
11-
foo:
12-
Name: Untitled
13-
URL: my_job_url
1+
Error: "resources.jobs.foo.url": Terraform-only field; cross-resource references to Terraform-only fields are not supported by the direct engine
2+
in databricks.yml:11:12
3+
4+
5+
Exit code: 1

0 commit comments

Comments
 (0)