@intentius/chant-lexicon-terraform 0.124.51 → 0.124.54
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.
- package/README.md +7 -6
- package/dist/__fixtures__/pr-loop/estate.component.d.ts +7 -0
- package/dist/__fixtures__/pr-loop/estate.component.d.ts.map +1 -0
- package/dist/__fixtures__/pr-loop/estate.component.js +7 -0
- package/dist/__fixtures__/report/generate.d.ts +26 -0
- package/dist/__fixtures__/report/generate.d.ts.map +1 -0
- package/dist/__fixtures__/report/generate.js +58 -0
- package/dist/applied-state.d.ts +27 -0
- package/dist/applied-state.d.ts.map +1 -0
- package/dist/applied-state.js +44 -0
- package/dist/backend-config.d.ts +53 -0
- package/dist/backend-config.d.ts.map +1 -0
- package/dist/backend-config.js +136 -0
- package/dist/behaviour/kinds.d.ts.map +1 -1
- package/dist/behaviour/kinds.js +4 -0
- package/dist/behaviour/predict.d.ts.map +1 -1
- package/dist/behaviour/predict.js +6 -2
- package/dist/behaviour/reference-catalog.d.ts +16 -5
- package/dist/behaviour/reference-catalog.d.ts.map +1 -1
- package/dist/behaviour/reference-catalog.js +16 -5
- package/dist/behaviour/request.d.ts.map +1 -1
- package/dist/behaviour/request.js +3 -2
- package/dist/changed-roots.d.ts +6 -4
- package/dist/changed-roots.d.ts.map +1 -1
- package/dist/changed-roots.js +14 -18
- package/dist/commands.d.ts +5 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +87 -4
- package/dist/components/capability-plugin.d.ts +65 -3
- package/dist/components/capability-plugin.d.ts.map +1 -1
- package/dist/components/capability-plugin.js +197 -13
- package/dist/components/compose-group.d.ts +145 -0
- package/dist/components/compose-group.d.ts.map +1 -0
- package/dist/components/compose-group.js +407 -0
- package/dist/components/placeholder-preview.d.ts +78 -0
- package/dist/components/placeholder-preview.d.ts.map +1 -0
- package/dist/components/placeholder-preview.js +254 -0
- package/dist/compose/apply-events.d.ts +46 -0
- package/dist/compose/apply-events.d.ts.map +1 -0
- package/dist/compose/apply-events.js +77 -0
- package/dist/compose/estate.d.ts +194 -0
- package/dist/compose/estate.d.ts.map +1 -0
- package/dist/compose/estate.js +363 -0
- package/dist/compose/hcl.d.ts +99 -0
- package/dist/compose/hcl.d.ts.map +1 -0
- package/dist/compose/hcl.js +302 -0
- package/dist/compose/module-address.d.ts +24 -0
- package/dist/compose/module-address.d.ts.map +1 -0
- package/dist/compose/module-address.js +43 -0
- package/dist/compose/root.d.ts +127 -0
- package/dist/compose/root.d.ts.map +1 -0
- package/dist/compose/root.js +586 -0
- package/dist/compose/run.d.ts +183 -0
- package/dist/compose/run.d.ts.map +1 -0
- package/dist/compose/run.js +447 -0
- package/dist/compose/slice.d.ts +102 -0
- package/dist/compose/slice.d.ts.map +1 -0
- package/dist/compose/slice.js +249 -0
- package/dist/compose/state-address.d.ts +28 -0
- package/dist/compose/state-address.d.ts.map +1 -0
- package/dist/compose/state-address.js +154 -0
- package/dist/compose/state-merge.d.ts +52 -0
- package/dist/compose/state-merge.d.ts.map +1 -0
- package/dist/compose/state-merge.js +135 -0
- package/dist/compose.d.ts +179 -0
- package/dist/compose.d.ts.map +1 -0
- package/dist/compose.js +482 -0
- package/dist/composites/terraform-apply-op.d.ts.map +1 -1
- package/dist/composites/terraform-apply-op.js +7 -3
- package/dist/config.d.ts +59 -13
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +43 -9
- package/dist/describe-resources.d.ts +74 -12
- package/dist/describe-resources.d.ts.map +1 -1
- package/dist/describe-resources.js +374 -66
- package/dist/drift-read.d.ts +33 -0
- package/dist/drift-read.d.ts.map +1 -0
- package/dist/drift-read.js +243 -0
- package/dist/drift-record.d.ts +147 -0
- package/dist/drift-record.d.ts.map +1 -0
- package/dist/drift-record.js +383 -0
- package/dist/hcl/edges.d.ts.map +1 -1
- package/dist/hcl/edges.js +24 -1
- package/dist/hcl/files.d.ts +61 -0
- package/dist/hcl/files.d.ts.map +1 -0
- package/dist/hcl/files.js +221 -0
- package/dist/hcl/instances.d.ts +82 -0
- package/dist/hcl/instances.d.ts.map +1 -0
- package/dist/hcl/instances.js +390 -0
- package/dist/hcl/parse.d.ts +81 -9
- package/dist/hcl/parse.d.ts.map +1 -1
- package/dist/hcl/parse.js +114 -16
- package/dist/hcl/roots.d.ts.map +1 -1
- package/dist/hcl/roots.js +5 -0
- package/dist/hcl/suppressions.d.ts.map +1 -1
- package/dist/hcl/suppressions.js +8 -2
- package/dist/index.d.ts +11 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -2
- package/dist/integrity.json +3 -3
- package/dist/live-plan-reasons.d.ts +21 -0
- package/dist/live-plan-reasons.d.ts.map +1 -0
- package/dist/live-plan-reasons.js +47 -0
- package/dist/lsp/option-keys.d.ts.map +1 -1
- package/dist/lsp/option-keys.js +2 -0
- package/dist/manifest.json +1 -1
- package/dist/op/activities/index.d.ts +6 -2
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/op/activities/index.js +5 -1
- package/dist/op/activities/live-detect.d.ts +4 -3
- package/dist/op/activities/live-detect.d.ts.map +1 -1
- package/dist/op/activities/live-detect.js +57 -32
- package/dist/op/activities/pin-rollout.d.ts +2 -0
- package/dist/op/activities/pin-rollout.d.ts.map +1 -1
- package/dist/op/activities/pin-rollout.js +1 -0
- package/dist/op/activities/terraform.d.ts +153 -5
- package/dist/op/activities/terraform.d.ts.map +1 -1
- package/dist/op/activities/terraform.js +205 -20
- package/dist/op/activity-contracts.d.ts +27 -0
- package/dist/op/activity-contracts.d.ts.map +1 -1
- package/dist/op/activity-contracts.js +19 -1
- package/dist/op/builders.d.ts +7 -1
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +9 -0
- package/dist/pin/edit.d.ts.map +1 -1
- package/dist/pin/edit.js +35 -0
- package/dist/pin/rollout.d.ts +2 -0
- package/dist/pin/rollout.d.ts.map +1 -1
- package/dist/pin/rollout.js +14 -11
- package/dist/plan-shape.d.ts +30 -0
- package/dist/plan-shape.d.ts.map +1 -0
- package/dist/plan-shape.js +125 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +32 -18
- package/dist/report.d.ts +216 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +666 -0
- package/dist/skills/chant-terraform.md +1 -1
- package/dist/state/azure-blob.d.ts +68 -0
- package/dist/state/azure-blob.d.ts.map +1 -0
- package/dist/state/azure-blob.js +201 -0
- package/dist/state/backend.d.ts +158 -0
- package/dist/state/backend.d.ts.map +1 -0
- package/dist/state/backend.js +406 -0
- package/dist/state/exec.d.ts +39 -0
- package/dist/state/exec.d.ts.map +1 -0
- package/dist/state/exec.js +80 -0
- package/dist/state/gcs.d.ts +62 -0
- package/dist/state/gcs.d.ts.map +1 -0
- package/dist/state/gcs.js +224 -0
- package/dist/state/index.d.ts +15 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +14 -0
- package/dist/state/locks.d.ts +105 -0
- package/dist/state/locks.d.ts.map +1 -0
- package/dist/state/locks.js +130 -0
- package/dist/state/object-store.d.ts +37 -0
- package/dist/state/object-store.d.ts.map +1 -0
- package/dist/state/object-store.js +20 -0
- package/dist/state/root-states.d.ts +131 -0
- package/dist/state/root-states.d.ts.map +1 -0
- package/dist/state/root-states.js +241 -0
- package/dist/state/s3.d.ts +68 -0
- package/dist/state/s3.d.ts.map +1 -0
- package/dist/state/s3.js +170 -0
- package/dist/state/store.d.ts +51 -0
- package/dist/state/store.d.ts.map +1 -0
- package/dist/state/store.js +185 -0
- package/dist/terragrunt/affected.d.ts.map +1 -1
- package/dist/terragrunt/affected.js +2 -1
- package/package.json +7 -3
- package/src/__fixtures__/ACCEPTANCE.md +69 -7
- package/src/__fixtures__/compose/apply-failed-in-app.jsonl +12 -0
- package/src/__fixtures__/compose/state-app.json +66 -0
- package/src/__fixtures__/compose/state-edge.json +40 -0
- package/src/__fixtures__/compose/state-net.json +58 -0
- package/src/__fixtures__/compose/three-app.plan.json +184 -0
- package/src/__fixtures__/compose/three-composed.plan.json +509 -0
- package/src/__fixtures__/compose/three-edge.plan.json +144 -0
- package/src/__fixtures__/compose/three-net.plan.json +174 -0
- package/src/__fixtures__/compose/unknown-composed.plan.json +228 -0
- package/src/__fixtures__/compose/working-after-apply.json +145 -0
- package/src/__fixtures__/config-blocks/app/main.tf +61 -0
- package/src/__fixtures__/config-blocks/app/modules/network/main.tf +4 -0
- package/src/__fixtures__/config-blocks/app-json/main.tf.json +39 -0
- package/src/__fixtures__/config-files/shadow/main.tf +3 -0
- package/src/__fixtures__/config-files/shadow/main.tofu +3 -0
- package/src/__fixtures__/config-files/shadow/other.tf +3 -0
- package/src/__fixtures__/config-files/tf/main.tf +11 -0
- package/src/__fixtures__/config-files/tf-json/main.tf.json +18 -0
- package/src/__fixtures__/config-files/tofu/main.tofu +11 -0
- package/src/__fixtures__/config-files/tofu-json/main.tofu.json +18 -0
- package/src/__fixtures__/config-files/tofu-only/main.tofu +3 -0
- package/src/__fixtures__/drift-record/README.md +11 -0
- package/src/__fixtures__/drift-record/live-plan-sections.json +27 -0
- package/src/__fixtures__/instance-forms/app/main.tf +110 -0
- package/src/__fixtures__/instance-forms/app/modules/svc/main.tf +3 -0
- package/src/__fixtures__/instance-vars/app/main.tf +52 -0
- package/src/__fixtures__/instance-vars/app/modules/app/main.tf +12 -0
- package/src/__fixtures__/instance-vars/app/modules/edge/main.tf +3 -0
- package/src/__fixtures__/instance-vars/app/terraform.tfvars +1 -0
- package/src/__fixtures__/live-module-keyed/live-graph.json +259 -0
- package/src/__fixtures__/live-module-keyed/live-plan.json +87 -0
- package/src/__fixtures__/live-module-keyed/root/estate.chdf.hcl +1 -0
- package/src/__fixtures__/live-module-keyed/root/main.tf +21 -0
- package/src/__fixtures__/live-module-keyed/root/modules/app/main.tf +17 -0
- package/src/__fixtures__/live-module-keyed/root/modules/edge/main.tf +7 -0
- package/src/__fixtures__/live-module-keyed/root/versions.tf +30 -0
- package/src/__fixtures__/live-module-keyed/show-state.json +146 -0
- package/src/__fixtures__/pr-loop/README.md +50 -0
- package/src/__fixtures__/pr-loop/chant.config.json +13 -0
- package/src/__fixtures__/pr-loop/estate.component.ts +10 -0
- package/src/__fixtures__/pr-loop/roots/a/main.tf +11 -0
- package/src/__fixtures__/pr-loop/roots/app/main.tf +19 -0
- package/src/__fixtures__/pr-loop/roots/b/main.tf +7 -0
- package/src/__fixtures__/pr-loop/roots/dns/main.tf +3 -0
- package/src/__fixtures__/pr-loop/roots/net/main.tf +7 -0
- package/src/__fixtures__/report/applied.show.json +51 -0
- package/src/__fixtures__/report/generate.ts +63 -0
- package/src/__fixtures__/report/plan.show.json +200 -0
- package/src/__fixtures__/report/tf-apply/change-set.json +170 -0
- package/src/__fixtures__/report/tf-apply/report.json +338 -0
- package/src/__fixtures__/report/tf-plan/change-set.json +170 -0
- package/src/__fixtures__/report/tf-plan/report.json +320 -0
- package/src/__fixtures__/three-cloud-azure.graph.json +290 -0
- package/src/applied-state.ts +52 -0
- package/src/backend-config.test.ts +105 -0
- package/src/backend-config.ts +133 -0
- package/src/behaviour/kinds.ts +4 -0
- package/src/behaviour/predict.ts +5 -2
- package/src/behaviour/reference-catalog.plugin.test.ts +65 -0
- package/src/behaviour/reference-catalog.ts +16 -5
- package/src/behaviour/request.ts +3 -2
- package/src/change-set-instances.test.ts +98 -0
- package/src/changed-roots.ts +14 -16
- package/src/commands.ts +84 -4
- package/src/components/capability-plugin.test.ts +172 -5
- package/src/components/capability-plugin.ts +212 -11
- package/src/components/change-set-graph.e2e.test.ts +11 -5
- package/src/components/compose-group.test.ts +486 -0
- package/src/components/compose-group.ts +489 -0
- package/src/components/demo-composed-roots.e2e.test.ts +440 -0
- package/src/components/member-outputs.test.ts +76 -0
- package/src/components/placeholder-preview.test.ts +147 -0
- package/src/components/placeholder-preview.ts +257 -0
- package/src/components/pr-loop-compose.tofu.e2e.test.ts +363 -0
- package/src/components/pr-loop.tofu.test.ts +112 -56
- package/src/compose/apply-events.test.ts +62 -0
- package/src/compose/apply-events.ts +100 -0
- package/src/compose/estate.choudoufu.e2e.test.ts +112 -0
- package/src/compose/estate.test.ts +421 -0
- package/src/compose/estate.ts +443 -0
- package/src/compose/hcl.ts +311 -0
- package/src/compose/module-address.ts +49 -0
- package/src/compose/root.test.ts +416 -0
- package/src/compose/root.ts +592 -0
- package/src/compose/run.test.ts +440 -0
- package/src/compose/run.tofu.test.ts +176 -0
- package/src/compose/run.ts +527 -0
- package/src/compose/slice.test.ts +184 -0
- package/src/compose/slice.ts +290 -0
- package/src/compose/state-address.ts +157 -0
- package/src/compose/state-merge.test.ts +131 -0
- package/src/compose/state-merge.ts +148 -0
- package/src/compose.test.ts +248 -0
- package/src/compose.ts +627 -0
- package/src/composites/terraform-apply-op.test.ts +9 -0
- package/src/composites/terraform-apply-op.ts +7 -3
- package/src/composites/terraform-pin-rollout-op.test.ts +2 -2
- package/src/config-file-listers.test.ts +265 -0
- package/src/config.ts +44 -9
- package/src/describe-resources.engine-facts.test.ts +412 -0
- package/src/describe-resources.live-module-keyed.test.ts +290 -0
- package/src/describe-resources.ts +416 -70
- package/src/drift-read.ts +284 -0
- package/src/drift-record.test.ts +223 -0
- package/src/drift-record.ts +455 -0
- package/src/hcl/config-blocks.test.ts +174 -0
- package/src/hcl/edges.ts +21 -1
- package/src/hcl/files.ts +234 -0
- package/src/hcl/instance-forms.test.ts +94 -0
- package/src/hcl/instances.test.ts +137 -0
- package/src/hcl/instances.ts +422 -0
- package/src/hcl/parse.test.ts +139 -1
- package/src/hcl/parse.ts +149 -16
- package/src/hcl/roots.ts +6 -0
- package/src/hcl/suppressions.ts +8 -2
- package/src/index.ts +76 -0
- package/src/live-plan-reasons.ts +54 -0
- package/src/lsp/completions.test.ts +1 -1
- package/src/lsp/option-keys.ts +2 -0
- package/src/op/activities/choudoufu-plan-set-op.test.ts +111 -0
- package/src/op/activities/index.ts +9 -0
- package/src/op/activities/live-detect.ts +55 -26
- package/src/op/activities/pin-rollout.ts +3 -0
- package/src/op/activities/registry.test.ts +2 -1
- package/src/op/activities/terraform.test.ts +55 -0
- package/src/op/activities/terraform.ts +266 -22
- package/src/op/activity-contracts.test.ts +1 -0
- package/src/op/activity-contracts.ts +24 -1
- package/src/op/builders.ts +14 -0
- package/src/pin/bundle.test.ts +2 -0
- package/src/pin/edit.ts +30 -0
- package/src/pin/rollout.ts +16 -11
- package/src/plan-shape.test.ts +148 -0
- package/src/plan-shape.ts +128 -0
- package/src/plugin.ts +33 -19
- package/src/report.test.ts +423 -0
- package/src/report.ts +752 -0
- package/src/signal-only-root.test.ts +72 -0
- package/src/skills/chant-terraform.md +1 -1
- package/src/state/azure-blob.ts +223 -0
- package/src/state/backend-verdict.test.ts +187 -0
- package/src/state/backend.test.ts +127 -0
- package/src/state/backend.ts +488 -0
- package/src/state/exec.ts +111 -0
- package/src/state/gcs.ts +254 -0
- package/src/state/index.ts +15 -0
- package/src/state/locks.test.ts +84 -0
- package/src/state/locks.ts +201 -0
- package/src/state/object-store.ts +35 -0
- package/src/state/root-states-floci.e2e.test.ts +66 -0
- package/src/state/root-states.test.ts +462 -0
- package/src/state/root-states.ts +309 -0
- package/src/state/s3.ts +193 -0
- package/src/state/store.ts +225 -0
- package/src/terragrunt/affected.ts +2 -1
- package/src/workspace-kinds.test.ts +4 -17
- package/workspace-kinds.json +1 -24
- package/dist/workspace-member.d.ts +0 -30
- package/dist/workspace-member.d.ts.map +0 -1
- package/dist/workspace-member.js +0 -91
- package/schemas/pulumi.schema.json +0 -34
- package/src/testdata/pulumi-member/Pulumi.yaml +0 -2
- package/src/testdata/pulumi-member/stack-export.json +0 -53
- package/src/testdata/pulumi-unexported/Pulumi.yaml +0 -2
- package/src/workspace-member.test.ts +0 -89
- package/src/workspace-member.ts +0 -126
package/README.md
CHANGED
|
@@ -54,9 +54,10 @@ just docs
|
|
|
54
54
|
|
|
55
55
|
## Acceptance evidence
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
`choudoufu` binary, and each of them
|
|
59
|
-
dependency is absent.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
57
|
+
Eleven `describe` blocks across eight files run this lexicon against a real
|
|
58
|
+
`terraform`, `tofu`, `choudoufu` or `terragrunt` binary, and each of them
|
|
59
|
+
skips rather than fails when its dependency is absent.
|
|
60
|
+
`src/__fixtures__/ACCEPTANCE.md` records, per block, what it proves, what
|
|
61
|
+
gates it, the command that runs it, and a "Last passed" line: the binary,
|
|
62
|
+
emulator and date of its last recorded pass. Eight blocks have one. The three
|
|
63
|
+
Terragrunt suites read "not recorded" until their first run is written down.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Component } from "@intentius/chant/components";
|
|
2
|
+
export declare const net: Component;
|
|
3
|
+
export declare const a: Component;
|
|
4
|
+
export declare const b: Component;
|
|
5
|
+
export declare const app: Component;
|
|
6
|
+
export declare const dns: Component;
|
|
7
|
+
//# sourceMappingURL=estate.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estate.component.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/pr-loop/estate.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAKjF,eAAO,MAAM,GAAG,EAAE,SAAgE,CAAC;AACnF,eAAO,MAAM,CAAC,EAAE,SAAuG,CAAC;AACxH,eAAO,MAAM,CAAC,EAAE,SAAuG,CAAC;AACxH,eAAO,MAAM,GAAG,EAAE,SAAuG,CAAC;AAC1H,eAAO,MAAM,GAAG,EAAE,SAAgE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { phase, stackOutput } from "@intentius/chant/components";
|
|
2
|
+
const apply = (root, vars) => [phase("Apply", [{ kind: "terraform-apply", root, noRollback: "test roots with local state", vars: vars ?? {} }])];
|
|
3
|
+
export const net = { name: "net", dependsOn: [], deploy: apply("net") };
|
|
4
|
+
export const a = { name: "a", dependsOn: ["net"], deploy: apply("a", { cidr: stackOutput("net", "cidr") }) };
|
|
5
|
+
export const b = { name: "b", dependsOn: ["net"], deploy: apply("b", { cidr: stackOutput("net", "cidr") }) };
|
|
6
|
+
export const app = { name: "app", dependsOn: ["a"], deploy: apply("app", { subnet: stackOutput("a", "id") }) };
|
|
7
|
+
export const dns = { name: "dns", dependsOn: [], deploy: apply("dns") };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regenerate the `chant terraform report` fixture behold renders (#4439):
|
|
3
|
+
*
|
|
4
|
+
* npx tsx lexicons/terraform/src/__fixtures__/report/generate.ts
|
|
5
|
+
*
|
|
6
|
+
* It reads `plan.show.json` (a three-estate composed plan: network, app and
|
|
7
|
+
* edge, with app reading network and edge reading app) and `applied.show.json`
|
|
8
|
+
* (the plan made after the apply), runs `terraformReport` for both stages, and
|
|
9
|
+
* writes `<stage>/report.json` and `<stage>/change-set.json` beside them.
|
|
10
|
+
* `report.test.ts` runs `generateReportFixture` and compares it with the
|
|
11
|
+
* files, so a change to the writer shows as a diff here.
|
|
12
|
+
*/
|
|
13
|
+
export declare const FIXTURE_RUN: {
|
|
14
|
+
project: string;
|
|
15
|
+
commit: string;
|
|
16
|
+
job_url: string;
|
|
17
|
+
pull_request: string;
|
|
18
|
+
};
|
|
19
|
+
export declare const FIXTURE_ESTATES: {
|
|
20
|
+
network: string;
|
|
21
|
+
app: string;
|
|
22
|
+
edge: string;
|
|
23
|
+
};
|
|
24
|
+
/** The fixture's output files by path under this directory: `<stage>/report.json` and `<stage>/change-set.json`. */
|
|
25
|
+
export declare function generateReportFixture(): Promise<Record<string, string>>;
|
|
26
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/report/generate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,eAAO,MAAM,WAAW;IAAK,OAAO;IAAwC,MAAM;IAAgB,OAAO;IAA8D,YAAY;CAAO,CAAC;AAC3L,eAAO,MAAM,eAAe;IAAK,OAAO;IAAkB,GAAG;IAAc,IAAI;CAAe,CAAC;AAK/F,oHAAoH;AACpH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0B7E"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regenerate the `chant terraform report` fixture behold renders (#4439):
|
|
3
|
+
*
|
|
4
|
+
* npx tsx lexicons/terraform/src/__fixtures__/report/generate.ts
|
|
5
|
+
*
|
|
6
|
+
* It reads `plan.show.json` (a three-estate composed plan: network, app and
|
|
7
|
+
* edge, with app reading network and edge reading app) and `applied.show.json`
|
|
8
|
+
* (the plan made after the apply), runs `terraformReport` for both stages, and
|
|
9
|
+
* writes `<stage>/report.json` and `<stage>/change-set.json` beside them.
|
|
10
|
+
* `report.test.ts` runs `generateReportFixture` and compares it with the
|
|
11
|
+
* files, so a change to the writer shows as a diff here.
|
|
12
|
+
*/
|
|
13
|
+
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
14
|
+
import { dirname, join } from "node:path";
|
|
15
|
+
import { fileURLToPath } from "node:url";
|
|
16
|
+
import { terraformReport, writeReport } from "../../report.js";
|
|
17
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
18
|
+
export const FIXTURE_RUN = { project: "forgejo:3000/admin/demo-terragrunt", commit: "4439c0ffee", job_url: "http://forgejo:3000/admin/demo-terragrunt/actions/runs/1", pull_request: "1" };
|
|
19
|
+
export const FIXTURE_ESTATES = { network: "demo-network", app: "demo-app", edge: "demo-edge" };
|
|
20
|
+
const FINISHED = { "tf-plan": "2026-10-25T10:00:00Z", "tf-apply": "2026-10-25T10:05:00Z" };
|
|
21
|
+
const readJson = (name) => JSON.parse(readFileSync(join(here, name), "utf8"));
|
|
22
|
+
/** The fixture's output files by path under this directory: `<stage>/report.json` and `<stage>/change-set.json`. */
|
|
23
|
+
export async function generateReportFixture() {
|
|
24
|
+
const plan = readJson("plan.show.json");
|
|
25
|
+
const applied = readJson("applied.show.json");
|
|
26
|
+
const files = {};
|
|
27
|
+
const store = {
|
|
28
|
+
async read() {
|
|
29
|
+
return undefined;
|
|
30
|
+
},
|
|
31
|
+
async put(key, body) {
|
|
32
|
+
const m = /\/(tf-plan|tf-apply)\/(report|change-set)\.json$/.exec(key);
|
|
33
|
+
if (m)
|
|
34
|
+
files[`${m[1]}/${m[2]}.json`] = body;
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
for (const stage of ["tf-plan", "tf-apply"]) {
|
|
38
|
+
await writeReport(store, terraformReport({
|
|
39
|
+
stage,
|
|
40
|
+
plan,
|
|
41
|
+
...(stage === "tf-apply" ? { applied } : {}),
|
|
42
|
+
run: FIXTURE_RUN,
|
|
43
|
+
binary: "choudoufu",
|
|
44
|
+
rootDir: "estates",
|
|
45
|
+
estates: FIXTURE_ESTATES,
|
|
46
|
+
finished: FINISHED[stage],
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
return files;
|
|
50
|
+
}
|
|
51
|
+
if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
52
|
+
const files = await generateReportFixture();
|
|
53
|
+
for (const [name, body] of Object.entries(files)) {
|
|
54
|
+
mkdirSync(dirname(join(here, name)), { recursive: true });
|
|
55
|
+
writeFileSync(join(here, name), body);
|
|
56
|
+
}
|
|
57
|
+
console.log(`wrote ${Object.keys(files).join(", ")}`);
|
|
58
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What applied, read from `show -json` of a plan made after the apply: its
|
|
3
|
+
* `prior_state` is the state the apply left (chant#4445). choudoufu refuses a
|
|
4
|
+
* bare `show` under a `live` block, since there is no state file to show, so
|
|
5
|
+
* a post-apply plan is the one place its applied values can be read.
|
|
6
|
+
*
|
|
7
|
+
* `chant terraform report` (`./report.ts`) and the composed estate run
|
|
8
|
+
* (`./compose/estate.ts`) both read through {@link priorStateValues}.
|
|
9
|
+
*/
|
|
10
|
+
type Json = Record<string, unknown>;
|
|
11
|
+
/**
|
|
12
|
+
* The `values` of the state a `show -json` holds: a plan's `prior_state`, or
|
|
13
|
+
* a state's own `values` when it is a `show -json` of state. Undefined when
|
|
14
|
+
* it holds neither.
|
|
15
|
+
*/
|
|
16
|
+
export declare function priorStateValues(show: unknown): Json | undefined;
|
|
17
|
+
/** One resource of a state: its values and its sensitivity map. */
|
|
18
|
+
export interface StateResourceValues {
|
|
19
|
+
values: Json;
|
|
20
|
+
sensitive: Json;
|
|
21
|
+
}
|
|
22
|
+
/** Every resource of the state a `show -json` holds, by address. A deposed object is left out. */
|
|
23
|
+
export declare function stateResources(show: unknown): Map<string, StateResourceValues>;
|
|
24
|
+
/** The outputs of the state a `show -json` holds, by name, each its value. */
|
|
25
|
+
export declare function stateOutputs(show: unknown): Record<string, unknown>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=applied-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applied-state.d.ts","sourceRoot":"","sources":["../src/applied-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAIpC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAIhE;AAED,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,IAAI,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAY9E;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAInE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What applied, read from `show -json` of a plan made after the apply: its
|
|
3
|
+
* `prior_state` is the state the apply left (chant#4445). choudoufu refuses a
|
|
4
|
+
* bare `show` under a `live` block, since there is no state file to show, so
|
|
5
|
+
* a post-apply plan is the one place its applied values can be read.
|
|
6
|
+
*
|
|
7
|
+
* `chant terraform report` (`./report.ts`) and the composed estate run
|
|
8
|
+
* (`./compose/estate.ts`) both read through {@link priorStateValues}.
|
|
9
|
+
*/
|
|
10
|
+
const isObject = (v) => v !== null && typeof v === "object" && !Array.isArray(v);
|
|
11
|
+
/**
|
|
12
|
+
* The `values` of the state a `show -json` holds: a plan's `prior_state`, or
|
|
13
|
+
* a state's own `values` when it is a `show -json` of state. Undefined when
|
|
14
|
+
* it holds neither.
|
|
15
|
+
*/
|
|
16
|
+
export function priorStateValues(show) {
|
|
17
|
+
const root = isObject(show) ? show : {};
|
|
18
|
+
const state = isObject(root.prior_state) ? root.prior_state : root;
|
|
19
|
+
return isObject(state.values) ? state.values : undefined;
|
|
20
|
+
}
|
|
21
|
+
/** Every resource of the state a `show -json` holds, by address. A deposed object is left out. */
|
|
22
|
+
export function stateResources(show) {
|
|
23
|
+
const out = new Map();
|
|
24
|
+
const walk = (mod) => {
|
|
25
|
+
if (!isObject(mod))
|
|
26
|
+
return;
|
|
27
|
+
for (const r of Array.isArray(mod.resources) ? mod.resources : []) {
|
|
28
|
+
if (!isObject(r) || typeof r.address !== "string" || r.deposed_key !== undefined)
|
|
29
|
+
continue;
|
|
30
|
+
out.set(r.address, { values: isObject(r.values) ? r.values : {}, sensitive: isObject(r.sensitive_values) ? r.sensitive_values : {} });
|
|
31
|
+
}
|
|
32
|
+
for (const c of Array.isArray(mod.child_modules) ? mod.child_modules : [])
|
|
33
|
+
walk(c);
|
|
34
|
+
};
|
|
35
|
+
walk(priorStateValues(show)?.root_module);
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
/** The outputs of the state a `show -json` holds, by name, each its value. */
|
|
39
|
+
export function stateOutputs(show) {
|
|
40
|
+
const outputs = priorStateValues(show)?.outputs;
|
|
41
|
+
if (!isObject(outputs))
|
|
42
|
+
return {};
|
|
43
|
+
return Object.fromEntries(Object.entries(outputs).map(([k, v]) => [k, isObject(v) && "value" in v ? v.value : v]));
|
|
44
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A root's `-backend-config` (chant#4459): the files it names in
|
|
3
|
+
* `terraform.roots.<name>.backendConfigFiles` and the pairs in
|
|
4
|
+
* `backendConfig`, as the flags every init the lexicon runs passes, and the
|
|
5
|
+
* keys a file holds, as the readers that find a root's state before init see
|
|
6
|
+
* them.
|
|
7
|
+
*
|
|
8
|
+
* Files go first and pairs after, because init applies later flags over
|
|
9
|
+
* earlier ones and a pair is the more specific of the two. A file's path is
|
|
10
|
+
* passed as written: init runs in the root's directory, so a relative path
|
|
11
|
+
* resolves against it, as `varFiles` does. A reader of the file resolves it
|
|
12
|
+
* the same way.
|
|
13
|
+
*
|
|
14
|
+
* Plain node: `op/activities/terraform.ts` imports this, and it stays out of
|
|
15
|
+
* the HCL parser's dependency graph.
|
|
16
|
+
*/
|
|
17
|
+
/** The two keys of a root that say what init's `-backend-config` flags are. */
|
|
18
|
+
export interface BackendConfigFlags {
|
|
19
|
+
backendConfigFiles?: readonly string[];
|
|
20
|
+
backendConfig?: Readonly<Record<string, string>>;
|
|
21
|
+
}
|
|
22
|
+
/** The `-backend-config` values in the order init takes them: each file's path, then each `key=value` pair. Unquoted, one per flag. */
|
|
23
|
+
export declare function backendConfigValues(root: BackendConfigFlags): string[];
|
|
24
|
+
/** {@link backendConfigValues} as argv: `-backend-config=<value>` each. */
|
|
25
|
+
export declare function backendConfigArgs(root: BackendConfigFlags): string[];
|
|
26
|
+
/** A backend-config file's path as init in `dir` reads it: an absolute path as it is, a relative one against `dir`. */
|
|
27
|
+
export declare function backendConfigFilePath(dir: string, file: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* The text of `body` with everything nested deeper than `level` braces
|
|
30
|
+
* blanked, newlines kept, so only the attributes at that level are left to
|
|
31
|
+
* read. Strings are read through, so a brace in one does not count.
|
|
32
|
+
*/
|
|
33
|
+
export declare function blankBelow(body: string, level: number): string;
|
|
34
|
+
/**
|
|
35
|
+
* The literal attributes of HCL text at brace depth `level` (0 for a file of
|
|
36
|
+
* bare attributes, 1 for the body of a block given with its header): plain
|
|
37
|
+
* strings, booleans and numbers, typed as init records them. A string with an
|
|
38
|
+
* interpolation, and anything that is not one line of `name = literal`, is
|
|
39
|
+
* left out. Comments are left to the caller to blank.
|
|
40
|
+
*/
|
|
41
|
+
export declare function literalAttributes(text: string, level: number): Record<string, unknown>;
|
|
42
|
+
/** The keys one backend-config file sets: its top-level `key = "value"` lines. Throws when the file cannot be read. */
|
|
43
|
+
export declare function readBackendConfigFile(path: string): Record<string, unknown>;
|
|
44
|
+
/**
|
|
45
|
+
* The keys a root's backend-config files set, later files over earlier ones,
|
|
46
|
+
* each path resolved against `dir`; and the files that could not be read,
|
|
47
|
+
* which init itself will refuse.
|
|
48
|
+
*/
|
|
49
|
+
export declare function backendConfigFileKeys(dir: string, files?: readonly string[]): {
|
|
50
|
+
config: Record<string, unknown>;
|
|
51
|
+
unread: string[];
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=backend-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-config.d.ts","sourceRoot":"","sources":["../src/backend-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,+EAA+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAClD;AAED,uIAAuI;AACvI,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAEtE;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAEpE;AAED,uHAAuH;AACvH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAmB9D;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWtF;AA0BD,uHAAuH;AACvH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,SAAS,MAAM,EAAO,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAWvI"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A root's `-backend-config` (chant#4459): the files it names in
|
|
3
|
+
* `terraform.roots.<name>.backendConfigFiles` and the pairs in
|
|
4
|
+
* `backendConfig`, as the flags every init the lexicon runs passes, and the
|
|
5
|
+
* keys a file holds, as the readers that find a root's state before init see
|
|
6
|
+
* them.
|
|
7
|
+
*
|
|
8
|
+
* Files go first and pairs after, because init applies later flags over
|
|
9
|
+
* earlier ones and a pair is the more specific of the two. A file's path is
|
|
10
|
+
* passed as written: init runs in the root's directory, so a relative path
|
|
11
|
+
* resolves against it, as `varFiles` does. A reader of the file resolves it
|
|
12
|
+
* the same way.
|
|
13
|
+
*
|
|
14
|
+
* Plain node: `op/activities/terraform.ts` imports this, and it stays out of
|
|
15
|
+
* the HCL parser's dependency graph.
|
|
16
|
+
*/
|
|
17
|
+
import { readFileSync } from "node:fs";
|
|
18
|
+
import { isAbsolute, resolve } from "node:path";
|
|
19
|
+
/** The `-backend-config` values in the order init takes them: each file's path, then each `key=value` pair. Unquoted, one per flag. */
|
|
20
|
+
export function backendConfigValues(root) {
|
|
21
|
+
return [...(root.backendConfigFiles ?? []), ...Object.entries(root.backendConfig ?? {}).map(([k, v]) => `${k}=${v}`)];
|
|
22
|
+
}
|
|
23
|
+
/** {@link backendConfigValues} as argv: `-backend-config=<value>` each. */
|
|
24
|
+
export function backendConfigArgs(root) {
|
|
25
|
+
return backendConfigValues(root).map((v) => `-backend-config=${v}`);
|
|
26
|
+
}
|
|
27
|
+
/** A backend-config file's path as init in `dir` reads it: an absolute path as it is, a relative one against `dir`. */
|
|
28
|
+
export function backendConfigFilePath(dir, file) {
|
|
29
|
+
return isAbsolute(file) ? file : resolve(dir, file);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The text of `body` with everything nested deeper than `level` braces
|
|
33
|
+
* blanked, newlines kept, so only the attributes at that level are left to
|
|
34
|
+
* read. Strings are read through, so a brace in one does not count.
|
|
35
|
+
*/
|
|
36
|
+
export function blankBelow(body, level) {
|
|
37
|
+
const out = body.split("");
|
|
38
|
+
let depth = 0;
|
|
39
|
+
let inString = false;
|
|
40
|
+
for (let i = 0; i < body.length; i++) {
|
|
41
|
+
const c = body[i];
|
|
42
|
+
if (depth > level && c !== "\n")
|
|
43
|
+
out[i] = " ";
|
|
44
|
+
if (inString) {
|
|
45
|
+
if (c === "\\") {
|
|
46
|
+
if (depth > level && body[i + 1] !== undefined && body[i + 1] !== "\n")
|
|
47
|
+
out[i + 1] = " ";
|
|
48
|
+
i++;
|
|
49
|
+
}
|
|
50
|
+
else if (c === '"')
|
|
51
|
+
inString = false;
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (c === '"')
|
|
55
|
+
inString = true;
|
|
56
|
+
else if (c === "{")
|
|
57
|
+
depth++;
|
|
58
|
+
else if (c === "}")
|
|
59
|
+
depth--;
|
|
60
|
+
}
|
|
61
|
+
return out.join("");
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The literal attributes of HCL text at brace depth `level` (0 for a file of
|
|
65
|
+
* bare attributes, 1 for the body of a block given with its header): plain
|
|
66
|
+
* strings, booleans and numbers, typed as init records them. A string with an
|
|
67
|
+
* interpolation, and anything that is not one line of `name = literal`, is
|
|
68
|
+
* left out. Comments are left to the caller to blank.
|
|
69
|
+
*/
|
|
70
|
+
export function literalAttributes(text, level) {
|
|
71
|
+
const out = {};
|
|
72
|
+
for (const m of blankBelow(text, level).matchAll(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=\s*("(?:[^"\\]|\\.)*"|true|false|-?\d+(?:\.\d+)?)\s*$/gm)) {
|
|
73
|
+
const raw = m[2];
|
|
74
|
+
if (raw.startsWith('"')) {
|
|
75
|
+
const s = raw.slice(1, -1);
|
|
76
|
+
if (/\$\{|%\{/.test(s))
|
|
77
|
+
continue;
|
|
78
|
+
out[m[1]] = s.replace(/\\(.)/g, "$1");
|
|
79
|
+
}
|
|
80
|
+
else
|
|
81
|
+
out[m[1]] = raw === "true" ? true : raw === "false" ? false : Number(raw);
|
|
82
|
+
}
|
|
83
|
+
return out;
|
|
84
|
+
}
|
|
85
|
+
/** HCL text with its `#`, `//` and `/* *\/` comments blanked, strings read through. */
|
|
86
|
+
function withoutComments(text) {
|
|
87
|
+
const out = text.split("");
|
|
88
|
+
let inString = false;
|
|
89
|
+
for (let i = 0; i < text.length; i++) {
|
|
90
|
+
const c = text[i];
|
|
91
|
+
if (inString) {
|
|
92
|
+
if (c === "\\")
|
|
93
|
+
i++;
|
|
94
|
+
else if (c === '"')
|
|
95
|
+
inString = false;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (c === '"')
|
|
99
|
+
inString = true;
|
|
100
|
+
else if (c === "#" || (c === "/" && text[i + 1] === "/")) {
|
|
101
|
+
for (; i < text.length && text[i] !== "\n"; i++)
|
|
102
|
+
out[i] = " ";
|
|
103
|
+
}
|
|
104
|
+
else if (c === "/" && text[i + 1] === "*") {
|
|
105
|
+
const end = text.indexOf("*/", i + 2);
|
|
106
|
+
const stop = end < 0 ? text.length : end + 2;
|
|
107
|
+
for (; i < stop; i++)
|
|
108
|
+
if (text[i] !== "\n")
|
|
109
|
+
out[i] = " ";
|
|
110
|
+
i--;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return out.join("");
|
|
114
|
+
}
|
|
115
|
+
/** The keys one backend-config file sets: its top-level `key = "value"` lines. Throws when the file cannot be read. */
|
|
116
|
+
export function readBackendConfigFile(path) {
|
|
117
|
+
return literalAttributes(withoutComments(readFileSync(path, "utf-8")), 0);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The keys a root's backend-config files set, later files over earlier ones,
|
|
121
|
+
* each path resolved against `dir`; and the files that could not be read,
|
|
122
|
+
* which init itself will refuse.
|
|
123
|
+
*/
|
|
124
|
+
export function backendConfigFileKeys(dir, files = []) {
|
|
125
|
+
const config = {};
|
|
126
|
+
const unread = [];
|
|
127
|
+
for (const f of files) {
|
|
128
|
+
try {
|
|
129
|
+
Object.assign(config, readBackendConfigFile(backendConfigFilePath(dir, f)));
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
unread.push(f);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return { config, unread };
|
|
136
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kinds.d.ts","sourceRoot":"","sources":["../../src/behaviour/kinds.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,yDAAyD;AACzD,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"kinds.d.ts","sourceRoot":"","sources":["../../src/behaviour/kinds.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,yDAAyD;AACzD,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAgH7D;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,EAAE,aAAa,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAmB/F,CAAC;AAoBF,gDAAgD;AAChD,eAAO,MAAM,uBAAuB,EAAE,cAiBrC,CAAC"}
|
package/dist/behaviour/kinds.js
CHANGED
|
@@ -127,6 +127,10 @@ const BLOCKS = {
|
|
|
127
127
|
"Terraform::Module": "a call to a child module; the blocks the call expands to are entities of their own and carry the figures",
|
|
128
128
|
"Terraform::Data": "a read of something that exists outside this root; whatever it reads is priced where it is declared",
|
|
129
129
|
"Terraform::Live": "choudoufu's estate declaration, which names the ownership marker every resource of the root carries and holds nothing itself",
|
|
130
|
+
"Terraform::Moved": "an instruction to rename an address in state; the resource it names carries the figures",
|
|
131
|
+
"Terraform::Import": "an instruction to adopt an existing object into state; the resource it names carries the figures",
|
|
132
|
+
"Terraform::Removed": "an instruction to drop an address from state; nothing is created by it",
|
|
133
|
+
"Terraform::Check": "an assertion terraform evaluates after a plan or apply, which holds nothing in any account",
|
|
130
134
|
};
|
|
131
135
|
/**
|
|
132
136
|
* Provider prefixes that are a substrate boundary rather than a missing row,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predict.d.ts","sourceRoot":"","sources":["../../src/behaviour/predict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAE7B,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAK1F,OAAO,EAEL,KAAK,wBAAwB,EAE9B,MAAM,WAAW,CAAC;AAEnB,oDAAoD;AACpD,eAAO,MAAM,SAAS,cAAc,CAAC;AAErC,wFAAwF;AACxF,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACxC;;;;OAIG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CACzE;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,uBACf,SAAQ,IAAI,CAAC,uBAAuB,EAAE,UAAU,GAAG,OAAO,GAAG,cAAc,CAAC;IAC5E,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACxD,iGAAiG;IACjG,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;;;;;OAeG;IACH,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;CAC3B;AAmBD,6FAA6F;AAC7F,MAAM,MAAM,0BAA0B,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;AAElH;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,
|
|
1
|
+
{"version":3,"file":"predict.d.ts","sourceRoot":"","sources":["../../src/behaviour/predict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAE7B,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAK1F,OAAO,EAEL,KAAK,wBAAwB,EAE9B,MAAM,WAAW,CAAC;AAEnB,oDAAoD;AACpD,eAAO,MAAM,SAAS,cAAc,CAAC;AAErC,wFAAwF;AACxF,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACxC;;;;OAIG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CACzE;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,uBACf,SAAQ,IAAI,CAAC,uBAAuB,EAAE,UAAU,GAAG,OAAO,GAAG,cAAc,CAAC;IAC5E,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACxD,iGAAiG;IACjG,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;;;;;OAeG;IACH,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;CAC3B;AAmBD,6FAA6F;AAC7F,MAAM,MAAM,0BAA0B,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;AAElH;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,0BA6BtC,CAAC;AAKF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,uBAAuB,EAChC,SAAS,GAAE,0BAAqD,GAC/D,OAAO,CAAC,uBAAuB,CAAC,CA+ClC;AAED,sGAAsG;AACtG,wBAAgB,WAAW,CACzB,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,GACtD,MAAM,EAAE,CAQV;AAQD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,uBAAuB,EAChC,IAAI,GAAE,sBAAkC,GACvC,OAAO,CAAC,eAAe,CAAC,CA4E1B"}
|
|
@@ -90,11 +90,15 @@ export const readTerraformDeclaration = async (cwd) => {
|
|
|
90
90
|
const { config, configPath } = await loadChantConfigUpward(start);
|
|
91
91
|
const namespace = config.terraform;
|
|
92
92
|
const entities = new Map();
|
|
93
|
-
|
|
93
|
+
// A `signalOnly` root (#4484) builds nothing, as in `buildRoots`.
|
|
94
|
+
if (!namespace)
|
|
95
|
+
return entities;
|
|
96
|
+
const roots = Object.fromEntries(Object.entries(namespace.roots ?? {}).filter(([, r]) => r.signalOnly !== true));
|
|
97
|
+
if (Object.keys(roots).length === 0)
|
|
94
98
|
return entities;
|
|
95
99
|
const rendered = await renderTerraformRoots({
|
|
96
100
|
projectRoot: configPath ? dirname(configPath) : start,
|
|
97
|
-
roots
|
|
101
|
+
roots,
|
|
98
102
|
binary: namespace.binary,
|
|
99
103
|
callModuleType: namespace.callModuleType,
|
|
100
104
|
moduleRoot: namespace.moduleRoot,
|
|
@@ -16,11 +16,22 @@
|
|
|
16
16
|
* Every terraform `resource` block is `Terraform::Resource` to chant. A rule
|
|
17
17
|
* keyed on that would apply to a VPC and an instance alike, so the nodes
|
|
18
18
|
* `./request.ts` builds for the resolver carry the **provider type** as their
|
|
19
|
-
* `kind` — `aws_subnet` — and the rules here are keyed the same way.
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
19
|
+
* `kind` — `aws_subnet` — and the rules here are keyed the same way.
|
|
20
|
+
*
|
|
21
|
+
* ## On the plugin (#4535)
|
|
22
|
+
*
|
|
23
|
+
* The plugin declares it as `referenceCatalog` since #4535, so a reader that
|
|
24
|
+
* asks every lexicon of a graph for its catalog (behold#1030's gate, before
|
|
25
|
+
* behold#1005 retires behold's name matcher) finds terraform's. What it
|
|
26
|
+
* matches depends on the nodes. A declared or live `chant graph` node is
|
|
27
|
+
* `Terraform::Resource`, with its provider type in `attrs.type` and no
|
|
28
|
+
* arguments in `attrs`, so no rule here reads it: those graphs keep the edges
|
|
29
|
+
* the HCL references and the state dependencies give them, and gain none. A
|
|
30
|
+
* node whose `kind` is the provider type and whose `attrs` are the block's
|
|
31
|
+
* arguments (`./request.ts`'s, an engine's instance roster) is what the rules
|
|
32
|
+
* are for. `chant graph --live` merges a catalog's edges with the
|
|
33
|
+
* observation's own since #4535; before, any catalog replaced them, which is
|
|
34
|
+
* what kept this one off the plugin.
|
|
24
35
|
*
|
|
25
36
|
* ## Two relations, and why the split matters to an engine
|
|
26
37
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-catalog.d.ts","sourceRoot":"","sources":["../../src/behaviour/reference-catalog.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"reference-catalog.d.ts","sourceRoot":"","sources":["../../src/behaviour/reference-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAMjD,CAAC;AAEH,mEAAmE;AACnE,eAAO,MAAM,2BAA2B,EAAE,gBA8FzC,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAgE,CAAC;AAElH;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD"}
|
|
@@ -16,11 +16,22 @@
|
|
|
16
16
|
* Every terraform `resource` block is `Terraform::Resource` to chant. A rule
|
|
17
17
|
* keyed on that would apply to a VPC and an instance alike, so the nodes
|
|
18
18
|
* `./request.ts` builds for the resolver carry the **provider type** as their
|
|
19
|
-
* `kind` — `aws_subnet` — and the rules here are keyed the same way.
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
19
|
+
* `kind` — `aws_subnet` — and the rules here are keyed the same way.
|
|
20
|
+
*
|
|
21
|
+
* ## On the plugin (#4535)
|
|
22
|
+
*
|
|
23
|
+
* The plugin declares it as `referenceCatalog` since #4535, so a reader that
|
|
24
|
+
* asks every lexicon of a graph for its catalog (behold#1030's gate, before
|
|
25
|
+
* behold#1005 retires behold's name matcher) finds terraform's. What it
|
|
26
|
+
* matches depends on the nodes. A declared or live `chant graph` node is
|
|
27
|
+
* `Terraform::Resource`, with its provider type in `attrs.type` and no
|
|
28
|
+
* arguments in `attrs`, so no rule here reads it: those graphs keep the edges
|
|
29
|
+
* the HCL references and the state dependencies give them, and gain none. A
|
|
30
|
+
* node whose `kind` is the provider type and whose `attrs` are the block's
|
|
31
|
+
* arguments (`./request.ts`'s, an engine's instance roster) is what the rules
|
|
32
|
+
* are for. `chant graph --live` merges a catalog's edges with the
|
|
33
|
+
* observation's own since #4535; before, any catalog replaced them, which is
|
|
34
|
+
* what kept this one off the plugin.
|
|
24
35
|
*
|
|
25
36
|
* ## Two relations, and why the split matters to an engine
|
|
26
37
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/behaviour/request.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/behaviour/request.ts"],"names":[],"mappings":"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"}
|
|
@@ -202,8 +202,9 @@ function liveVerdictOf(address, plan) {
|
|
|
202
202
|
kind: "unobserved",
|
|
203
203
|
instances,
|
|
204
204
|
// `no-credentials` is an observation reason and not a prediction one;
|
|
205
|
-
// the credential wording stays in the detail.
|
|
206
|
-
|
|
205
|
+
// the credential wording stays in the detail. `not-reached` is a
|
|
206
|
+
// stream's reason (#4451) and a live-plan omission never gives it.
|
|
207
|
+
reason: unobserved.reason === "no-credentials" || unobserved.reason === "not-reached" ? "read-failed" : unobserved.reason,
|
|
207
208
|
detail: unobserved.detail,
|
|
208
209
|
};
|
|
209
210
|
}
|
package/dist/changed-roots.d.ts
CHANGED
|
@@ -9,9 +9,11 @@
|
|
|
9
9
|
* in a local module it calls (followed through modules that call modules),
|
|
10
10
|
* or is one of its var files.
|
|
11
11
|
*
|
|
12
|
-
* The module calls are read with a regex over the root's
|
|
12
|
+
* The module calls are read with a regex over the root's HCL configuration
|
|
13
13
|
* files, the way `./op/activities/live-detect.ts` reads a live block, so
|
|
14
|
-
* this stays out of the HCL parser's dependency graph.
|
|
14
|
+
* this stays out of the HCL parser's dependency graph. Which files those are
|
|
15
|
+
* follows the root's binary through the lexicon's one lister (chant#4457):
|
|
16
|
+
* `.tf`, plus `.tofu` for a tofu or choudoufu root. Only a `source` that
|
|
15
17
|
* starts with `./` or `../` is followed; a registry or git source is a
|
|
16
18
|
* version pin in the root's own files, which a change to it already touches.
|
|
17
19
|
*/
|
|
@@ -20,11 +22,11 @@ import type { TerraformRootConfig } from "./config.js";
|
|
|
20
22
|
* Every path, relative to `projectRoot`, whose change touches `root`: its
|
|
21
23
|
* directory, each local module it reaches, and its var files.
|
|
22
24
|
*/
|
|
23
|
-
export declare function rootWatchPaths(projectRoot: string, root: Pick<TerraformRootConfig, "dir" | "varFiles"
|
|
25
|
+
export declare function rootWatchPaths(projectRoot: string, root: Pick<TerraformRootConfig, "dir" | "varFiles">, binary?: string): string[];
|
|
24
26
|
/**
|
|
25
27
|
* The names of the roots in `roots` that a change to `changedFiles` touches,
|
|
26
28
|
* sorted. `changedFiles` are relative to `projectRoot` with `/` separators,
|
|
27
29
|
* as `git diff --name-only --relative` prints them.
|
|
28
30
|
*/
|
|
29
|
-
export declare function changedRoots(projectRoot: string, roots: Record<string, Pick<TerraformRootConfig, "dir" | "varFiles">>, changedFiles: readonly string[]): string[];
|
|
31
|
+
export declare function changedRoots(projectRoot: string, roots: Record<string, Pick<TerraformRootConfig, "dir" | "varFiles">>, changedFiles: readonly string[], binary?: string): string[];
|
|
30
32
|
//# sourceMappingURL=changed-roots.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changed-roots.d.ts","sourceRoot":"","sources":["../src/changed-roots.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"changed-roots.d.ts","sourceRoot":"","sources":["../src/changed-roots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAkCpD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,GAAG,UAAU,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAalI;AAQD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,GAAG,UAAU,CAAC,CAAC,EACpE,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,EAAE,CAQV"}
|