@intentius/chant-lexicon-terraform 0.124.52 → 0.124.55
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 +14 -10
- 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/ci-setup.d.ts +11 -0
- package/dist/ci-setup.d.ts.map +1 -0
- package/dist/ci-setup.js +41 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +4 -3
- package/dist/components/capability-plugin.d.ts +105 -9
- package/dist/components/capability-plugin.d.ts.map +1 -1
- package/dist/components/capability-plugin.js +357 -36
- 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/components/release-inputs.d.ts +29 -0
- package/dist/components/release-inputs.d.ts.map +1 -0
- package/dist/components/release-inputs.js +57 -0
- package/dist/components/trace-facts.d.ts +16 -0
- package/dist/components/trace-facts.d.ts.map +1 -0
- package/dist/components/trace-facts.js +19 -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/cone.d.ts +53 -0
- package/dist/cone.d.ts.map +1 -0
- package/dist/cone.js +119 -0
- package/dist/config.d.ts +59 -13
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +43 -9
- package/dist/cost-hold.d.ts +27 -0
- package/dist/cost-hold.d.ts.map +1 -0
- package/dist/cost-hold.js +21 -0
- 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/drift-rows.d.ts +61 -0
- package/dist/drift-rows.d.ts.map +1 -0
- package/dist/drift-rows.js +108 -0
- package/dist/exit-codes.d.ts +55 -0
- package/dist/exit-codes.d.ts.map +1 -0
- package/dist/exit-codes.js +48 -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 +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -2
- package/dist/integrity.json +8 -5
- package/dist/lint/audit-catalog.d.ts.map +1 -1
- package/dist/lint/audit-catalog.js +27 -3
- package/dist/lint/audit-lineage.d.ts +14 -2
- package/dist/lint/audit-lineage.d.ts.map +1 -1
- package/dist/lint/post-synth/index.d.ts.map +1 -1
- package/dist/lint/post-synth/index.js +4 -0
- package/dist/lint/post-synth/record-store.d.ts +54 -0
- package/dist/lint/post-synth/record-store.d.ts.map +1 -0
- package/dist/lint/post-synth/record-store.js +104 -0
- package/dist/lint/post-synth/tf001.d.ts +2 -2
- package/dist/lint/post-synth/tf001.js +2 -2
- package/dist/lint/post-synth/tf024.d.ts +35 -11
- package/dist/lint/post-synth/tf024.d.ts.map +1 -1
- package/dist/lint/post-synth/tf024.js +92 -20
- package/dist/lint/post-synth/tf046.d.ts +64 -0
- package/dist/lint/post-synth/tf046.d.ts.map +1 -0
- package/dist/lint/post-synth/tf046.js +175 -0
- package/dist/lint/post-synth/tf047.d.ts +36 -0
- package/dist/lint/post-synth/tf047.d.ts.map +1 -0
- package/dist/lint/post-synth/tf047.js +94 -0
- 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/lock-rows.d.ts +36 -0
- package/dist/lock-rows.d.ts.map +1 -0
- package/dist/lock-rows.js +60 -0
- package/dist/lock-timeout.d.ts +22 -0
- package/dist/lock-timeout.d.ts.map +1 -0
- package/dist/lock-timeout.js +32 -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/module-catalog/index.d.ts +69 -0
- package/dist/module-catalog/index.d.ts.map +1 -0
- package/dist/module-catalog/index.js +110 -0
- package/dist/module-catalog/refresh-cli.d.ts +4 -0
- package/dist/module-catalog/refresh-cli.d.ts.map +1 -0
- package/dist/module-catalog/refresh-cli.js +64 -0
- package/dist/module-catalog/static-tier.d.ts +6 -0
- package/dist/module-catalog/static-tier.d.ts.map +1 -0
- package/dist/module-catalog/static-tier.js +1650 -0
- package/dist/module-catalog/types.d.ts +65 -0
- package/dist/module-catalog/types.d.ts.map +1 -0
- package/dist/module-catalog/types.js +33 -0
- package/dist/okf/index.md +3 -1
- package/dist/okf/rules/TF024.md +2 -2
- package/dist/okf/rules/TF046.md +11 -0
- package/dist/okf/rules/TF047.md +11 -0
- 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 +182 -5
- package/dist/op/activities/terraform.d.ts.map +1 -1
- package/dist/op/activities/terraform.js +224 -24
- 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/consumers.d.ts +35 -0
- package/dist/pin/consumers.d.ts.map +1 -0
- package/dist/pin/consumers.js +70 -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 +37 -18
- package/dist/registry/address.d.ts +63 -0
- package/dist/registry/address.d.ts.map +1 -0
- package/dist/registry/address.js +65 -0
- package/dist/registry/catalog-read.d.ts +14 -0
- package/dist/registry/catalog-read.d.ts.map +1 -0
- package/dist/registry/catalog-read.js +58 -0
- package/dist/registry/deprecated.d.ts +37 -0
- package/dist/registry/deprecated.d.ts.map +1 -0
- package/dist/registry/deprecated.js +43 -0
- package/dist/registry/docs.d.ts +96 -0
- package/dist/registry/docs.d.ts.map +1 -0
- package/dist/registry/docs.js +210 -0
- package/dist/registry/edge/edge.d.ts +46 -0
- package/dist/registry/edge/edge.d.ts.map +1 -0
- package/dist/registry/edge/edge.js +194 -0
- package/dist/registry/edge/index.d.ts +11 -0
- package/dist/registry/edge/index.d.ts.map +1 -0
- package/dist/registry/edge/index.js +10 -0
- package/dist/registry/edge/lambda-edge.d.ts +76 -0
- package/dist/registry/edge/lambda-edge.d.ts.map +1 -0
- package/dist/registry/edge/lambda-edge.js +95 -0
- package/dist/registry/edge/sigv4-web.d.ts +33 -0
- package/dist/registry/edge/sigv4-web.d.ts.map +1 -0
- package/dist/registry/edge/sigv4-web.js +56 -0
- package/dist/registry/edge/token-source.d.ts +73 -0
- package/dist/registry/edge/token-source.d.ts.map +1 -0
- package/dist/registry/edge/token-source.js +115 -0
- package/dist/registry/edge/worker.d.ts +45 -0
- package/dist/registry/edge/worker.d.ts.map +1 -0
- package/dist/registry/edge/worker.js +26 -0
- package/dist/registry/handler.d.ts +25 -0
- package/dist/registry/handler.d.ts.map +1 -0
- package/dist/registry/handler.js +75 -0
- package/dist/registry/headers-file.d.ts +21 -0
- package/dist/registry/headers-file.d.ts.map +1 -0
- package/dist/registry/headers-file.js +57 -0
- package/dist/registry/index.d.ts +31 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +30 -0
- package/dist/registry/mirror-paths.d.ts +9 -0
- package/dist/registry/mirror-paths.d.ts.map +1 -0
- package/dist/registry/mirror-paths.js +8 -0
- package/dist/registry/mirror.d.ts +130 -0
- package/dist/registry/mirror.d.ts.map +1 -0
- package/dist/registry/mirror.js +319 -0
- package/dist/registry/proxies.d.ts +73 -0
- package/dist/registry/proxies.d.ts.map +1 -0
- package/dist/registry/proxies.js +111 -0
- package/dist/registry/reader.d.ts +57 -0
- package/dist/registry/reader.d.ts.map +1 -0
- package/dist/registry/reader.js +198 -0
- package/dist/registry/semver.d.ts +16 -0
- package/dist/registry/semver.d.ts.map +1 -0
- package/dist/registry/semver.js +24 -0
- package/dist/registry/serve.d.ts +24 -0
- package/dist/registry/serve.d.ts.map +1 -0
- package/dist/registry/serve.js +64 -0
- package/dist/registry/source-forms.d.ts +79 -0
- package/dist/registry/source-forms.d.ts.map +1 -0
- package/dist/registry/source-forms.js +202 -0
- package/dist/registry/targets/artifactory.d.ts +28 -0
- package/dist/registry/targets/artifactory.d.ts.map +1 -0
- package/dist/registry/targets/artifactory.js +206 -0
- package/dist/registry/targets/fake-artifactory.d.ts +30 -0
- package/dist/registry/targets/fake-artifactory.d.ts.map +1 -0
- package/dist/registry/targets/fake-artifactory.js +142 -0
- package/dist/registry/targets/fake-gitlab.d.ts +39 -0
- package/dist/registry/targets/fake-gitlab.d.ts.map +1 -0
- package/dist/registry/targets/fake-gitlab.js +136 -0
- package/dist/registry/targets/fake-hcp.d.ts +50 -0
- package/dist/registry/targets/fake-hcp.d.ts.map +1 -0
- package/dist/registry/targets/fake-hcp.js +202 -0
- package/dist/registry/targets/fake-http.d.ts +31 -0
- package/dist/registry/targets/fake-http.d.ts.map +1 -0
- package/dist/registry/targets/fake-http.js +87 -0
- package/dist/registry/targets/fake-nexus.d.ts +27 -0
- package/dist/registry/targets/fake-nexus.d.ts.map +1 -0
- package/dist/registry/targets/fake-nexus.js +137 -0
- package/dist/registry/targets/gitlab.d.ts +53 -0
- package/dist/registry/targets/gitlab.d.ts.map +1 -0
- package/dist/registry/targets/gitlab.js +187 -0
- package/dist/registry/targets/hcp.d.ts +29 -0
- package/dist/registry/targets/hcp.d.ts.map +1 -0
- package/dist/registry/targets/hcp.js +310 -0
- package/dist/registry/targets/hosted.d.ts +62 -0
- package/dist/registry/targets/hosted.d.ts.map +1 -0
- package/dist/registry/targets/hosted.js +74 -0
- package/dist/registry/targets/index.d.ts +18 -0
- package/dist/registry/targets/index.d.ts.map +1 -0
- package/dist/registry/targets/index.js +17 -0
- package/dist/registry/targets/module-target.d.ts +68 -0
- package/dist/registry/targets/module-target.d.ts.map +1 -0
- package/dist/registry/targets/module-target.js +63 -0
- package/dist/registry/targets/nexus.d.ts +43 -0
- package/dist/registry/targets/nexus.d.ts.map +1 -0
- package/dist/registry/targets/nexus.js +250 -0
- package/dist/registry/targets/zip.d.ts +55 -0
- package/dist/registry/targets/zip.d.ts.map +1 -0
- package/dist/registry/targets/zip.js +278 -0
- package/dist/registry/writer.d.ts +101 -0
- package/dist/registry/writer.d.ts.map +1 -0
- package/dist/registry/writer.js +109 -0
- package/dist/report.d.ts +15 -6
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +28 -55
- package/dist/rules/record-store.ts +122 -0
- package/dist/rules/tf001.ts +2 -2
- package/dist/rules/tf024.ts +105 -22
- package/dist/rules/tf046.ts +204 -0
- package/dist/rules/tf047.ts +114 -0
- package/dist/skills/chant-terraform.md +1 -1
- package/dist/state/azure-blob.d.ts +9 -0
- package/dist/state/azure-blob.d.ts.map +1 -0
- package/dist/state/azure-blob.js +8 -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 +8 -0
- package/dist/state/gcs.d.ts.map +1 -0
- package/dist/state/gcs.js +7 -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 +8 -0
- package/dist/state/object-store.d.ts.map +1 -0
- package/dist/state/object-store.js +7 -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 +21 -0
- package/dist/state/s3.d.ts.map +1 -0
- package/dist/state/s3.js +19 -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/state-ops.d.ts +255 -0
- package/dist/state-ops.d.ts.map +1 -0
- package/dist/state-ops.js +305 -0
- package/dist/state-reads.d.ts +57 -0
- package/dist/state-reads.d.ts.map +1 -0
- package/dist/state-reads.js +104 -0
- package/dist/terragrunt/affected.d.ts.map +1 -1
- package/dist/terragrunt/affected.js +2 -1
- package/dist/used-sources.d.ts +54 -0
- package/dist/used-sources.d.ts.map +1 -0
- package/dist/used-sources.js +157 -0
- package/package.json +24 -4
- 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 +16 -0
- package/src/__fixtures__/drift-record/live-plan-sections.json +27 -0
- package/src/__fixtures__/drift-rows/live-root-plan.json +70 -0
- package/src/__fixtures__/drift-rows/refresh-plan.json +61 -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/__fixtures__/used-sources/root/extra.tofu +1 -0
- package/src/__fixtures__/used-sources/root/main.tf +31 -0
- package/src/__fixtures__/used-sources/root/modules/net/main.tf +14 -0
- package/src/__fixtures__/used-sources/root/modules/net/versions.tf.json +7 -0
- package/src/__fixtures__/used-sources/unit/terragrunt.hcl +3 -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/ci-setup.ts +42 -0
- package/src/commands.ts +4 -3
- package/src/components/capability-plugin.test.ts +198 -19
- package/src/components/capability-plugin.ts +383 -35
- 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 +113 -57
- package/src/components/release-inputs.ts +69 -0
- package/src/components/trace-facts.test.ts +21 -0
- package/src/components/trace-facts.ts +27 -0
- 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/cone.ts +138 -0
- package/src/config-file-listers.test.ts +265 -0
- package/src/config.ts +44 -9
- package/src/cost-hold.ts +29 -0
- package/src/describe-resources.engine-facts.test.ts +411 -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/drift-rows.test.ts +135 -0
- package/src/drift-rows.ts +137 -0
- package/src/exit-codes.test.ts +23 -0
- package/src/exit-codes.ts +59 -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 +79 -0
- package/src/lint/audit-catalog.ts +29 -3
- package/src/lint/audit-lineage.ts +14 -2
- package/src/lint/post-synth/fixtures/TF024/live-with-record-store/main.tf +18 -0
- package/src/lint/post-synth/fixtures/TF024/sidecar-with-backend/estate.chdf.hcl +1 -0
- package/src/lint/post-synth/fixtures/TF024/sidecar-with-backend/main.tf +10 -0
- package/src/lint/post-synth/fixtures/TF046/azurerm-no-resource-group/main.tf +15 -0
- package/src/lint/post-synth/fixtures/TF046/backend-config-only/main.tf +14 -0
- package/src/lint/post-synth/fixtures/TF046/derived-s3/backend.tf +7 -0
- package/src/lint/post-synth/fixtures/TF046/derived-s3/main.tf +9 -0
- package/src/lint/post-synth/fixtures/TF046/explicit-local/main.tf +16 -0
- package/src/lint/post-synth/fixtures/TF046/explicit-s3-beside-local-backend/main.tf +15 -0
- package/src/lint/post-synth/fixtures/TF046/implied-local/main.tf +9 -0
- package/src/lint/post-synth/fixtures/TF046/sidecar-implied/estate.chdf.hcl +1 -0
- package/src/lint/post-synth/fixtures/TF046/sidecar-implied/main.tf +5 -0
- package/src/lint/post-synth/fixtures/TF047/clear/main.tf +12 -0
- package/src/lint/post-synth/fixtures/TF047/refused/main.tf +12 -0
- package/src/lint/post-synth/fixtures/TF047/unknown-module/main.tf +12 -0
- package/src/lint/post-synth/fixtures/TF047/unknown-version/main.tf +12 -0
- package/src/lint/post-synth/index.ts +4 -0
- package/src/lint/post-synth/record-store.ts +122 -0
- package/src/lint/post-synth/tf001.ts +2 -2
- package/src/lint/post-synth/tf024.test.ts +26 -5
- package/src/lint/post-synth/tf024.ts +105 -22
- package/src/lint/post-synth/tf046.test.ts +137 -0
- package/src/lint/post-synth/tf046.ts +204 -0
- package/src/lint/post-synth/tf047.test.ts +56 -0
- package/src/lint/post-synth/tf047.ts +114 -0
- package/src/live-plan-reasons.ts +54 -0
- package/src/lock-rows.test.ts +70 -0
- package/src/lock-rows.ts +82 -0
- package/src/lock-timeout.ts +34 -0
- package/src/lsp/completions.test.ts +1 -1
- package/src/lsp/option-keys.ts +2 -0
- package/src/module-catalog/index.test.ts +93 -0
- package/src/module-catalog/index.ts +159 -0
- package/src/module-catalog/refresh-cli.ts +68 -0
- package/src/module-catalog/static-tier.ts +1659 -0
- package/src/module-catalog/types.ts +88 -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 +312 -27
- 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/op-wave-step.test.ts +109 -0
- package/src/pin/__fixtures__/consumers/live/dev/main.tf +4 -0
- package/src/pin/__fixtures__/consumers/live/prod/main.tf +21 -0
- package/src/pin/__fixtures__/consumers/units/vpc/terragrunt.hcl +7 -0
- package/src/pin/bundle.test.ts +2 -0
- package/src/pin/consumers.test.ts +57 -0
- package/src/pin/consumers.ts +95 -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 +39 -19
- package/src/registry/__fixtures__/docs/documented/.terraform-docs.yml +3 -0
- package/src/registry/__fixtures__/docs/documented/README.md +1 -0
- package/src/registry/__fixtures__/docs/documented/main.tf +8 -0
- package/src/registry/__fixtures__/docs/json/main.tf.json +14 -0
- package/src/registry/__fixtures__/docs/vpc/README.md +3 -0
- package/src/registry/__fixtures__/docs/vpc/examples/complete/main.tf +5 -0
- package/src/registry/__fixtures__/docs/vpc/examples/simple/README.md +1 -0
- package/src/registry/__fixtures__/docs/vpc/examples/simple/main.tf +4 -0
- package/src/registry/__fixtures__/docs/vpc/main.tf +14 -0
- package/src/registry/__fixtures__/docs/vpc/outputs.tf +9 -0
- package/src/registry/__fixtures__/docs/vpc/variables.tf +16 -0
- package/src/registry/__fixtures__/proxied-root/main.tf +12 -0
- package/src/registry/address.ts +100 -0
- package/src/registry/catalog-read.ts +56 -0
- package/src/registry/deprecated.test.ts +139 -0
- package/src/registry/deprecated.ts +76 -0
- package/src/registry/docs.test.ts +140 -0
- package/src/registry/docs.ts +299 -0
- package/src/registry/edge/bundle.test.ts +50 -0
- package/src/registry/edge/edge.test.ts +176 -0
- package/src/registry/edge/edge.ts +211 -0
- package/src/registry/edge/index.ts +10 -0
- package/src/registry/edge/lambda-edge.ts +127 -0
- package/src/registry/edge/sigv4-web.ts +79 -0
- package/src/registry/edge/token-source.test.ts +258 -0
- package/src/registry/edge/token-source.ts +169 -0
- package/src/registry/edge/worker.ts +61 -0
- package/src/registry/handler.ts +89 -0
- package/src/registry/headers-file.ts +61 -0
- package/src/registry/index.ts +31 -0
- package/src/registry/mirror-paths.ts +10 -0
- package/src/registry/mirror.test.ts +198 -0
- package/src/registry/mirror.ts +395 -0
- package/src/registry/proxies.test.ts +153 -0
- package/src/registry/proxies.ts +132 -0
- package/src/registry/reader.ts +225 -0
- package/src/registry/registry.test.ts +262 -0
- package/src/registry/semver.ts +34 -0
- package/src/registry/serve.ts +82 -0
- package/src/registry/source-forms.test.ts +87 -0
- package/src/registry/source-forms.ts +216 -0
- package/src/registry/targets/artifactory.test.ts +248 -0
- package/src/registry/targets/artifactory.ts +257 -0
- package/src/registry/targets/fake-artifactory.ts +158 -0
- package/src/registry/targets/fake-gitlab.ts +161 -0
- package/src/registry/targets/fake-hcp.ts +233 -0
- package/src/registry/targets/fake-http.ts +97 -0
- package/src/registry/targets/fake-nexus.ts +152 -0
- package/src/registry/targets/gitlab.test.ts +208 -0
- package/src/registry/targets/gitlab.ts +223 -0
- package/src/registry/targets/hcp.test.ts +230 -0
- package/src/registry/targets/hcp.ts +360 -0
- package/src/registry/targets/hosted.ts +117 -0
- package/src/registry/targets/index.ts +17 -0
- package/src/registry/targets/module-target.ts +131 -0
- package/src/registry/targets/nexus.test.ts +220 -0
- package/src/registry/targets/nexus.ts +314 -0
- package/src/registry/targets/zip.test.ts +65 -0
- package/src/registry/targets/zip.ts +287 -0
- package/src/registry/writer.ts +155 -0
- package/src/report.test.ts +82 -1
- package/src/report.ts +31 -54
- package/src/signal-only-root.test.ts +72 -0
- package/src/skills/chant-terraform.md +1 -1
- package/src/state/azure-blob.ts +8 -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 +7 -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 +7 -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 +21 -0
- package/src/state/store.ts +225 -0
- package/src/state-ops.test.ts +182 -0
- package/src/state-ops.ts +462 -0
- package/src/state-reads.ts +116 -0
- package/src/terragrunt/affected.ts +2 -1
- package/src/used-sources.test.ts +75 -0
- package/src/used-sources.ts +204 -0
- 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
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every module source and provider address a root uses (chant#3924), read
|
|
3
|
+
* from its files before `init` downloads anything, so a product can check
|
|
4
|
+
* them against an allow list (terragucci's `sources:`) or a proxy map
|
|
5
|
+
* (chant#4606) in a check job.
|
|
6
|
+
*
|
|
7
|
+
* For a root and, with `followLocal`, each local module it calls (`./` and
|
|
8
|
+
* `../`, followed down to the modules they call), it reads each `module`
|
|
9
|
+
* block's `source`, each `required_providers` entry, and the providers a
|
|
10
|
+
* module uses with no entry: a `provider` block, or a resource, data or
|
|
11
|
+
* ephemeral block's `provider` argument or type prefix, which `init` installs
|
|
12
|
+
* as `hashicorp/<name>`. In the root itself it also reads a Terragrunt unit's
|
|
13
|
+
* `terraform { source }`. Files are `.tf`, `.tofu` and their `.json` forms;
|
|
14
|
+
* `binary` narrows them to the set that binary reads, with OpenTofu's rule
|
|
15
|
+
* that `x.tofu` hides `x.tf`.
|
|
16
|
+
*
|
|
17
|
+
* Each source carries its file and its block path from the root
|
|
18
|
+
* (`module.a > module.b > required_providers.x`) and its normal form
|
|
19
|
+
* (./registry/source-forms.ts). A local call that cannot be followed
|
|
20
|
+
* (outside the project, or missing) is named in `unread`, since what it
|
|
21
|
+
* uses cannot be read.
|
|
22
|
+
*/
|
|
23
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
24
|
+
import { join, posix, relative, sep } from "node:path";
|
|
25
|
+
import { loadHcl2json } from "@intentius/chant/terraform/hcl2json";
|
|
26
|
+
import { isJsonConfigFile, jsonConfigTree, selectConfigFiles } from "./hcl/files.js";
|
|
27
|
+
import { impliedProvider, normalizeModuleSource, providerAddress, withoutQuery } from "./registry/source-forms.js";
|
|
28
|
+
/** A block list as hcl2json writes it (an array) or a JSON file may (one object). */
|
|
29
|
+
const bodies = (v) => (Array.isArray(v) ? v : v && typeof v === "object" ? [v] : []);
|
|
30
|
+
const ALL_SUFFIXES = [".tf", ".tofu", ".tf.json", ".tofu.json"];
|
|
31
|
+
/** The configuration files of one module directory, plus terragrunt.hcl when `terragrunt`. */
|
|
32
|
+
function moduleFiles(dir, terragrunt, binary) {
|
|
33
|
+
if (!existsSync(dir) || !statSync(dir).isDirectory())
|
|
34
|
+
return [];
|
|
35
|
+
const names = readdirSync(dir).filter((n) => {
|
|
36
|
+
try {
|
|
37
|
+
return statSync(join(dir, n)).isFile();
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
const config = binary ? selectConfigFiles(names, binary) : names.filter((n) => ALL_SUFFIXES.some((s) => n.endsWith(s))).sort();
|
|
44
|
+
return terragrunt && names.includes("terragrunt.hcl") ? [...config, "terragrunt.hcl"] : config;
|
|
45
|
+
}
|
|
46
|
+
/** The local name of the provider a resource, data or ephemeral block uses: its `provider` argument's, else its type's prefix. */
|
|
47
|
+
function providerOf(type, body) {
|
|
48
|
+
const ref = typeof body.provider === "string" ? /^(?:\$\{)?([A-Za-z][A-Za-z0-9_-]*)/.exec(body.provider) : null;
|
|
49
|
+
return ref ? ref[1] : type.split("_")[0];
|
|
50
|
+
}
|
|
51
|
+
const isLocal = (source) => /^\.\.?\//.test(source);
|
|
52
|
+
async function readDir(abs, shown, prefix, top, o) {
|
|
53
|
+
const providers = [];
|
|
54
|
+
const calls = [];
|
|
55
|
+
const declared = new Set();
|
|
56
|
+
const implied = new Map();
|
|
57
|
+
const provider = (file, block, source, what) => ({
|
|
58
|
+
kind: "provider",
|
|
59
|
+
file,
|
|
60
|
+
block,
|
|
61
|
+
source,
|
|
62
|
+
normal: providerAddress(source, { binary: o.binary, proxies: o.proxies }) ?? source.trim().toLowerCase(),
|
|
63
|
+
...(what ? { implied: what } : {}),
|
|
64
|
+
});
|
|
65
|
+
for (const name of moduleFiles(abs, top, o.binary)) {
|
|
66
|
+
const file = shown === "." ? name : posix.join(shown, name);
|
|
67
|
+
const text = readFileSync(join(abs, name), "utf-8");
|
|
68
|
+
let tree;
|
|
69
|
+
try {
|
|
70
|
+
tree = (isJsonConfigFile(name) ? jsonConfigTree(text) : await o.parser.parse(file, text));
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
throw new Error(`${file} could not be read (${e.message.split("\n")[0]}), so its module and provider sources are unknown`);
|
|
74
|
+
}
|
|
75
|
+
if (name === "terragrunt.hcl") {
|
|
76
|
+
for (const b of bodies(tree.terraform))
|
|
77
|
+
if (typeof b.source === "string")
|
|
78
|
+
calls.push({ file, block: `${prefix}terraform`, source: b.source });
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
for (const [call, list] of Object.entries(tree.module ?? {})) {
|
|
82
|
+
for (const b of bodies(list))
|
|
83
|
+
if (typeof b.source === "string")
|
|
84
|
+
calls.push({ file, block: `${prefix}module.${call}`, source: b.source });
|
|
85
|
+
}
|
|
86
|
+
for (const t of bodies(tree.terraform)) {
|
|
87
|
+
for (const req of bodies(t.required_providers)) {
|
|
88
|
+
for (const [local, v] of Object.entries(req)) {
|
|
89
|
+
declared.add(local);
|
|
90
|
+
const source = v && typeof v === "object" && typeof v.source === "string" ? v.source : `hashicorp/${local}`;
|
|
91
|
+
providers.push(provider(file, `${prefix}required_providers.${local}`, source));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
for (const local of Object.keys(tree.provider ?? {}))
|
|
96
|
+
if (!implied.has(local))
|
|
97
|
+
implied.set(local, { file, what: `provider "${local}"` });
|
|
98
|
+
for (const kind of ["resource", "data", "ephemeral"]) {
|
|
99
|
+
for (const [type, named] of Object.entries(tree[kind] ?? {})) {
|
|
100
|
+
for (const [name, list] of Object.entries(named ?? {})) {
|
|
101
|
+
for (const b of bodies(list)) {
|
|
102
|
+
const local = providerOf(type, b);
|
|
103
|
+
if (!implied.has(local))
|
|
104
|
+
implied.set(local, { file, what: `${kind} "${type}" "${name}"` });
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
for (const [local, at] of implied) {
|
|
111
|
+
const source = declared.has(local) ? undefined : impliedProvider(local);
|
|
112
|
+
if (source)
|
|
113
|
+
providers.push(provider(at.file, `${prefix}provider.${local}`, source, at.what));
|
|
114
|
+
}
|
|
115
|
+
return { providers, calls };
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Every module source and provider address the root at `dir` uses, and each
|
|
119
|
+
* local call that could not be followed. Throws, naming the file, when a
|
|
120
|
+
* file cannot be parsed, so a check fails loudly instead of checking less.
|
|
121
|
+
*/
|
|
122
|
+
export async function usedSources(dir, options = {}) {
|
|
123
|
+
const project = options.project ?? dir;
|
|
124
|
+
const o = { ...options, parser: options.parser ?? (await loadHcl2json()) };
|
|
125
|
+
const follow = options.followLocal !== false;
|
|
126
|
+
const used = [];
|
|
127
|
+
const unread = [];
|
|
128
|
+
const shownOf = (abs) => relative(project, abs).split(sep).join("/") || ".";
|
|
129
|
+
const walk = async (rel, prefix, chain, top) => {
|
|
130
|
+
const { providers, calls } = await readDir(join(project, rel), rel, prefix, top, o);
|
|
131
|
+
used.push(...providers);
|
|
132
|
+
for (const c of calls) {
|
|
133
|
+
used.push({ kind: "module", file: c.file, block: c.block, source: c.source, normal: isLocal(c.source) ? withoutQuery(c.source) : normalizeModuleSource(withoutQuery(c.source), { binary: o.binary, proxies: o.proxies }) });
|
|
134
|
+
if (!follow || !isLocal(c.source))
|
|
135
|
+
continue;
|
|
136
|
+
// A Terragrunt source's `//` marks the directory it copies; the module is the path with it read as one `/`.
|
|
137
|
+
const path = withoutQuery(c.source).replace(/\/\/+/g, "/");
|
|
138
|
+
const next = posix.normalize(posix.join(rel, path)).replace(/\/+$/, "") || ".";
|
|
139
|
+
if (next === ".." || next.startsWith("../")) {
|
|
140
|
+
unread.push({ file: c.file, block: c.block, source: c.source, why: "it is outside the project, so the sources it uses cannot be read" });
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (!existsSync(join(project, next))) {
|
|
144
|
+
unread.push({ file: c.file, block: c.block, source: c.source, why: `${next} does not exist, so the sources it uses cannot be read` });
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (chain.includes(next) || moduleFiles(join(project, next), false, o.binary).length === 0)
|
|
148
|
+
continue;
|
|
149
|
+
await walk(next, `${c.block} > `, [...chain, next], false);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
const start = shownOf(dir);
|
|
153
|
+
if (start === ".." || start.startsWith("../"))
|
|
154
|
+
throw new Error(`${dir} is outside the project ${project}`);
|
|
155
|
+
await walk(start, "", [start], true);
|
|
156
|
+
return { used, unread };
|
|
157
|
+
}
|
package/package.json
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentius/chant-lexicon-terraform",
|
|
3
|
-
"version": "0.124.
|
|
3
|
+
"version": "0.124.55",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"src/",
|
|
7
7
|
"dist/",
|
|
8
|
-
"schemas/",
|
|
9
8
|
"workspace-kinds.json"
|
|
10
9
|
],
|
|
11
10
|
"exports": {
|
|
@@ -35,11 +34,31 @@
|
|
|
35
34
|
"types": "./dist/pin/index.d.ts",
|
|
36
35
|
"default": "./dist/pin/index.js"
|
|
37
36
|
},
|
|
37
|
+
"./module-catalog": {
|
|
38
|
+
"development": "./src/module-catalog/index.ts",
|
|
39
|
+
"types": "./dist/module-catalog/index.d.ts",
|
|
40
|
+
"default": "./dist/module-catalog/index.js"
|
|
41
|
+
},
|
|
38
42
|
"./terragrunt": {
|
|
39
43
|
"development": "./src/terragrunt/index.ts",
|
|
40
44
|
"types": "./dist/terragrunt/index.d.ts",
|
|
41
45
|
"default": "./dist/terragrunt/index.js"
|
|
42
46
|
},
|
|
47
|
+
"./state": {
|
|
48
|
+
"development": "./src/state/index.ts",
|
|
49
|
+
"types": "./dist/state/index.d.ts",
|
|
50
|
+
"default": "./dist/state/index.js"
|
|
51
|
+
},
|
|
52
|
+
"./registry": {
|
|
53
|
+
"development": "./src/registry/index.ts",
|
|
54
|
+
"types": "./dist/registry/index.d.ts",
|
|
55
|
+
"default": "./dist/registry/index.js"
|
|
56
|
+
},
|
|
57
|
+
"./registry/edge": {
|
|
58
|
+
"development": "./src/registry/edge/index.ts",
|
|
59
|
+
"types": "./dist/registry/edge/index.d.ts",
|
|
60
|
+
"default": "./dist/registry/edge/index.js"
|
|
61
|
+
},
|
|
43
62
|
"./lint/post-synth": {
|
|
44
63
|
"development": "./src/lint/post-synth/index.ts",
|
|
45
64
|
"types": "./dist/lint/post-synth/index.d.ts",
|
|
@@ -55,7 +74,8 @@
|
|
|
55
74
|
"docs": "npx tsx src/codegen/docs-cli.ts",
|
|
56
75
|
"build": "../../scripts/tsc7.sh -p tsconfig.build.json --sourceMap false && tsc-alias -p tsconfig.build.json",
|
|
57
76
|
"prepack": "npm run generate && npm run bundle && npm run validate && npm run build",
|
|
58
|
-
"bundle": "tsx src/package-cli.ts"
|
|
77
|
+
"bundle": "tsx src/package-cli.ts",
|
|
78
|
+
"module-catalog:refresh": "npx tsx src/module-catalog/refresh-cli.ts"
|
|
59
79
|
},
|
|
60
80
|
"devDependencies": {
|
|
61
81
|
"@cdktn/hcl2json": "^0.24.0",
|
|
@@ -68,7 +88,7 @@
|
|
|
68
88
|
"access": "public"
|
|
69
89
|
},
|
|
70
90
|
"peerDependencies": {
|
|
71
|
-
"@intentius/chant": "^0.124.
|
|
91
|
+
"@intentius/chant": "^0.124.55",
|
|
72
92
|
"zod": "^4.3.6"
|
|
73
93
|
},
|
|
74
94
|
"description": "terraform lexicon for chant, existing Terraform root modules as declarable entities",
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
# What the gated acceptance suites have actually run against
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Eleven `describe` blocks across eight files run this lexicon against a real
|
|
4
4
|
binary rather than a fixture, and every one of them skips rather than fails
|
|
5
5
|
when its dependency is absent. A skip is silent by design, so without this
|
|
6
6
|
file nothing in the tree says which of them has ever passed, against what, or
|
|
7
7
|
when. The evidence had been living in PR prose (`#2157` for the live apply
|
|
8
8
|
pair), which no reader of the suite can see.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
Ten sections below cover the eleven blocks, one section per block except
|
|
11
|
+
section 6, where `plan-read.acceptance.test.ts`'s per-binary loop makes two
|
|
12
|
+
blocks of one body. Each section says what the block proves, what gates it,
|
|
13
|
+
the command, and the last binary and emulator it is known to have passed
|
|
14
|
+
against, or "not recorded" when no run has been written down yet.
|
|
12
15
|
|
|
13
16
|
`live-estate/README.md` next door is the sibling record for the two recorded
|
|
14
17
|
documents (`../live-plan.json`, `../live-ls.json`) rather than for a suite,
|
|
@@ -31,7 +34,7 @@ same recipe one tag back
|
|
|
31
34
|
`live/smoke/docker-compose.yml` and exported as
|
|
32
35
|
`CHOUDOUFU_EMULATOR_ENDPOINT=http://localhost:<mapped port>`.
|
|
33
36
|
|
|
34
|
-
## The
|
|
37
|
+
## The eleven blocks
|
|
35
38
|
|
|
36
39
|
### 1. `TerraformApplyOp applies a real root`
|
|
37
40
|
|
|
@@ -52,7 +55,7 @@ npx vitest run lexicons/terraform/src/composites/terraform-apply-op.acceptance.t
|
|
|
52
55
|
Last passed: 2026-09-08, `Terraform v1.15.8` on `darwin_arm64`, with
|
|
53
56
|
`hashicorp/null` resolved from the public registry for the fixture's `~> 3.2`
|
|
54
57
|
constraint. No emulator is involved. Re-run by chant #2241 alongside every
|
|
55
|
-
other block
|
|
58
|
+
other block this file held then, so those four rows come from one run; #2168 had run it
|
|
56
59
|
on 2026-09-07 the same way.
|
|
57
60
|
|
|
58
61
|
### 2. `TerraformApplyOp applies a live root against choudoufu's emulator`
|
|
@@ -172,7 +175,7 @@ path, which is the only thing it exists to prove.
|
|
|
172
175
|
|
|
173
176
|
### 5. `TerraformAdoptOp reaches its gate on a checkout that has never run init`
|
|
174
177
|
|
|
175
|
-
Same file,
|
|
178
|
+
Same file, second block (#2302). One test: build `TerraformAdoptOp` and drive
|
|
176
179
|
it through `runOpLocally`, exactly as the apply Op's own acceptance suite
|
|
177
180
|
does, over a project this test creates fresh and never initializes by hand —
|
|
178
181
|
no `terraformInit` call anywhere in the block. The Op's own Init phase is what
|
|
@@ -215,7 +218,8 @@ With the Init phase back, the same run reaches its gate:
|
|
|
215
218
|
|
|
216
219
|
`../plan-read.acceptance.test.ts`, one block per binary, three tests each, over
|
|
217
220
|
the `plan-read/` fixture (built-in `terraform_data`, `local` backend, so no
|
|
218
|
-
registry, no network and no credentials).
|
|
221
|
+
registry, no network and no credentials). Four tests each now; the run recorded
|
|
222
|
+
below had three, before #4372 added the planned-create test. The first reads the plan depth
|
|
219
223
|
through `describeResources` and checks the IR attributes, `sources` reading
|
|
220
224
|
`"plan"`, no secret in the result, nothing new or changed in the root, and no
|
|
221
225
|
`chant-terraform-plan-*` directory left in the temp dir. The second holds the
|
|
@@ -263,6 +267,64 @@ by chant #4371. Proved red the same day: with `plan-observation.ts`'s
|
|
|
263
267
|
redaction put back to flagging each side by its own marks, the old secret
|
|
264
268
|
came through as `tags.token`'s `before`.
|
|
265
269
|
|
|
270
|
+
### 8. `Terragrunt units against a real terragrunt`
|
|
271
|
+
|
|
272
|
+
`terragrunt/terragrunt.acceptance.test.ts` (#3414), four tests over the
|
|
273
|
+
`terragrunt/five-units/` fixture (implicit stacks, `terraform_data` only,
|
|
274
|
+
local state under the copied fixture, so no provider download and no cloud).
|
|
275
|
+
It checks that `terragrunt` is 1.1 or later, that `discoverTerragruntUnits`
|
|
276
|
+
lists what `terragrunt find` lists less the catalog template, that each of the
|
|
277
|
+
three waves plans and applies exactly its own units and that the run report's
|
|
278
|
+
per-unit results reach the change set with no input carrying a mock, and that
|
|
279
|
+
a wave keeps to its units when a `.terragrunt-filters` file selects more.
|
|
280
|
+
|
|
281
|
+
Gated on `terragrunt` and `tofu` on PATH.
|
|
282
|
+
|
|
283
|
+
```
|
|
284
|
+
npx vitest run lexicons/terraform/src/terragrunt/terragrunt.acceptance.test.ts
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Last passed: not recorded. No run of this block has been written down; the
|
|
288
|
+
maintainer records the first one here (maintainer run).
|
|
289
|
+
|
|
290
|
+
### 9. `mock outputs in Terragrunt waves against a real terragrunt`
|
|
291
|
+
|
|
292
|
+
`terragrunt/mocks.acceptance.test.ts` (#3416), one test over the same
|
|
293
|
+
`five-units/` fixture. Wave 2 is refused until wave 1 has applied, naming each
|
|
294
|
+
upstream and planning nothing. A provisional plan of wave 2 made before that
|
|
295
|
+
reads the mocks, is marked provisional, matches Terragrunt's own mock warning,
|
|
296
|
+
and is refused at apply. Once wave 1 applies, wave 2 plans on the real
|
|
297
|
+
upstream values and applies.
|
|
298
|
+
|
|
299
|
+
Gated on `terragrunt` and `tofu` on PATH.
|
|
300
|
+
|
|
301
|
+
```
|
|
302
|
+
npx vitest run lexicons/terraform/src/terragrunt/mocks.acceptance.test.ts
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
Last passed: not recorded. No run of this block has been written down; the
|
|
306
|
+
maintainer records the first one here (maintainer run).
|
|
307
|
+
|
|
308
|
+
### 10. `affected Terragrunt units against a real terragrunt`
|
|
309
|
+
|
|
310
|
+
`terragrunt/affected.acceptance.test.ts` (#3415), over a git copy of the
|
|
311
|
+
`terragrunt/affected/` fixture. One test checks discovery against
|
|
312
|
+
`recorded/affected-find.json`; then one test per case in
|
|
313
|
+
`__fixtures__/terragrunt/affected-cases.ts`, each made as a commit, checks that
|
|
314
|
+
Terragrunt's own `[HEAD~1...HEAD]` filter selects exactly the case's
|
|
315
|
+
`terragrunt` column (nothing, for the three supplements) and that
|
|
316
|
+
`findTerragruntAffected` returns the case's expected units and reasons. Nothing
|
|
317
|
+
is planned.
|
|
318
|
+
|
|
319
|
+
Gated on `terragrunt` and `git` on PATH. It does not need `tofu`.
|
|
320
|
+
|
|
321
|
+
```
|
|
322
|
+
npx vitest run lexicons/terraform/src/terragrunt/affected.acceptance.test.ts
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
Last passed: not recorded. No run of this block has been written down; the
|
|
326
|
+
maintainer records the first one here (maintainer run).
|
|
327
|
+
|
|
266
328
|
## Running everything that can run on a machine with no choudoufu
|
|
267
329
|
|
|
268
330
|
```
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{"@level":"info","@message":"Terraform 1.10.5","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.101000Z","terraform":"1.10.5","type":"version","ui":"1.2"}
|
|
2
|
+
{"@level":"info","@message":"module.net.terraform_data.vpc: Plan to update","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.412000Z","change":{"resource":{"addr":"module.net.terraform_data.vpc","module":"module.net","resource":"terraform_data.vpc","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"vpc","resource_key":null},"action":"update"},"type":"planned_change"}
|
|
3
|
+
{"@level":"info","@message":"module.app.terraform_data.service: Plan to create","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.412100Z","change":{"resource":{"addr":"module.app.terraform_data.service","module":"module.app","resource":"terraform_data.service","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"service","resource_key":null},"action":"create"},"type":"planned_change"}
|
|
4
|
+
{"@level":"info","@message":"module.app.module.logs.terraform_data.group: Plan to create","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.412200Z","change":{"resource":{"addr":"module.app.module.logs.terraform_data.group","module":"module.app.module.logs","resource":"terraform_data.group","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"group","resource_key":null},"action":"create"},"type":"planned_change"}
|
|
5
|
+
{"@level":"info","@message":"module.edge.terraform_data.dns: Plan to update","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.412300Z","change":{"resource":{"addr":"module.edge.terraform_data.dns","module":"module.edge","resource":"terraform_data.dns","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"dns","resource_key":null},"action":"update"},"type":"planned_change"}
|
|
6
|
+
{"@level":"info","@message":"Plan: 2 to add, 2 to change, 0 to destroy.","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.412400Z","changes":{"add":2,"change":2,"import":0,"remove":0,"operation":"apply"},"type":"change_summary"}
|
|
7
|
+
{"@level":"info","@message":"module.net.terraform_data.vpc: Modifying... [id=6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01]","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.520000Z","hook":{"resource":{"addr":"module.net.terraform_data.vpc","module":"module.net","resource":"terraform_data.vpc","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"vpc","resource_key":null},"action":"update","id_key":"id","id_value":"6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01"},"type":"apply_start"}
|
|
8
|
+
{"@level":"info","@message":"module.net.terraform_data.vpc: Modifications complete after 0s [id=6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01]","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.530000Z","hook":{"resource":{"addr":"module.net.terraform_data.vpc","module":"module.net","resource":"terraform_data.vpc","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"vpc","resource_key":null},"action":"update","id_key":"id","id_value":"6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01","elapsed_seconds":0},"type":"apply_complete"}
|
|
9
|
+
{"@level":"info","@message":"module.app.terraform_data.service: Creating...","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.540000Z","hook":{"resource":{"addr":"module.app.terraform_data.service","module":"module.app","resource":"terraform_data.service","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"service","resource_key":null},"action":"create"},"type":"apply_start"}
|
|
10
|
+
{"@level":"error","@message":"module.app.terraform_data.service: Creation errored after 0s","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.550000Z","hook":{"resource":{"addr":"module.app.terraform_data.service","module":"module.app","resource":"terraform_data.service","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"service","resource_key":null},"action":"create","elapsed_seconds":0},"type":"apply_errored"}
|
|
11
|
+
{"@level":"error","@message":"Error: Invalid input","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.551000Z","diagnostic":{"severity":"error","summary":"Invalid input","detail":"The service input is not a VPC id.\nCheck the vpc_id variable.","address":"module.app.terraform_data.service","range":{"filename":"../../roots/app/main.tf","start":{"line":1,"column":1,"byte":0},"end":{"line":1,"column":36,"byte":35}}},"type":"diagnostic"}
|
|
12
|
+
{"@level":"error","@message":"Error: Provider produced inconsistent final plan","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.552000Z","diagnostic":{"severity":"error","summary":"Provider produced inconsistent final plan","detail":"This is a bug in the provider."},"type":"diagnostic"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 4,
|
|
3
|
+
"terraform_version": "1.10.5",
|
|
4
|
+
"serial": 3,
|
|
5
|
+
"lineage": "8d4e2f1a-3b5c-4d6e-9f7a-1c2b3d4e5f60",
|
|
6
|
+
"outputs": {
|
|
7
|
+
"service_id": {
|
|
8
|
+
"value": "0b7e4a2c-93d1-4f6e-a5b8-2c1d9e3f4a77",
|
|
9
|
+
"type": "string"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"resources": [
|
|
13
|
+
{
|
|
14
|
+
"module": "module.logs",
|
|
15
|
+
"mode": "managed",
|
|
16
|
+
"type": "terraform_data",
|
|
17
|
+
"name": "group",
|
|
18
|
+
"provider": "provider[\"terraform.io/builtin/terraform\"]",
|
|
19
|
+
"instances": [
|
|
20
|
+
{
|
|
21
|
+
"schema_version": 0,
|
|
22
|
+
"attributes": {
|
|
23
|
+
"id": "a3c5e7f9-1b2d-4c6e-8a0b-3d5f7a9c1e2f",
|
|
24
|
+
"input": {
|
|
25
|
+
"value": "app-logs",
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
"output": {
|
|
29
|
+
"value": "app-logs",
|
|
30
|
+
"type": "string"
|
|
31
|
+
},
|
|
32
|
+
"triggers_replace": null
|
|
33
|
+
},
|
|
34
|
+
"sensitive_attributes": [],
|
|
35
|
+
"identity_schema_version": 0
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"mode": "managed",
|
|
41
|
+
"type": "terraform_data",
|
|
42
|
+
"name": "service",
|
|
43
|
+
"provider": "provider[\"terraform.io/builtin/terraform\"]",
|
|
44
|
+
"instances": [
|
|
45
|
+
{
|
|
46
|
+
"schema_version": 0,
|
|
47
|
+
"attributes": {
|
|
48
|
+
"id": "0b7e4a2c-93d1-4f6e-a5b8-2c1d9e3f4a77",
|
|
49
|
+
"input": {
|
|
50
|
+
"value": "6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01",
|
|
51
|
+
"type": "string"
|
|
52
|
+
},
|
|
53
|
+
"output": {
|
|
54
|
+
"value": "6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01",
|
|
55
|
+
"type": "string"
|
|
56
|
+
},
|
|
57
|
+
"triggers_replace": null
|
|
58
|
+
},
|
|
59
|
+
"sensitive_attributes": [],
|
|
60
|
+
"identity_schema_version": 0
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
"check_results": null
|
|
66
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 4,
|
|
3
|
+
"terraform_version": "1.10.5",
|
|
4
|
+
"serial": 12,
|
|
5
|
+
"lineage": "c0ffee00-1234-4abc-8def-0123456789ab",
|
|
6
|
+
"outputs": {
|
|
7
|
+
"name": {
|
|
8
|
+
"value": "www",
|
|
9
|
+
"type": "string"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"resources": [
|
|
13
|
+
{
|
|
14
|
+
"mode": "managed",
|
|
15
|
+
"type": "terraform_data",
|
|
16
|
+
"name": "dns",
|
|
17
|
+
"provider": "provider[\"terraform.io/builtin/terraform\"]",
|
|
18
|
+
"instances": [
|
|
19
|
+
{
|
|
20
|
+
"schema_version": 0,
|
|
21
|
+
"attributes": {
|
|
22
|
+
"id": "1d9a0c55-77e2-4c1b-8f3a-5b6e2d4c7a10",
|
|
23
|
+
"input": {
|
|
24
|
+
"value": "www",
|
|
25
|
+
"type": "string"
|
|
26
|
+
},
|
|
27
|
+
"output": {
|
|
28
|
+
"value": "www",
|
|
29
|
+
"type": "string"
|
|
30
|
+
},
|
|
31
|
+
"triggers_replace": null
|
|
32
|
+
},
|
|
33
|
+
"sensitive_attributes": [],
|
|
34
|
+
"identity_schema_version": 0
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"check_results": null
|
|
40
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 4,
|
|
3
|
+
"terraform_version": "1.10.5",
|
|
4
|
+
"serial": 7,
|
|
5
|
+
"lineage": "2b1f6c0a-6a1e-4c55-9f3d-7e0a1b2c3d4e",
|
|
6
|
+
"outputs": {
|
|
7
|
+
"vpc_id": {
|
|
8
|
+
"value": "6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01",
|
|
9
|
+
"type": "string"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"resources": [
|
|
13
|
+
{
|
|
14
|
+
"mode": "managed",
|
|
15
|
+
"type": "terraform_data",
|
|
16
|
+
"name": "vpc",
|
|
17
|
+
"provider": "provider[\"terraform.io/builtin/terraform\"]",
|
|
18
|
+
"instances": [
|
|
19
|
+
{
|
|
20
|
+
"schema_version": 0,
|
|
21
|
+
"attributes": {
|
|
22
|
+
"id": "6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01",
|
|
23
|
+
"input": {
|
|
24
|
+
"value": {
|
|
25
|
+
"cidr": "10.0.0.0/16",
|
|
26
|
+
"name": "core"
|
|
27
|
+
},
|
|
28
|
+
"type": [
|
|
29
|
+
"object",
|
|
30
|
+
{
|
|
31
|
+
"cidr": "string",
|
|
32
|
+
"name": "string"
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
"output": {
|
|
37
|
+
"value": {
|
|
38
|
+
"cidr": "10.0.0.0/16",
|
|
39
|
+
"name": "core"
|
|
40
|
+
},
|
|
41
|
+
"type": [
|
|
42
|
+
"object",
|
|
43
|
+
{
|
|
44
|
+
"cidr": "string",
|
|
45
|
+
"name": "string"
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
"triggers_replace": null
|
|
50
|
+
},
|
|
51
|
+
"sensitive_attributes": [],
|
|
52
|
+
"identity_schema_version": 0
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"check_results": null
|
|
58
|
+
}
|