@intentius/chant-lexicon-terraform 0.102.0 → 0.104.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/dist/__fixtures__/terragrunt/affected-cases.d.ts +23 -0
  2. package/dist/__fixtures__/terragrunt/affected-cases.d.ts.map +1 -0
  3. package/dist/__fixtures__/terragrunt/record.d.ts +17 -0
  4. package/dist/__fixtures__/terragrunt/record.d.ts.map +1 -0
  5. package/dist/change-set.d.ts +67 -0
  6. package/dist/change-set.d.ts.map +1 -0
  7. package/dist/changed-roots.d.ts +30 -0
  8. package/dist/changed-roots.d.ts.map +1 -0
  9. package/dist/commands.d.ts +26 -0
  10. package/dist/commands.d.ts.map +1 -0
  11. package/dist/components/capability-plugin.d.ts +54 -0
  12. package/dist/components/capability-plugin.d.ts.map +1 -0
  13. package/dist/composites/terraform-pin-rollout-op.d.ts +44 -0
  14. package/dist/composites/terraform-pin-rollout-op.d.ts.map +1 -0
  15. package/dist/hcl/descend.d.ts +1 -1
  16. package/dist/hcl/descend.d.ts.map +1 -1
  17. package/dist/hcl/edges.d.ts +2 -2
  18. package/dist/hcl/edges.d.ts.map +1 -1
  19. package/dist/hcl/parse.d.ts +29 -1
  20. package/dist/hcl/parse.d.ts.map +1 -1
  21. package/dist/hcl/roots.d.ts +1 -1
  22. package/dist/hcl/roots.d.ts.map +1 -1
  23. package/dist/hcl/suppressions.d.ts.map +1 -1
  24. package/dist/index.d.ts +4 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/integrity.json +13 -4
  27. package/dist/lint/audit-catalog.d.ts.map +1 -1
  28. package/dist/lint/post-synth/index.d.ts.map +1 -1
  29. package/dist/lint/post-synth/module-source.d.ts +27 -1
  30. package/dist/lint/post-synth/module-source.d.ts.map +1 -1
  31. package/dist/lint/post-synth/terragrunt.d.ts +37 -0
  32. package/dist/lint/post-synth/terragrunt.d.ts.map +1 -0
  33. package/dist/lint/post-synth/tf002.d.ts +3 -1
  34. package/dist/lint/post-synth/tf002.d.ts.map +1 -1
  35. package/dist/lint/post-synth/tf038.d.ts +22 -0
  36. package/dist/lint/post-synth/tf038.d.ts.map +1 -0
  37. package/dist/lint/post-synth/tf039.d.ts +23 -0
  38. package/dist/lint/post-synth/tf039.d.ts.map +1 -0
  39. package/dist/lint/post-synth/tf040.d.ts +30 -0
  40. package/dist/lint/post-synth/tf040.d.ts.map +1 -0
  41. package/dist/lint/post-synth/tf041.d.ts +20 -0
  42. package/dist/lint/post-synth/tf041.d.ts.map +1 -0
  43. package/dist/lint/post-synth/tf042.d.ts +18 -0
  44. package/dist/lint/post-synth/tf042.d.ts.map +1 -0
  45. package/dist/lint/post-synth/tf043.d.ts +17 -0
  46. package/dist/lint/post-synth/tf043.d.ts.map +1 -0
  47. package/dist/lint/post-synth/tf044.d.ts +17 -0
  48. package/dist/lint/post-synth/tf044.d.ts.map +1 -0
  49. package/dist/lint/post-synth/tf045.d.ts +22 -0
  50. package/dist/lint/post-synth/tf045.d.ts.map +1 -0
  51. package/dist/manifest.json +1 -1
  52. package/dist/okf/index.md +8 -0
  53. package/dist/okf/rules/TF038.md +11 -0
  54. package/dist/okf/rules/TF039.md +11 -0
  55. package/dist/okf/rules/TF040.md +11 -0
  56. package/dist/okf/rules/TF041.md +11 -0
  57. package/dist/okf/rules/TF042.md +11 -0
  58. package/dist/okf/rules/TF043.md +11 -0
  59. package/dist/okf/rules/TF044.md +11 -0
  60. package/dist/okf/rules/TF045.md +11 -0
  61. package/dist/op/activities/index.d.ts +4 -0
  62. package/dist/op/activities/index.d.ts.map +1 -1
  63. package/dist/op/activities/pin-rollout.d.ts +46 -0
  64. package/dist/op/activities/pin-rollout.d.ts.map +1 -0
  65. package/dist/op/activities/terraform.d.ts +24 -50
  66. package/dist/op/activities/terraform.d.ts.map +1 -1
  67. package/dist/op/activity-contracts.d.ts +48 -0
  68. package/dist/op/activity-contracts.d.ts.map +1 -1
  69. package/dist/op/builders.d.ts +9 -0
  70. package/dist/op/builders.d.ts.map +1 -1
  71. package/dist/pin/edit-ts.d.ts +21 -0
  72. package/dist/pin/edit-ts.d.ts.map +1 -0
  73. package/dist/pin/edit.d.ts +52 -0
  74. package/dist/pin/edit.d.ts.map +1 -0
  75. package/dist/pin/forge.d.ts +39 -0
  76. package/dist/pin/forge.d.ts.map +1 -0
  77. package/dist/pin/index.d.ts +22 -0
  78. package/dist/pin/index.d.ts.map +1 -0
  79. package/dist/pin/rollout.d.ts +116 -0
  80. package/dist/pin/rollout.d.ts.map +1 -0
  81. package/dist/pin/scan.d.ts +54 -0
  82. package/dist/pin/scan.d.ts.map +1 -0
  83. package/dist/pin/source.d.ts +93 -0
  84. package/dist/pin/source.d.ts.map +1 -0
  85. package/dist/pin/waves.d.ts +66 -0
  86. package/dist/pin/waves.d.ts.map +1 -0
  87. package/dist/plan-digest.d.ts +59 -0
  88. package/dist/plan-digest.d.ts.map +1 -0
  89. package/dist/plugin.d.ts.map +1 -1
  90. package/dist/rules/module-source.ts +56 -1
  91. package/dist/rules/terragrunt.ts +76 -0
  92. package/dist/rules/tf002.ts +1 -1
  93. package/dist/rules/tf038.ts +71 -0
  94. package/dist/rules/tf039.ts +64 -0
  95. package/dist/rules/tf040.ts +76 -0
  96. package/dist/rules/tf041.ts +56 -0
  97. package/dist/rules/tf042.ts +42 -0
  98. package/dist/rules/tf043.ts +49 -0
  99. package/dist/rules/tf044.ts +51 -0
  100. package/dist/rules/tf045.ts +47 -0
  101. package/dist/terragrunt/affected.d.ts +119 -0
  102. package/dist/terragrunt/affected.d.ts.map +1 -0
  103. package/dist/terragrunt/index.d.ts +11 -0
  104. package/dist/terragrunt/index.d.ts.map +1 -0
  105. package/dist/terragrunt/mocks.d.ts +147 -0
  106. package/dist/terragrunt/mocks.d.ts.map +1 -0
  107. package/dist/terragrunt/run.d.ts +130 -0
  108. package/dist/terragrunt/run.d.ts.map +1 -0
  109. package/dist/terragrunt/units.d.ts +103 -0
  110. package/dist/terragrunt/units.d.ts.map +1 -0
  111. package/dist/terragrunt/wave.d.ts +89 -0
  112. package/dist/terragrunt/wave.d.ts.map +1 -0
  113. package/package.json +12 -2
  114. package/src/__fixtures__/change-set/choudoufu-set-plan.change-set.golden.json +95 -0
  115. package/src/__fixtures__/change-set/choudoufu-set-plan.json +76 -0
  116. package/src/__fixtures__/change-set/choudoufu.part.golden.json +173 -0
  117. package/src/__fixtures__/change-set/choudoufu.plan.json +610 -0
  118. package/src/__fixtures__/change-set/terraform.import-forget.plan.json +81 -0
  119. package/src/__fixtures__/change-set/terraform.part.golden.json +173 -0
  120. package/src/__fixtures__/change-set/terraform.plan.json +589 -0
  121. package/src/__fixtures__/change-set/tofu.part.golden.json +173 -0
  122. package/src/__fixtures__/change-set/tofu.plan.json +588 -0
  123. package/src/__fixtures__/change-set/v1.tf.txt +21 -0
  124. package/src/__fixtures__/change-set/v2-module-app.tf.txt +4 -0
  125. package/src/__fixtures__/change-set/v2.tf.txt +21 -0
  126. package/src/__fixtures__/pin/choudoufu-live-waves-n5.json +83 -0
  127. package/src/__fixtures__/pin/largeset-oci-n5/apply-order.txt +5 -0
  128. package/src/__fixtures__/pin/largeset-oci-n5/estates/e01/estate.chdf.hcl +6 -0
  129. package/src/__fixtures__/pin/largeset-oci-n5/estates/e01/main.tf +33 -0
  130. package/src/__fixtures__/pin/largeset-oci-n5/estates/e02/estate.chdf.hcl +6 -0
  131. package/src/__fixtures__/pin/largeset-oci-n5/estates/e02/main.tf +45 -0
  132. package/src/__fixtures__/pin/largeset-oci-n5/estates/e03/estate.chdf.hcl +6 -0
  133. package/src/__fixtures__/pin/largeset-oci-n5/estates/e03/main.tf +47 -0
  134. package/src/__fixtures__/pin/largeset-oci-n5/estates/e04/estate.chdf.hcl +6 -0
  135. package/src/__fixtures__/pin/largeset-oci-n5/estates/e04/main.tf +31 -0
  136. package/src/__fixtures__/pin/largeset-oci-n5/estates/e05/estate.chdf.hcl +6 -0
  137. package/src/__fixtures__/pin/largeset-oci-n5/estates/e05/main.tf +27 -0
  138. package/src/__fixtures__/pin/largeset-oci-n5/fixture.json +77 -0
  139. package/src/__fixtures__/plan-summary/largeset-n5-bump.json +2071 -0
  140. package/src/__fixtures__/plan-summary/largeset-n5.summary.golden.json +95 -0
  141. package/src/__fixtures__/plan-summary/largeset-n5.summary.golden.md +22 -0
  142. package/src/__fixtures__/plan-summary/largeset-n5.summary.golden.txt +12 -0
  143. package/src/__fixtures__/terragrunt/affected/catalog/units/web/terragrunt.hcl +3 -0
  144. package/src/__fixtures__/terragrunt/affected/gitignore +3 -0
  145. package/src/__fixtures__/terragrunt/affected/live/dev/app/terragrunt.hcl +3 -0
  146. package/src/__fixtures__/terragrunt/affected/live/dev/vpc/terragrunt.hcl +3 -0
  147. package/src/__fixtures__/terragrunt/affected/live/prod/app/terragrunt.hcl +3 -0
  148. package/src/__fixtures__/terragrunt/affected/live/stg/terragrunt.stack.hcl +5 -0
  149. package/src/__fixtures__/terragrunt/affected/modules/app/main.tf +6 -0
  150. package/src/__fixtures__/terragrunt/affected/modules/app/policy.json +1 -0
  151. package/src/__fixtures__/terragrunt/affected/modules/net/main.tf +2 -0
  152. package/src/__fixtures__/terragrunt/affected/modules/thing/main.tf +3 -0
  153. package/src/__fixtures__/terragrunt/affected/root.hcl +5 -0
  154. package/src/__fixtures__/terragrunt/affected-cases.ts +126 -0
  155. package/src/__fixtures__/terragrunt/five-units/catalog/units/thing/terragrunt.hcl +3 -0
  156. package/src/__fixtures__/terragrunt/five-units/live/dev/app/terragrunt.hcl +13 -0
  157. package/src/__fixtures__/terragrunt/five-units/live/dev/db/terragrunt.hcl +8 -0
  158. package/src/__fixtures__/terragrunt/five-units/live/dev/vpc/terragrunt.hcl +3 -0
  159. package/src/__fixtures__/terragrunt/five-units/live/prod/app/terragrunt.hcl +8 -0
  160. package/src/__fixtures__/terragrunt/five-units/live/prod/vpc/terragrunt.hcl +3 -0
  161. package/src/__fixtures__/terragrunt/five-units/modules/thing/main.tf +7 -0
  162. package/src/__fixtures__/terragrunt/five-units/root.hcl +5 -0
  163. package/src/__fixtures__/terragrunt/record.ts +56 -0
  164. package/src/__fixtures__/terragrunt/recorded/affected-find.json +50 -0
  165. package/src/__fixtures__/terragrunt/recorded/failed-plan-report.json +36 -0
  166. package/src/__fixtures__/terragrunt/recorded/find.json +67 -0
  167. package/src/__fixtures__/terragrunt/recorded/version.txt +1 -0
  168. package/src/__fixtures__/terragrunt/recorded/wave-1/apply-report.json +22 -0
  169. package/src/__fixtures__/terragrunt/recorded/wave-1/json/live/dev/vpc/tfplan.json +1 -0
  170. package/src/__fixtures__/terragrunt/recorded/wave-1/json/live/prod/vpc/tfplan.json +1 -0
  171. package/src/__fixtures__/terragrunt/recorded/wave-1/plan-report.json +22 -0
  172. package/src/__fixtures__/terragrunt/recorded/wave-2/json/live/dev/db/tfplan.json +1 -0
  173. package/src/__fixtures__/terragrunt/recorded/wave-2/json/live/prod/app/tfplan.json +1 -0
  174. package/src/__fixtures__/terragrunt/recorded/wave-2/plan-report.json +22 -0
  175. package/src/change-set-combined-run.test.ts +156 -0
  176. package/src/change-set.test.ts +151 -0
  177. package/src/change-set.ts +273 -0
  178. package/src/changed-roots.test.ts +58 -0
  179. package/src/changed-roots.ts +102 -0
  180. package/src/commands.ts +112 -0
  181. package/src/components/capability-plugin.test.ts +91 -0
  182. package/src/components/capability-plugin.ts +131 -0
  183. package/src/components/pr-loop.tofu.test.ts +244 -0
  184. package/src/composites/terraform-pin-rollout-op.test.ts +69 -0
  185. package/src/composites/terraform-pin-rollout-op.ts +60 -0
  186. package/src/hcl/descend.ts +1 -1
  187. package/src/hcl/edges.ts +2 -2
  188. package/src/hcl/parse.test.ts +25 -0
  189. package/src/hcl/parse.ts +91 -6
  190. package/src/hcl/roots.ts +1 -1
  191. package/src/hcl/suppressions.ts +8 -2
  192. package/src/index.ts +18 -0
  193. package/src/lint/audit-catalog.ts +82 -0
  194. package/src/lint/audit.test.ts +3 -1
  195. package/src/lint/post-synth/fixtures/TF038/positive.tf +3 -0
  196. package/src/lint/post-synth/fixtures/TF039/positive.tf +4 -0
  197. package/src/lint/post-synth/fixtures/TF041/negative/terragrunt.hcl +12 -0
  198. package/src/lint/post-synth/fixtures/TF041/positive/terragrunt.hcl +7 -0
  199. package/src/lint/post-synth/fixtures/TF041/positive-apply/terragrunt.hcl +8 -0
  200. package/src/lint/post-synth/fixtures/TF042/negative/terragrunt.hcl +13 -0
  201. package/src/lint/post-synth/fixtures/TF042/positive/terragrunt.hcl +9 -0
  202. package/src/lint/post-synth/fixtures/TF043/negative/terragrunt.hcl +3 -0
  203. package/src/lint/post-synth/fixtures/TF043/negative-other/terragrunt.hcl +3 -0
  204. package/src/lint/post-synth/fixtures/TF043/positive-git/terragrunt.hcl +3 -0
  205. package/src/lint/post-synth/fixtures/TF043/positive-oci/terragrunt.hcl +3 -0
  206. package/src/lint/post-synth/fixtures/TF043/positive-tfr/terragrunt.hcl +3 -0
  207. package/src/lint/post-synth/fixtures/TF044/negative/terragrunt.hcl +9 -0
  208. package/src/lint/post-synth/fixtures/TF044/positive/terragrunt.hcl +7 -0
  209. package/src/lint/post-synth/fixtures/TF044/positive-generate/terragrunt.hcl +9 -0
  210. package/src/lint/post-synth/fixtures/TF045/negative/root.hcl +1 -0
  211. package/src/lint/post-synth/fixtures/TF045/negative/terragrunt.hcl +3 -0
  212. package/src/lint/post-synth/fixtures/TF045/positive/root.hcl +9 -0
  213. package/src/lint/post-synth/fixtures/TF045/positive/terragrunt.hcl +3 -0
  214. package/src/lint/post-synth/fixtures/TF045/unit-only/terragrunt.hcl +3 -0
  215. package/src/lint/post-synth/index.ts +16 -0
  216. package/src/lint/post-synth/module-source.test.ts +42 -1
  217. package/src/lint/post-synth/module-source.ts +56 -1
  218. package/src/lint/post-synth/terragrunt.ts +76 -0
  219. package/src/lint/post-synth/tf002.ts +1 -1
  220. package/src/lint/post-synth/tf038.test.ts +51 -0
  221. package/src/lint/post-synth/tf038.ts +71 -0
  222. package/src/lint/post-synth/tf039.test.ts +40 -0
  223. package/src/lint/post-synth/tf039.ts +64 -0
  224. package/src/lint/post-synth/tf040.test.ts +55 -0
  225. package/src/lint/post-synth/tf040.ts +76 -0
  226. package/src/lint/post-synth/tf041.test.ts +50 -0
  227. package/src/lint/post-synth/tf041.ts +56 -0
  228. package/src/lint/post-synth/tf042.test.ts +19 -0
  229. package/src/lint/post-synth/tf042.ts +42 -0
  230. package/src/lint/post-synth/tf043.test.ts +65 -0
  231. package/src/lint/post-synth/tf043.ts +49 -0
  232. package/src/lint/post-synth/tf044.test.ts +27 -0
  233. package/src/lint/post-synth/tf044.ts +51 -0
  234. package/src/lint/post-synth/tf045.test.ts +30 -0
  235. package/src/lint/post-synth/tf045.ts +47 -0
  236. package/src/op/activities/index.ts +4 -0
  237. package/src/op/activities/pin-rollout.ts +77 -0
  238. package/src/op/activities/terraform.test.ts +13 -0
  239. package/src/op/activities/terraform.ts +46 -86
  240. package/src/op/activity-contracts.test.ts +4 -1
  241. package/src/op/activity-contracts.ts +42 -0
  242. package/src/op/builders.ts +13 -0
  243. package/src/pin/bundle.test.ts +53 -0
  244. package/src/pin/edit-ts.test.ts +39 -0
  245. package/src/pin/edit-ts.ts +77 -0
  246. package/src/pin/edit.test.ts +199 -0
  247. package/src/pin/edit.ts +157 -0
  248. package/src/pin/forge.ts +85 -0
  249. package/src/pin/index.ts +22 -0
  250. package/src/pin/rollout.test.ts +232 -0
  251. package/src/pin/rollout.ts +451 -0
  252. package/src/pin/scan.ts +309 -0
  253. package/src/pin/source.ts +206 -0
  254. package/src/pin/waves.test.ts +101 -0
  255. package/src/pin/waves.ts +125 -0
  256. package/src/plan-digest.ts +99 -0
  257. package/src/plan-summary.test.ts +154 -0
  258. package/src/plugin.ts +25 -2
  259. package/src/terragrunt/affected.acceptance.test.ts +83 -0
  260. package/src/terragrunt/affected.test.ts +177 -0
  261. package/src/terragrunt/affected.ts +348 -0
  262. package/src/terragrunt/index.ts +11 -0
  263. package/src/terragrunt/mocks.acceptance.test.ts +105 -0
  264. package/src/terragrunt/mocks.test.ts +309 -0
  265. package/src/terragrunt/mocks.ts +324 -0
  266. package/src/terragrunt/run.ts +369 -0
  267. package/src/terragrunt/terragrunt.acceptance.test.ts +122 -0
  268. package/src/terragrunt/terragrunt.test.ts +332 -0
  269. package/src/terragrunt/units.ts +235 -0
  270. package/src/terragrunt/wave.ts +181 -0
