Skip to content

Commit f75a722

Browse files
authored
direct: modify state format to use shallow map (#3627)
## Changes - Update state format to match serialized plan with string keys and 1-level map: - Remove ResourceNode usage. - Simplify dagrun.Graph to always have string nodes instead of generic. - Error messages use resource keys directly now, e.g. "resources.jobs.foo". It's a bit longer than "jobs.foo" but more explicit. However, plan and approval messages formatting is not changed in this PR. ``` { "resources.jobs.foo": {...} } ``` ## Why - Supporting more complex naming schemes that do not fit ResourceNode Group+Key format, for example, "resources.jobs.foo.permissions". - Serialized plan and state now have similar structure.
1 parent 2821f5c commit f75a722

File tree

40 files changed

+328
-327
lines changed

40 files changed

+328
-327
lines changed

acceptance/bin/read_id.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@ def print_resource_direct(group, name):
3333
filename = ".databricks/bundle/default/resources.json"
3434
raw = open(filename).read()
3535
data = json.loads(raw)
36-
resources = data["resources"].get(group, {})
37-
result = resources.get(name)
36+
state_map = data["state"]
37+
result = state_map.get(f"resources.{group}.{name}")
38+
3839
if result is None:
3940
print(f"Resource {group=} {name=} not found. Available: {raw}")
4041
return

acceptance/bin/read_state.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,14 @@ def print_resource_direct(group, name, *attrs):
3737
filename = ".databricks/bundle/default/resources.json"
3838
raw = open(filename).read()
3939
data = json.loads(raw)
40-
resources = data["resources"].get(group, {})
41-
result = resources.get(name)
40+
state_map = data["state"]
41+
result = state_map.get(f"resources.{group}.{name}")
42+
4243
if result is None:
4344
print(f"State not found for {group}.{name}")
4445
return
45-
state = result["state"]
46+
47+
state = result.get("state", {})
4648
state.setdefault("id", result.get("__id__"))
4749
values = [f"{x}={state.get(x)!r}" for x in attrs]
4850
print(group, name, " ".join(values))

acceptance/bundle/bundle_tag/url_ref/out.deploy.direct-exp.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...
22
Error: cannot resolve "${resources.jobs.foo.url}": schema mismatch: url: field "url" not found in resources.Job; url: field "url" not found in jobs.Job
33

4-
Error: cannot plan jobs.bar: dependency failed: jobs.foo
4+
Error: cannot plan resources.jobs.bar: dependency failed: resources.jobs.foo
55

66
Error: planning failed
77

acceptance/bundle/bundle_tag/url_ref/out.plan.direct-exp.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Error: cannot resolve "${resources.jobs.foo.url}": schema mismatch: url: field "url" not found in resources.Job; url: field "url" not found in jobs.Job
22

3-
Error: cannot plan jobs.bar: dependency failed: jobs.foo
3+
Error: cannot plan resources.jobs.bar: dependency failed: resources.jobs.foo
44

55
Error: planning failed
66

acceptance/bundle/lifecycle/prevent-destroy/out.direct-exp.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
>>> musterr [CLI] bundle destroy --auto-approve
3-
Error: resource my_pipelines has lifecycle.prevent_destroy set, but the plan calls for this resource to be recreated or destroyed. To avoid this error, disable lifecycle.prevent_destroy for pipelines.my_pipelines
4-
resource my_schema has lifecycle.prevent_destroy set, but the plan calls for this resource to be recreated or destroyed. To avoid this error, disable lifecycle.prevent_destroy for schemas.my_schema
3+
Error: resources.pipelines.my_pipelines has lifecycle.prevent_destroy set, but the plan calls for this resource to be recreated or destroyed. To avoid this error, disable lifecycle.prevent_destroy for resources.pipelines.my_pipelines
4+
resources.schemas.my_schema has lifecycle.prevent_destroy set, but the plan calls for this resource to be recreated or destroyed. To avoid this error, disable lifecycle.prevent_destroy for resources.schemas.my_schema
55

66

77
Exit code (musterr): 1
@@ -11,7 +11,7 @@ recreate pipelines.my_pipelines
1111

1212
>>> musterr [CLI] bundle deploy
1313
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/prevent-destroy/default/files...
14-
Error: resource my_pipelines has lifecycle.prevent_destroy set, but the plan calls for this resource to be recreated or destroyed. To avoid this error, disable lifecycle.prevent_destroy for pipelines.my_pipelines
14+
Error: resources.pipelines.my_pipelines has lifecycle.prevent_destroy set, but the plan calls for this resource to be recreated or destroyed. To avoid this error, disable lifecycle.prevent_destroy for resources.pipelines.my_pipelines
1515

1616

1717
Exit code (musterr): 1
@@ -22,8 +22,8 @@ recreate schemas.my_schema
2222

2323
>>> musterr [CLI] bundle deploy
2424
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/prevent-destroy/default/files...
25-
Error: resource my_pipelines has lifecycle.prevent_destroy set, but the plan calls for this resource to be recreated or destroyed. To avoid this error, disable lifecycle.prevent_destroy for pipelines.my_pipelines
26-
resource my_schema has lifecycle.prevent_destroy set, but the plan calls for this resource to be recreated or destroyed. To avoid this error, disable lifecycle.prevent_destroy for schemas.my_schema
25+
Error: resources.pipelines.my_pipelines has lifecycle.prevent_destroy set, but the plan calls for this resource to be recreated or destroyed. To avoid this error, disable lifecycle.prevent_destroy for resources.pipelines.my_pipelines
26+
resources.schemas.my_schema has lifecycle.prevent_destroy set, but the plan calls for this resource to be recreated or destroyed. To avoid this error, disable lifecycle.prevent_destroy for resources.schemas.my_schema
2727

2828

2929
Exit code (musterr): 1

acceptance/bundle/resource_deps/create_error/out.deploy.direct-exp.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...
22
Deploying resources...
3-
Error: cannot create jobs.foo: INJECTED (500 UNKNOWN)
3+
Error: cannot create resources.jobs.foo: INJECTED (500 UNKNOWN)
44

55
Endpoint: POST [DATABRICKS_URL]/api/2.2/jobs/create
66
HTTP Status: 500 Internal Server Error
77
API error_code: UNKNOWN
88
API message: INJECTED
99

10-
Error: cannot create jobs.bar: dependency failed: jobs.foo
10+
Error: cannot create resources.jobs.bar: dependency failed: resources.jobs.foo
1111

12-
Error: cannot create jobs.baz: dependency failed: jobs.foo
12+
Error: cannot create resources.jobs.baz: dependency failed: resources.jobs.foo
1313

1414
Updating deployment state...
1515

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...
2-
Error: cycle detected: jobs.foo refers to jobs.bar via ${resources.jobs.bar.id} which refers to jobs.foo via ${resources.jobs.foo.id}
2+
Error: cycle detected: resources.jobs.foo refers to resources.jobs.bar via ${resources.jobs.bar.id} which refers to resources.jobs.foo via ${resources.jobs.foo.id}
33

44

55
Exit code (musterr): 1
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Error: cycle detected: jobs.foo refers to jobs.bar via ${resources.jobs.bar.id} which refers to jobs.foo via ${resources.jobs.foo.id}
1+
Error: cycle detected: resources.jobs.foo refers to resources.jobs.bar via ${resources.jobs.bar.id} which refers to resources.jobs.foo via ${resources.jobs.foo.id}
22

33

44
Exit code (musterr): 1
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...
2-
Error: cycle detected: jobs.foo refers to itself via ${resources.jobs.foo.id}
2+
Error: cycle detected: resources.jobs.foo refers to itself via ${resources.jobs.foo.id}
33

44

55
Exit code (musterr): 1
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Error: cycle detected: jobs.foo refers to itself via ${resources.jobs.foo.id}
1+
Error: cycle detected: resources.jobs.foo refers to itself via ${resources.jobs.foo.id}
22

33

44
Exit code (musterr): 1

0 commit comments

Comments
 (0)