@@ -0,0 +1,95 @@
1
+ {
2
+ "$schema": "https://intentius.io/chant/schemas/workspace/plan-summary/v1/plan-summary.schema.json",
3
+ "contract": 1,
4
+ "changeSet": "jcs1-sha256:d2b38ac960ee6b3f794d7449ce51589697b388564ae05a169549c665c10d9529",
5
+ "unit": "member",
6
+ "units": 5,
7
+ "groups": [
8
+ {
9
+ "id": "79cd3ea7ffaf",
10
+ "units": [
11
+ "estates/e01",
12
+ "estates/e02",
13
+ "estates/e03",
14
+ "estates/e05"
15
+ ],
16
+ "outlier": false,
17
+ "noChanges": false,
18
+ "changes": [
19
+ {
20
+ "line": "+ module.shared.aws_sqs_queue.events",
21
+ "action": "create",
22
+ "count": 1
23
+ },
24
+ {
25
+ "line": "~ module.shared.aws_iam_role.app: tags, tags_all",
26
+ "action": "update",
27
+ "count": 1
28
+ },
29
+ {
30
+ "line": "~ module.shared.aws_s3_bucket.data: replication_configuration, tags, tags_all",
31
+ "action": "update",
32
+ "count": 1
33
+ },
34
+ {
35
+ "line": "~ module.shared.aws_sqs_queue.work: tags, tags_all, visibility_timeout_seconds",
36
+ "action": "update",
37
+ "count": 1
38
+ }
39
+ ],
40
+ "destroys": [],
41
+ "sideEffects": []
42
+ },
43
+ {
44
+ "id": "36dca470b879",
45
+ "units": [
46
+ "estates/e04"
47
+ ],
48
+ "outlier": true,
49
+ "noChanges": false,
50
+ "changes": [
51
+ {
52
+ "line": "+ module.shared.aws_sqs_queue.events",
53
+ "action": "create",
54
+ "count": 1
55
+ },
56
+ {
57
+ "line": "~ module.shared.aws_iam_role.app: tags, tags_all",
58
+ "action": "update",
59
+ "count": 1
60
+ },
61
+ {
62
+ "line": "~ module.shared.aws_s3_bucket.data: replication_configuration, tags, tags_all",
63
+ "action": "update",
64
+ "count": 1
65
+ },
66
+ {
67
+ "line": "~ module.shared.aws_sqs_queue.extra: tags, tags_all",
68
+ "action": "update",
69
+ "count": 1
70
+ },
71
+ {
72
+ "line": "~ module.shared.aws_sqs_queue.work: tags, tags_all, visibility_timeout_seconds",
73
+ "action": "update",
74
+ "count": 1
75
+ }
76
+ ],
77
+ "extends": "79cd3ea7ffaf",
78
+ "plus": [
79
+ {
80
+ "line": "~ module.shared.aws_sqs_queue.extra: tags, tags_all",
81
+ "action": "update",
82
+ "count": 1
83
+ }
84
+ ],
85
+ "destroys": [],
86
+ "sideEffects": []
87
+ }
88
+ ],
89
+ "failed": [],
90
+ "destroys": [],
91
+ "imports": [],
92
+ "forgets": [],
93
+ "sideEffects": [],
94
+ "holes": []
95
+ }
@@ -0,0 +1,22 @@
1
+ ### Plan summary
2
+
3
+ 5 members: 2 groups, 0 destroys or replacements.
4
+
5
+ #### Group 79cd3ea7ffaf: 4 members, identical change
6
+
7
+ ```
8
+ + module.shared.aws_sqs_queue.events
9
+ ~ module.shared.aws_iam_role.app: tags, tags_all
10
+ ~ module.shared.aws_s3_bucket.data: replication_configuration, tags, tags_all
11
+ ~ module.shared.aws_sqs_queue.work: tags, tags_all, visibility_timeout_seconds
12
+ ```
13
+
14
+ Members: `estates/e01`, `estates/e02`, `estates/e03`, `estates/e05`
15
+
16
+ #### Group 36dca470b879: 1 member (outlier), group 79cd3ea7ffaf's change plus
17
+
18
+ ```
19
+ ~ module.shared.aws_sqs_queue.extra: tags, tags_all
20
+ ```
21
+
22
+ Members: `estates/e04`
@@ -0,0 +1,12 @@
1
+ 5 members: 2 groups, 0 destroys or replacements.
2
+
3
+ Group 79cd3ea7ffaf: 4 members, identical change:
4
+ + module.shared.aws_sqs_queue.events
5
+ ~ module.shared.aws_iam_role.app: tags, tags_all
6
+ ~ module.shared.aws_s3_bucket.data: replication_configuration, tags, tags_all
7
+ ~ module.shared.aws_sqs_queue.work: tags, tags_all, visibility_timeout_seconds
8
+ members: estates/e01, estates/e02, estates/e03, estates/e05
9
+
10
+ Group 36dca470b879: 1 member (outlier), group 79cd3ea7ffaf's change plus:
11
+ ~ module.shared.aws_sqs_queue.extra: tags, tags_all
12
+ members: estates/e04
@@ -0,0 +1,3 @@
1
+ include "root" { path = find_in_parent_folders("root.hcl") }
2
+ terraform { source = "${get_repo_root()}/modules/thing" }
3
+ inputs = { name = values.name }
@@ -0,0 +1,3 @@
1
+ .terragrunt-stack
2
+ .terragrunt-cache
3
+ .state
@@ -0,0 +1,3 @@
1
+ include "root" { path = find_in_parent_folders("root.hcl") }
2
+ terraform { source = "../../../modules/app" }
3
+ inputs = { name = "live-dev-app" }
@@ -0,0 +1,3 @@
1
+ include "root" { path = find_in_parent_folders("root.hcl") }
2
+ terraform { source = "../../../modules/thing" }
3
+ inputs = { name = "live-dev-vpc" }
@@ -0,0 +1,3 @@
1
+ include "root" { path = find_in_parent_folders("root.hcl") }
2
+ terraform { source = "../../../modules/app" }
3
+ inputs = { name = "live-prod-app" }
@@ -0,0 +1,5 @@
1
+ unit "web" {
2
+ source = "../../catalog/units/web"
3
+ path = "web"
4
+ values = { name = "stg-web" }
5
+ }
@@ -0,0 +1,6 @@
1
+ variable "name" { type = string }
2
+ module "net" {
3
+ source = "../net"
4
+ name = var.name
5
+ }
6
+ resource "terraform_data" "this" { input = { name = var.name, policy = file("${path.module}/policy.json") } }
@@ -0,0 +1 @@
1
+ {"allow": ["read"]}
@@ -0,0 +1,2 @@
1
+ variable "name" { type = string }
2
+ resource "terraform_data" "net" { input = "${var.name}-net" }
@@ -0,0 +1,3 @@
1
+ variable "name" { type = string }
2
+ resource "terraform_data" "this" { input = var.name }
3
+ output "id" { value = "${var.name}-id" }
@@ -0,0 +1,5 @@
1
+ remote_state {
2
+ backend = "local"
3
+ generate = { path = "backend.tf", if_exists = "overwrite" }
4
+ config = { path = "${get_parent_terragrunt_dir()}/.state/${path_relative_to_include()}/terraform.tfstate" }
5
+ }
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Changes to the `affected/` fixture and what each selects (#3415). Shared by
3
+ * `terragrunt/affected.test.ts`, which feeds the recorded `terragrunt` column
4
+ * to the selection, and `terragrunt/affected.acceptance.test.ts`, which makes
5
+ * each change as a commit and checks the column against a real Terragrunt.
6
+ *
7
+ * `terragrunt` is what Terragrunt's own `[base...HEAD]` filter selected
8
+ * (observed on 1.1.6 and 1.2.0-rc1). The supplement cases select nothing
9
+ * there: that column is the red half of each supplement.
10
+ */
11
+
12
+ import { appendFileSync, readFileSync, rmSync, writeFileSync } from "node:fs";
13
+ import { join } from "node:path";
14
+ import type { TerragruntAffectedUnit } from "../../terragrunt/affected";
15
+
16
+ export interface AffectedCase {
17
+ name: string;
18
+ /** Make the change in a copy of the fixture. */
19
+ change: (dir: string) => void;
20
+ /** What `git diff --name-only` lists for the change. */
21
+ changed: string[];
22
+ /** What Terragrunt's own git filter selects, catalog excluded. */
23
+ terragrunt: string[];
24
+ expected: TerragruntAffectedUnit[];
25
+ }
26
+
27
+ const touch = (file: string) => (dir: string) => appendFileSync(join(dir, file), "\n# changed\n");
28
+
29
+ export const AFFECTED_CASES: AffectedCase[] = [
30
+ {
31
+ name: "a unit's own terragrunt.hcl",
32
+ change: touch("live/dev/vpc/terragrunt.hcl"),
33
+ changed: ["live/dev/vpc/terragrunt.hcl"],
34
+ terragrunt: ["live/dev/vpc"],
35
+ expected: [{ path: "live/dev/vpc", reasons: [{ kind: "terragrunt", files: ["live/dev/vpc/terragrunt.hcl"] }] }],
36
+ },
37
+ {
38
+ name: "a .tf file of the units' module",
39
+ change: touch("modules/app/main.tf"),
40
+ changed: ["modules/app/main.tf"],
41
+ terragrunt: ["live/dev/app", "live/prod/app"],
42
+ expected: [
43
+ { path: "live/dev/app", reasons: [{ kind: "terragrunt", files: ["modules/app/main.tf"] }] },
44
+ { path: "live/prod/app", reasons: [{ kind: "terragrunt", files: ["modules/app/main.tf"] }] },
45
+ ],
46
+ },
47
+ {
48
+ name: "the root.hcl every unit includes",
49
+ change: touch("root.hcl"),
50
+ changed: ["root.hcl"],
51
+ terragrunt: ["live/dev/app", "live/dev/vpc", "live/prod/app", "live/stg/.terragrunt-stack/web"],
52
+ expected: ["live/dev/app", "live/dev/vpc", "live/prod/app", "live/stg/.terragrunt-stack/web"].map((path) => ({
53
+ path,
54
+ reasons: [{ kind: "terragrunt" as const, files: ["root.hcl"] }],
55
+ })),
56
+ },
57
+ {
58
+ name: "supplement 1: a file the module reads with file()",
59
+ change: (dir) => writeFileSync(join(dir, "modules/app/policy.json"), '{"allow": ["read", "write"]}\n'),
60
+ changed: ["modules/app/policy.json"],
61
+ terragrunt: [],
62
+ expected: [
63
+ { path: "live/dev/app", reasons: [{ kind: "module-file", files: ["modules/app/policy.json"], via: "modules/app" }] },
64
+ { path: "live/prod/app", reasons: [{ kind: "module-file", files: ["modules/app/policy.json"], via: "modules/app" }] },
65
+ ],
66
+ },
67
+ {
68
+ name: "supplement 2: a module the units' module calls",
69
+ change: touch("modules/net/main.tf"),
70
+ changed: ["modules/net/main.tf"],
71
+ terragrunt: [],
72
+ expected: [
73
+ { path: "live/dev/app", reasons: [{ kind: "module-call", files: ["modules/net/main.tf"], via: "modules/net" }] },
74
+ { path: "live/prod/app", reasons: [{ kind: "module-call", files: ["modules/net/main.tf"], via: "modules/net" }] },
75
+ ],
76
+ },
77
+ {
78
+ name: "supplement 3: the stack's local unit template",
79
+ change: touch("catalog/units/web/terragrunt.hcl"),
80
+ changed: ["catalog/units/web/terragrunt.hcl"],
81
+ terragrunt: [],
82
+ expected: [
83
+ {
84
+ path: "live/stg/.terragrunt-stack/web",
85
+ reasons: [{ kind: "stack-template", files: ["catalog/units/web/terragrunt.hcl"], via: "catalog/units/web" }],
86
+ },
87
+ ],
88
+ },
89
+ {
90
+ // A comment-only edit generates the same unit, and Terragrunt then selects nothing.
91
+ name: "a value in the stack file",
92
+ change: (dir) => {
93
+ const f = join(dir, "live/stg/terragrunt.stack.hcl");
94
+ writeFileSync(f, readFileSync(f, "utf8").replace('"stg-web"', '"stg-web-2"'));
95
+ },
96
+ changed: ["live/stg/terragrunt.stack.hcl"],
97
+ terragrunt: ["live/stg/.terragrunt-stack/web"],
98
+ expected: [{ path: "live/stg/.terragrunt-stack/web", reasons: [{ kind: "terragrunt", files: ["live/stg/terragrunt.stack.hcl"] }] }],
99
+ },
100
+ {
101
+ name: "a removed unit",
102
+ change: (dir) => rmSync(join(dir, "live/prod/app"), { recursive: true }),
103
+ changed: ["live/prod/app/terragrunt.hcl"],
104
+ terragrunt: ["live/prod/app"],
105
+ expected: [{ path: "live/prod/app", reasons: [{ kind: "removed", files: ["live/prod/app/terragrunt.hcl"] }] }],
106
+ },
107
+ {
108
+ name: "a unit's own file and its module's data file together",
109
+ change: (dir) => {
110
+ touch("live/dev/app/terragrunt.hcl")(dir);
111
+ writeFileSync(join(dir, "modules/app/policy.json"), "{}\n");
112
+ },
113
+ changed: ["live/dev/app/terragrunt.hcl", "modules/app/policy.json"],
114
+ terragrunt: ["live/dev/app"],
115
+ expected: [
116
+ {
117
+ path: "live/dev/app",
118
+ reasons: [
119
+ { kind: "terragrunt", files: ["live/dev/app/terragrunt.hcl"] },
120
+ { kind: "module-file", files: ["modules/app/policy.json"], via: "modules/app" },
121
+ ],
122
+ },
123
+ { path: "live/prod/app", reasons: [{ kind: "module-file", files: ["modules/app/policy.json"], via: "modules/app" }] },
124
+ ],
125
+ },
126
+ ];
@@ -0,0 +1,3 @@
1
+ include "root" { path = find_in_parent_folders("root.hcl") }
2
+ terraform { source = "../../../modules/thing" }
3
+ inputs = { name = values.name }
@@ -0,0 +1,13 @@
1
+ include "root" { path = find_in_parent_folders("root.hcl") }
2
+ terraform { source = "../../../modules/thing" }
3
+ dependency "live_dev_vpc" {
4
+ config_path = "../vpc"
5
+ mock_outputs = { id = "mock" }
6
+ mock_outputs_allowed_terraform_commands = ["validate", "plan"]
7
+ }
8
+ dependency "live_dev_db" {
9
+ config_path = "../db"
10
+ mock_outputs = { id = "mock" }
11
+ mock_outputs_allowed_terraform_commands = ["validate", "plan"]
12
+ }
13
+ inputs = { name = "live-dev-app", upstream = [ dependency.live_dev_vpc.outputs.id, dependency.live_dev_db.outputs.id,] }
@@ -0,0 +1,8 @@
1
+ include "root" { path = find_in_parent_folders("root.hcl") }
2
+ terraform { source = "../../../modules/thing" }
3
+ dependency "live_dev_vpc" {
4
+ config_path = "../vpc"
5
+ mock_outputs = { id = "mock" }
6
+ mock_outputs_allowed_terraform_commands = ["validate", "plan"]
7
+ }
8
+ inputs = { name = "live-dev-db", upstream = [ dependency.live_dev_vpc.outputs.id,] }
@@ -0,0 +1,3 @@
1
+ include "root" { path = find_in_parent_folders("root.hcl") }
2
+ terraform { source = "../../../modules/thing" }
3
+ inputs = { name = "live-dev-vpc", upstream = [] }
@@ -0,0 +1,8 @@
1
+ include "root" { path = find_in_parent_folders("root.hcl") }
2
+ terraform { source = "../../../modules/thing" }
3
+ dependency "live_prod_vpc" {
4
+ config_path = "../vpc"
5
+ mock_outputs = { id = "mock" }
6
+ mock_outputs_allowed_terraform_commands = ["validate", "plan"]
7
+ }
8
+ inputs = { name = "live-prod-app", upstream = [ dependency.live_prod_vpc.outputs.id,] }
@@ -0,0 +1,3 @@
1
+ include "root" { path = find_in_parent_folders("root.hcl") }
2
+ terraform { source = "../../../modules/thing" }
3
+ inputs = { name = "live-prod-vpc", upstream = [] }
@@ -0,0 +1,7 @@
1
+ variable "name" { type = string }
2
+ variable "upstream" {
3
+ type = list(string)
4
+ default = []
5
+ }
6
+ resource "terraform_data" "this" { input = { name = var.name, upstream = var.upstream } }
7
+ output "id" { value = "${var.name}-id" }
@@ -0,0 +1,5 @@
1
+ remote_state {
2
+ backend = "local"
3
+ generate = { path = "backend.tf", if_exists = "overwrite" }
4
+ config = { path = "${get_parent_terragrunt_dir()}/.state/${path_relative_to_include()}/terraform.tfstate" }
5
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Re-record `recorded/` from a real Terragrunt run over `five-units/`:
3
+ *
4
+ * PATH=<dir with terragrunt 1.1+ and tofu>:$PATH npx tsx lexicons/terraform/src/__fixtures__/terragrunt/record.ts
5
+ *
6
+ * It copies the fixture to a temporary directory, discovers the units, plans
7
+ * and applies wave 1, then plans wave 2, and writes what Terragrunt printed
8
+ * and wrote with the temporary directory's path taken out.
9
+ *
10
+ * `recorded/failed-plan-report.json` is not written here. It was recorded by
11
+ * hand with Terragrunt 1.1.6 and OpenTofu 1.12.5, planning `live/dev/db`,
12
+ * `live/dev/app` and `live/prod/app` in one run after giving `live/dev/db` a
13
+ * `before_hook` that runs `false` on plan: db fails, app exits early because
14
+ * db failed, and prod/app plans.
15
+ */
16
+
17
+ import { cpSync, mkdtempSync, readFileSync, rmSync, writeFileSync, mkdirSync } from "node:fs";
18
+ import { tmpdir } from "node:os";
19
+ import { dirname, join } from "node:path";
20
+ import { fileURLToPath } from "node:url";
21
+ import { defaultTerragruntExec, terragruntFindArgs, terragruntWaveArgs, terragruntWaves, parseTerragruntFind } from "../../terragrunt";
22
+
23
+ const here = dirname(fileURLToPath(import.meta.url));
24
+ const out = join(here, "recorded");
25
+ const tmp = mkdtempSync(join(tmpdir(), "chant-tg-record-"));
26
+ const dir = join(tmp, "repo");
27
+ cpSync(join(here, "five-units"), dir, { recursive: true });
28
+ const scrub = (s: string): string => s.split(tmp).join("<tmp>");
29
+ const save = (name: string, text: string): void => {
30
+ mkdirSync(dirname(join(out, name)), { recursive: true });
31
+ writeFileSync(join(out, name), scrub(text));
32
+ };
33
+
34
+ const version = await defaultTerragruntExec("terragrunt", ["--version"], { cwd: dir, env: {} });
35
+ save("version.txt", version.stdout);
36
+ const find = await defaultTerragruntExec("terragrunt", terragruntFindArgs(), { cwd: dir, env: {} });
37
+ if (find.code !== 0) throw new Error(find.stderr);
38
+ save("find.json", find.stdout);
39
+ const waves = terragruntWaves(parseTerragruntFind(find.stdout));
40
+ for (const [i, units] of waves.slice(0, 2).entries()) {
41
+ const n = i + 1;
42
+ const work = join(tmp, `wave-${n}`);
43
+ const plan = terragruntWaveArgs({ units, command: "plan", outDir: join(work, "plans"), jsonOutDir: join(work, "json"), reportFile: join(work, "plan-report.json") });
44
+ const p = await defaultTerragruntExec("terragrunt", plan, { cwd: dir, env: {} });
45
+ if (p.code !== 0) throw new Error(p.stderr);
46
+ save(`wave-${n}/plan-report.json`, readFileSync(join(work, "plan-report.json"), "utf8"));
47
+ for (const u of units) save(`wave-${n}/json/${u}/tfplan.json`, readFileSync(join(work, "json", u, "tfplan.json"), "utf8"));
48
+ if (n === 1) {
49
+ const apply = terragruntWaveArgs({ units, command: "apply", outDir: join(work, "plans"), reportFile: join(work, "apply-report.json") });
50
+ const a = await defaultTerragruntExec("terragrunt", apply, { cwd: dir, env: {} });
51
+ if (a.code !== 0) throw new Error(a.stderr);
52
+ save(`wave-${n}/apply-report.json`, readFileSync(join(work, "apply-report.json"), "utf8"));
53
+ }
54
+ }
55
+ rmSync(tmp, { recursive: true, force: true });
56
+ console.log(`recorded ${out}`);
@@ -0,0 +1,50 @@
1
+ [
2
+ {
3
+ "type": "unit",
4
+ "path": "live/dev/app",
5
+ "include": {
6
+ "root": "root.hcl"
7
+ },
8
+ "reading": [
9
+ "modules/app/main.tf",
10
+ "root.hcl"
11
+ ]
12
+ },
13
+ {
14
+ "type": "unit",
15
+ "path": "live/dev/vpc",
16
+ "include": {
17
+ "root": "root.hcl"
18
+ },
19
+ "reading": [
20
+ "modules/thing/main.tf",
21
+ "root.hcl"
22
+ ]
23
+ },
24
+ {
25
+ "type": "unit",
26
+ "path": "live/prod/app",
27
+ "include": {
28
+ "root": "root.hcl"
29
+ },
30
+ "reading": [
31
+ "modules/app/main.tf",
32
+ "root.hcl"
33
+ ]
34
+ },
35
+ {
36
+ "type": "stack",
37
+ "path": "live/stg"
38
+ },
39
+ {
40
+ "type": "unit",
41
+ "path": "live/stg/.terragrunt-stack/web",
42
+ "include": {
43
+ "root": "root.hcl"
44
+ },
45
+ "reading": [
46
+ "modules/thing/main.tf",
47
+ "root.hcl"
48
+ ]
49
+ }
50
+ ]
@@ -0,0 +1,36 @@
1
+ [
2
+ {
3
+ "Started": "2026-10-03T21:49:02.34817-06:00",
4
+ "Ended": "2026-10-03T21:49:02.502195-06:00",
5
+ "Reason": "run error",
6
+ "Cause": "error occurred:\n\n* Failed to execute \"false\" in ./live/dev/db/.terragrunt-cache/LAwNEq4aOTzWWv43O_15pH6E0Tk/zc-bcd5wSzLXJhJ1nHeK3mim74w\n \n exit status 1\n",
7
+ "Name": "live/dev/db",
8
+ "Result": "failed",
9
+ "Cmd": "plan",
10
+ "Args": [
11
+ "-detailed-exitcode"
12
+ ]
13
+ },
14
+ {
15
+ "Started": "2026-10-03T21:49:02.349044-06:00",
16
+ "Ended": "2026-10-03T21:49:02.439947-06:00",
17
+ "Name": "live/prod/app",
18
+ "Result": "succeeded",
19
+ "Cmd": "plan",
20
+ "Args": [
21
+ "-detailed-exitcode"
22
+ ]
23
+ },
24
+ {
25
+ "Started": "2026-10-03T21:49:02.502206-06:00",
26
+ "Ended": "2026-10-03T21:49:02.502207-06:00",
27
+ "Reason": "ancestor error",
28
+ "Cause": "db",
29
+ "Name": "live/dev/app",
30
+ "Result": "early exit",
31
+ "Cmd": "plan",
32
+ "Args": [
33
+ "-detailed-exitcode"
34
+ ]
35
+ }
36
+ ]
@@ -0,0 +1,67 @@
1
+ [
2
+ {
3
+ "type": "unit",
4
+ "path": "live/dev/vpc",
5
+ "include": {
6
+ "root": "root.hcl"
7
+ },
8
+ "reading": [
9
+ "modules/thing/main.tf",
10
+ "root.hcl"
11
+ ]
12
+ },
13
+ {
14
+ "type": "unit",
15
+ "path": "live/prod/vpc",
16
+ "include": {
17
+ "root": "root.hcl"
18
+ },
19
+ "reading": [
20
+ "modules/thing/main.tf",
21
+ "root.hcl"
22
+ ]
23
+ },
24
+ {
25
+ "type": "unit",
26
+ "path": "live/dev/db",
27
+ "include": {
28
+ "root": "root.hcl"
29
+ },
30
+ "dependencies": [
31
+ "live/dev/vpc"
32
+ ],
33
+ "reading": [
34
+ "modules/thing/main.tf",
35
+ "root.hcl"
36
+ ]
37
+ },
38
+ {
39
+ "type": "unit",
40
+ "path": "live/prod/app",
41
+ "include": {
42
+ "root": "root.hcl"
43
+ },
44
+ "dependencies": [
45
+ "live/prod/vpc"
46
+ ],
47
+ "reading": [
48
+ "modules/thing/main.tf",
49
+ "root.hcl"
50
+ ]
51
+ },
52
+ {
53
+ "type": "unit",
54
+ "path": "live/dev/app",
55
+ "include": {
56
+ "root": "root.hcl"
57
+ },
58
+ "dependencies": [
59
+ "live/dev/db",
60
+ "live/dev/vpc"
61
+ ],
62
+ "reading": [
63
+ "modules/thing/main.tf",
64
+ "root.hcl"
65
+ ]
66
+ }
67
+ ]
@@ -0,0 +1 @@
1
+ terragrunt version v1.1.6
@@ -0,0 +1,22 @@
1
+ [
2
+ {
3
+ "Started": "2026-10-03T21:52:46.75567-06:00",
4
+ "Ended": "2026-10-03T21:52:46.8429-06:00",
5
+ "Name": "live/prod/vpc",
6
+ "Result": "succeeded",
7
+ "Cmd": "apply",
8
+ "Args": [
9
+ "-no-color"
10
+ ]
11
+ },
12
+ {
13
+ "Started": "2026-10-03T21:52:46.75727-06:00",
14
+ "Ended": "2026-10-03T21:52:46.843046-06:00",
15
+ "Name": "live/dev/vpc",
16
+ "Result": "succeeded",
17
+ "Cmd": "apply",
18
+ "Args": [
19
+ "-no-color"
20
+ ]
21
+ }
22
+ ]
@@ -0,0 +1 @@
1
+ {"format_version":"1.2","terraform_version":"1.12.5","variables":{"name":{"value":"live-dev-vpc"},"upstream":{"value":[]}},"planned_values":{"outputs":{"id":{"sensitive":false,"type":"string","value":"live-dev-vpc-id"}},"root_module":{"resources":[{"address":"terraform_data.this","mode":"managed","type":"terraform_data","name":"this","provider_name":"terraform.io/builtin/terraform","schema_version":0,"values":{"input":{"name":"live-dev-vpc","upstream":[]},"triggers_replace":null},"sensitive_values":{"input":{"upstream":[]},"output":{}}}]}},"resource_changes":[{"address":"terraform_data.this","mode":"managed","type":"terraform_data","name":"this","provider_name":"terraform.io/builtin/terraform","change":{"actions":["create"],"before":null,"after":{"input":{"name":"live-dev-vpc","upstream":[]},"triggers_replace":null},"after_unknown":{"id":true,"input":{"upstream":[]},"output":true},"before_sensitive":false,"after_sensitive":{"input":{"upstream":[]},"output":{}}}}],"output_changes":{"id":{"actions":["create"],"before":null,"after":"live-dev-vpc-id","after_unknown":false,"before_sensitive":false,"after_sensitive":false}},"prior_state":{"format_version":"1.0","terraform_version":"1.12.5","values":{"outputs":{"id":{"sensitive":false,"value":"live-dev-vpc-id","type":"string"}},"root_module":{}}},"configuration":{"provider_config":{"terraform":{"name":"terraform","full_name":"terraform.io/builtin/terraform"}},"root_module":{"outputs":{"id":{"expression":{"references":["var.name"]}}},"resources":[{"address":"terraform_data.this","mode":"managed","type":"terraform_data","name":"this","provider_config_key":"terraform","expressions":{"input":{"references":["var.name","var.upstream"]}},"schema_version":0}],"variables":{"name":{"type":"string","required":true},"upstream":{"type":["list","string"],"default":[]}}}},"timestamp":"2026-10-04T03:52:46Z","errored":false}
@@ -0,0 +1 @@
1
+ {"format_version":"1.2","terraform_version":"1.12.5","variables":{"name":{"value":"live-prod-vpc"},"upstream":{"value":[]}},"planned_values":{"outputs":{"id":{"sensitive":false,"type":"string","value":"live-prod-vpc-id"}},"root_module":{"resources":[{"address":"terraform_data.this","mode":"managed","type":"terraform_data","name":"this","provider_name":"terraform.io/builtin/terraform","schema_version":0,"values":{"input":{"name":"live-prod-vpc","upstream":[]},"triggers_replace":null},"sensitive_values":{"input":{"upstream":[]},"output":{}}}]}},"resource_changes":[{"address":"terraform_data.this","mode":"managed","type":"terraform_data","name":"this","provider_name":"terraform.io/builtin/terraform","change":{"actions":["create"],"before":null,"after":{"input":{"name":"live-prod-vpc","upstream":[]},"triggers_replace":null},"after_unknown":{"id":true,"input":{"upstream":[]},"output":true},"before_sensitive":false,"after_sensitive":{"input":{"upstream":[]},"output":{}}}}],"output_changes":{"id":{"actions":["create"],"before":null,"after":"live-prod-vpc-id","after_unknown":false,"before_sensitive":false,"after_sensitive":false}},"prior_state":{"format_version":"1.0","terraform_version":"1.12.5","values":{"outputs":{"id":{"sensitive":false,"value":"live-prod-vpc-id","type":"string"}},"root_module":{}}},"configuration":{"provider_config":{"terraform":{"name":"terraform","full_name":"terraform.io/builtin/terraform"}},"root_module":{"outputs":{"id":{"expression":{"references":["var.name"]}}},"resources":[{"address":"terraform_data.this","mode":"managed","type":"terraform_data","name":"this","provider_config_key":"terraform","expressions":{"input":{"references":["var.name","var.upstream"]}},"schema_version":0}],"variables":{"name":{"type":"string","required":true},"upstream":{"type":["list","string"],"default":[]}}}},"timestamp":"2026-10-04T03:52:46Z","errored":false}