@intentius/chant-lexicon-terraform 0.57.0 → 0.58.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/composites/terraform-adopt-op.d.ts +126 -0
- package/dist/composites/terraform-adopt-op.d.ts.map +1 -0
- package/dist/composites/terraform-apply-op.d.ts +63 -16
- package/dist/composites/terraform-apply-op.d.ts.map +1 -1
- package/dist/composites/terraform-watch-op.d.ts +80 -36
- package/dist/composites/terraform-watch-op.d.ts.map +1 -1
- package/dist/config.d.ts +49 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/describe-resources.d.ts +256 -16
- package/dist/describe-resources.d.ts.map +1 -1
- package/dist/hcl/descend.d.ts +98 -0
- package/dist/hcl/descend.d.ts.map +1 -0
- package/dist/hcl/marker.d.ts +130 -0
- package/dist/hcl/marker.d.ts.map +1 -0
- package/dist/hcl/parse.d.ts +142 -9
- package/dist/hcl/parse.d.ts.map +1 -1
- package/dist/hcl/references.d.ts +76 -0
- package/dist/hcl/references.d.ts.map +1 -0
- package/dist/hcl/roots.d.ts +22 -3
- package/dist/hcl/roots.d.ts.map +1 -1
- package/dist/hcl/suppressions.d.ts +54 -0
- package/dist/hcl/suppressions.d.ts.map +1 -0
- package/dist/hcl/value.d.ts +77 -0
- package/dist/hcl/value.d.ts.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/integrity.json +32 -5
- package/dist/lint/audit-catalog.d.ts +3 -2
- package/dist/lint/audit-catalog.d.ts.map +1 -1
- package/dist/lint/audit-lineage.d.ts +68 -0
- package/dist/lint/audit-lineage.d.ts.map +1 -1
- package/dist/lint/post-synth/blocks.d.ts +53 -0
- package/dist/lint/post-synth/blocks.d.ts.map +1 -0
- package/dist/lint/post-synth/fixtures/load.d.ts +37 -0
- package/dist/lint/post-synth/fixtures/load.d.ts.map +1 -0
- package/dist/lint/post-synth/index.d.ts.map +1 -1
- package/dist/lint/post-synth/module-source.d.ts +38 -0
- package/dist/lint/post-synth/module-source.d.ts.map +1 -0
- package/dist/lint/post-synth/scope.d.ts +65 -0
- package/dist/lint/post-synth/scope.d.ts.map +1 -0
- package/dist/lint/post-synth/tf001.d.ts +18 -0
- package/dist/lint/post-synth/tf001.d.ts.map +1 -1
- package/dist/lint/post-synth/tf002.d.ts +32 -0
- package/dist/lint/post-synth/tf002.d.ts.map +1 -0
- package/dist/lint/post-synth/tf003.d.ts +22 -0
- package/dist/lint/post-synth/tf003.d.ts.map +1 -0
- package/dist/lint/post-synth/tf004.d.ts +22 -0
- package/dist/lint/post-synth/tf004.d.ts.map +1 -0
- package/dist/lint/post-synth/tf005.d.ts +28 -0
- package/dist/lint/post-synth/tf005.d.ts.map +1 -0
- package/dist/lint/post-synth/tf006.d.ts +21 -0
- package/dist/lint/post-synth/tf006.d.ts.map +1 -0
- package/dist/lint/post-synth/tf007.d.ts +21 -0
- package/dist/lint/post-synth/tf007.d.ts.map +1 -0
- package/dist/lint/post-synth/tf008.d.ts +22 -0
- package/dist/lint/post-synth/tf008.d.ts.map +1 -0
- package/dist/lint/post-synth/tf009.d.ts +24 -0
- package/dist/lint/post-synth/tf009.d.ts.map +1 -0
- package/dist/lint/post-synth/tf010.d.ts +19 -0
- package/dist/lint/post-synth/tf010.d.ts.map +1 -0
- package/dist/lint/post-synth/tf011.d.ts +18 -0
- package/dist/lint/post-synth/tf011.d.ts.map +1 -0
- package/dist/lint/post-synth/tf012.d.ts +17 -0
- package/dist/lint/post-synth/tf012.d.ts.map +1 -0
- package/dist/lint/post-synth/tf013.d.ts +21 -0
- package/dist/lint/post-synth/tf013.d.ts.map +1 -0
- package/dist/lint/post-synth/tf014.d.ts +25 -0
- package/dist/lint/post-synth/tf014.d.ts.map +1 -0
- package/dist/lint/post-synth/tf015.d.ts +21 -0
- package/dist/lint/post-synth/tf015.d.ts.map +1 -0
- package/dist/lint/post-synth/tf016.d.ts +30 -0
- package/dist/lint/post-synth/tf016.d.ts.map +1 -0
- package/dist/lint/post-synth/tf017.d.ts +19 -0
- package/dist/lint/post-synth/tf017.d.ts.map +1 -0
- package/dist/lint/post-synth/tf018.d.ts +20 -0
- package/dist/lint/post-synth/tf018.d.ts.map +1 -0
- package/dist/lint/post-synth/tf019.d.ts +25 -0
- package/dist/lint/post-synth/tf019.d.ts.map +1 -0
- package/dist/lint/post-synth/tf020.d.ts +38 -0
- package/dist/lint/post-synth/tf020.d.ts.map +1 -0
- package/dist/lint/post-synth/tf021.d.ts +41 -0
- package/dist/lint/post-synth/tf021.d.ts.map +1 -0
- package/dist/lint/post-synth/tf022.d.ts +24 -0
- package/dist/lint/post-synth/tf022.d.ts.map +1 -0
- package/dist/lint/post-synth/tf024.d.ts +24 -0
- package/dist/lint/post-synth/tf024.d.ts.map +1 -0
- package/dist/lint/post-synth/tf025.d.ts +29 -0
- package/dist/lint/post-synth/tf025.d.ts.map +1 -0
- package/dist/lint/post-synth/tf026.d.ts +21 -0
- package/dist/lint/post-synth/tf026.d.ts.map +1 -0
- package/dist/lint/rules/fixtures/load.d.ts +13 -0
- package/dist/lint/rules/fixtures/load.d.ts.map +1 -0
- package/dist/lint/rules/plan-before-apply.d.ts +11 -0
- package/dist/lint/rules/plan-before-apply.d.ts.map +1 -1
- package/dist/lint/secret-shape.d.ts +68 -0
- package/dist/lint/secret-shape.d.ts.map +1 -0
- package/dist/live-ownership.d.ts +55 -0
- package/dist/live-ownership.d.ts.map +1 -0
- package/dist/lsp/option-keys.d.ts.map +1 -1
- package/dist/manifest.json +1 -1
- package/dist/okf/index.md +24 -0
- package/dist/okf/rules/TF002.md +11 -0
- package/dist/okf/rules/TF003.md +11 -0
- package/dist/okf/rules/TF004.md +11 -0
- package/dist/okf/rules/TF005.md +11 -0
- package/dist/okf/rules/TF006.md +11 -0
- package/dist/okf/rules/TF007.md +11 -0
- package/dist/okf/rules/TF008.md +11 -0
- package/dist/okf/rules/TF009.md +11 -0
- package/dist/okf/rules/TF010.md +11 -0
- package/dist/okf/rules/TF011.md +11 -0
- package/dist/okf/rules/TF012.md +11 -0
- package/dist/okf/rules/TF013.md +11 -0
- package/dist/okf/rules/TF014.md +11 -0
- package/dist/okf/rules/TF015.md +11 -0
- package/dist/okf/rules/TF016.md +11 -0
- package/dist/okf/rules/TF017.md +11 -0
- package/dist/okf/rules/TF018.md +11 -0
- package/dist/okf/rules/TF019.md +11 -0
- package/dist/okf/rules/TF020.md +11 -0
- package/dist/okf/rules/TF021.md +11 -0
- package/dist/okf/rules/TF022.md +11 -0
- package/dist/okf/rules/TF024.md +11 -0
- package/dist/okf/rules/TF025.md +11 -0
- package/dist/okf/rules/TF026.md +11 -0
- package/dist/op/activities/index.d.ts +13 -6
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/op/activities/live-detect.d.ts +51 -0
- package/dist/op/activities/live-detect.d.ts.map +1 -0
- package/dist/op/activities/terraform.d.ts +445 -17
- package/dist/op/activities/terraform.d.ts.map +1 -1
- package/dist/op/activity-contracts.d.ts +148 -0
- package/dist/op/activity-contracts.d.ts.map +1 -0
- package/dist/op/adoption.d.ts +118 -0
- package/dist/op/adoption.d.ts.map +1 -0
- package/dist/op/builders.d.ts +46 -6
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/resolve-root-mode.d.ts +45 -0
- package/dist/op/resolve-root-mode.d.ts.map +1 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/rules/blocks.ts +109 -0
- package/dist/rules/module-source.ts +121 -0
- package/dist/rules/plan-before-apply.ts +11 -0
- package/dist/rules/scope.ts +107 -0
- package/dist/rules/tf001.ts +32 -8
- package/dist/rules/tf002.ts +151 -0
- package/dist/rules/tf003.ts +71 -0
- package/dist/rules/tf004.ts +63 -0
- package/dist/rules/tf005.ts +76 -0
- package/dist/rules/tf006.ts +53 -0
- package/dist/rules/tf007.ts +78 -0
- package/dist/rules/tf008.ts +75 -0
- package/dist/rules/tf009.ts +59 -0
- package/dist/rules/tf010.ts +51 -0
- package/dist/rules/tf011.ts +49 -0
- package/dist/rules/tf012.ts +47 -0
- package/dist/rules/tf013.ts +63 -0
- package/dist/rules/tf014.ts +72 -0
- package/dist/rules/tf015.ts +63 -0
- package/dist/rules/tf016.ts +75 -0
- package/dist/rules/tf017.ts +50 -0
- package/dist/rules/tf018.ts +72 -0
- package/dist/rules/tf019.ts +72 -0
- package/dist/rules/tf020.ts +123 -0
- package/dist/rules/tf021.ts +126 -0
- package/dist/rules/tf022.ts +61 -0
- package/dist/rules/tf024.ts +70 -0
- package/dist/rules/tf025.ts +101 -0
- package/dist/rules/tf026.ts +80 -0
- package/dist/skills/chant-terraform.md +1 -1
- package/package.json +7 -2
- package/src/__fixtures__/live/main.tf +28 -0
- package/src/__fixtures__/live-adopt/estate.chdf.hcl +6 -0
- package/src/__fixtures__/live-adopt/main.tf +21 -0
- package/src/__fixtures__/live-estate/README.md +58 -0
- package/src/__fixtures__/live-estate/compute.tf +10 -0
- package/src/__fixtures__/live-estate/estate.chdf.hcl +1 -0
- package/src/__fixtures__/live-estate/logs.tf +8 -0
- package/src/__fixtures__/live-estate/network.tf +24 -0
- package/src/__fixtures__/live-estate/rule.tf +11 -0
- package/src/__fixtures__/live-estate/unowned.tf +21 -0
- package/src/__fixtures__/live-estate/versions.tf +31 -0
- package/src/__fixtures__/live-ls.json +98 -0
- package/src/__fixtures__/live-plan.json +285 -0
- package/src/__fixtures__/live-sidecar/estate.chdf.hcl +3 -0
- package/src/__fixtures__/live-sidecar/main.tf +24 -0
- package/src/__fixtures__/module-tree/README.md +16 -0
- package/src/__fixtures__/module-tree/cycle/main.tf +3 -0
- package/src/__fixtures__/module-tree/cycle/modules/a/main.tf +9 -0
- package/src/__fixtures__/module-tree/cycle/modules/b/main.tf +9 -0
- package/src/__fixtures__/module-tree/missing/main.tf +9 -0
- package/src/__fixtures__/module-tree/outside/root/main.tf +9 -0
- package/src/__fixtures__/module-tree/root/main.tf +28 -0
- package/src/__fixtures__/module-tree/root/modules/cdn/main.tf +15 -0
- package/src/__fixtures__/module-tree/root/modules/cdn/modules/bucket/main.tf +11 -0
- package/src/__fixtures__/module-tree/shared/main.tf +5 -0
- package/src/__fixtures__/references/main.tf +56 -0
- package/src/codegen/lint-rules-page.test.ts +28 -0
- package/src/composites/terraform-adopt-op.acceptance.test.ts +166 -0
- package/src/composites/terraform-adopt-op.test.ts +170 -0
- package/src/composites/terraform-adopt-op.ts +197 -0
- package/src/composites/terraform-apply-op.acceptance.test.ts +183 -5
- package/src/composites/terraform-apply-op.test.ts +167 -15
- package/src/composites/terraform-apply-op.ts +105 -28
- package/src/composites/terraform-watch-op.test.ts +85 -26
- package/src/composites/terraform-watch-op.ts +130 -73
- package/src/config.ts +32 -3
- package/src/describe-resources.live.test.ts +598 -0
- package/src/describe-resources.test.ts +53 -0
- package/src/describe-resources.ts +811 -28
- package/src/hcl/descend.test.ts +162 -0
- package/src/hcl/descend.ts +273 -0
- package/src/hcl/marker.test.ts +147 -0
- package/src/hcl/marker.ts +235 -0
- package/src/hcl/parse.test.ts +69 -0
- package/src/hcl/parse.ts +249 -27
- package/src/hcl/references.test.ts +116 -0
- package/src/hcl/references.ts +172 -0
- package/src/hcl/roots.ts +59 -5
- package/src/hcl/suppressions.test.ts +147 -0
- package/src/hcl/suppressions.ts +204 -0
- package/src/hcl/value.test.ts +73 -0
- package/src/hcl/value.ts +106 -0
- package/src/index.ts +31 -1
- package/src/lint/audit-catalog.ts +264 -3
- package/src/lint/audit-lineage.ts +319 -1
- package/src/lint/audit.test.ts +40 -1
- package/src/lint/post-synth/blocks.ts +109 -0
- package/src/lint/post-synth/fixtures/TF001/negative.tf +28 -0
- package/src/lint/post-synth/fixtures/TF001/positive.tf +24 -0
- package/src/lint/post-synth/fixtures/TF002/negative.tf +17 -0
- package/src/lint/post-synth/fixtures/TF002/positive-legacy.tf +10 -0
- package/src/lint/post-synth/fixtures/TF002/positive-no-version.tf +12 -0
- package/src/lint/post-synth/fixtures/TF002/positive.tf +7 -0
- package/src/lint/post-synth/fixtures/TF003/negative.tf +10 -0
- package/src/lint/post-synth/fixtures/TF003/positive.tf +8 -0
- package/src/lint/post-synth/fixtures/TF004/negative-git.tf +3 -0
- package/src/lint/post-synth/fixtures/TF004/negative-local.tf +3 -0
- package/src/lint/post-synth/fixtures/TF004/negative.tf +4 -0
- package/src/lint/post-synth/fixtures/TF004/positive.tf +3 -0
- package/src/lint/post-synth/fixtures/TF005/negative-local.tf +3 -0
- package/src/lint/post-synth/fixtures/TF005/negative-registry.tf +3 -0
- package/src/lint/post-synth/fixtures/TF005/negative-sha.tf +3 -0
- package/src/lint/post-synth/fixtures/TF005/negative.tf +3 -0
- package/src/lint/post-synth/fixtures/TF005/positive-branch.tf +3 -0
- package/src/lint/post-synth/fixtures/TF005/positive-non-semver.tf +3 -0
- package/src/lint/post-synth/fixtures/TF005/positive.tf +3 -0
- package/src/lint/post-synth/fixtures/TF006/negative.tf +5 -0
- package/src/lint/post-synth/fixtures/TF006/positive-empty-default.tf +11 -0
- package/src/lint/post-synth/fixtures/TF006/positive.tf +6 -0
- package/src/lint/post-synth/fixtures/TF007/negative.tf +10 -0
- package/src/lint/post-synth/fixtures/TF007/positive.tf +9 -0
- package/src/lint/post-synth/fixtures/TF008/negative-variable.tf +10 -0
- package/src/lint/post-synth/fixtures/TF008/negative.tf +8 -0
- package/src/lint/post-synth/fixtures/TF008/positive-other-provider.tf +10 -0
- package/src/lint/post-synth/fixtures/TF008/positive.tf +5 -0
- package/src/lint/post-synth/fixtures/TF009/negative.tf +10 -0
- package/src/lint/post-synth/fixtures/TF009/positive.tf +4 -0
- package/src/lint/post-synth/fixtures/TF010/negative.tf +5 -0
- package/src/lint/post-synth/fixtures/TF010/positive.tf +4 -0
- package/src/lint/post-synth/fixtures/TF011/negative.tf +5 -0
- package/src/lint/post-synth/fixtures/TF011/positive-blank.tf +5 -0
- package/src/lint/post-synth/fixtures/TF011/positive.tf +4 -0
- package/src/lint/post-synth/fixtures/TF012/negative.tf +4 -0
- package/src/lint/post-synth/fixtures/TF012/positive.tf +3 -0
- package/src/lint/post-synth/fixtures/TF013/negative.tf +8 -0
- package/src/lint/post-synth/fixtures/TF013/positive-data.tf +8 -0
- package/src/lint/post-synth/fixtures/TF013/positive.tf +8 -0
- package/src/lint/post-synth/fixtures/TF014/negative/main.tf +26 -0
- package/src/lint/post-synth/fixtures/TF014/negative/modules/cdn/main.tf +19 -0
- package/src/lint/post-synth/fixtures/TF014/positive/main.tf +16 -0
- package/src/lint/post-synth/fixtures/TF014/positive/modules/cdn/main.tf +15 -0
- package/src/lint/post-synth/fixtures/TF015/negative/main.tf +13 -0
- package/src/lint/post-synth/fixtures/TF015/negative/modules/cdn/main.tf +16 -0
- package/src/lint/post-synth/fixtures/TF015/positive/main.tf +13 -0
- package/src/lint/post-synth/fixtures/TF015/positive/modules/cdn/main.tf +14 -0
- package/src/lint/post-synth/fixtures/TF016/negative-template.tf +7 -0
- package/src/lint/post-synth/fixtures/TF016/negative.tf +16 -0
- package/src/lint/post-synth/fixtures/TF016/positive-shared-file.tf +12 -0
- package/src/lint/post-synth/fixtures/TF016/positive.tf +13 -0
- package/src/lint/post-synth/fixtures/TF017/negative.tf +4 -0
- package/src/lint/post-synth/fixtures/TF017/positive.tf +5 -0
- package/src/lint/post-synth/fixtures/TF018/negative.tf +9 -0
- package/src/lint/post-synth/fixtures/TF018/positive-data.tf +9 -0
- package/src/lint/post-synth/fixtures/TF018/positive.tf +4 -0
- package/src/lint/post-synth/fixtures/TF019/negative.tf +14 -0
- package/src/lint/post-synth/fixtures/TF019/positive-output.tf +5 -0
- package/src/lint/post-synth/fixtures/TF019/positive.tf +16 -0
- package/src/lint/post-synth/fixtures/TF020/negative.tf +43 -0
- package/src/lint/post-synth/fixtures/TF020/positive.tf +32 -0
- package/src/lint/post-synth/fixtures/TF020/scoped/main.tf +21 -0
- package/src/lint/post-synth/fixtures/TF020/scoped/modules/cdn/main.tf +13 -0
- package/src/lint/post-synth/fixtures/TF021/negative.tf +31 -0
- package/src/lint/post-synth/fixtures/TF021/positive-length.tf +8 -0
- package/src/lint/post-synth/fixtures/TF021/positive.tf +8 -0
- package/src/lint/post-synth/fixtures/TF022/negative-locator.tf +7 -0
- package/src/lint/post-synth/fixtures/TF022/negative.tf +10 -0
- package/src/lint/post-synth/fixtures/TF022/positive-nested.tf +10 -0
- package/src/lint/post-synth/fixtures/TF022/positive.tf +6 -0
- package/src/lint/post-synth/fixtures/TF023/negative/main.tf +15 -0
- package/src/lint/post-synth/fixtures/TF023/positive/main.tf +9 -0
- package/src/lint/post-synth/fixtures/TF023/positive/state.json +24 -0
- package/src/lint/post-synth/fixtures/TF024/live-clean/main.tf +9 -0
- package/src/lint/post-synth/fixtures/TF024/live-with-backend/main.tf +14 -0
- package/src/lint/post-synth/fixtures/TF024/live-with-cloud/main.tf +16 -0
- package/src/lint/post-synth/fixtures/TF025/live-clean/main.tf +13 -0
- package/src/lint/post-synth/fixtures/TF025/live-with-workspace-ref/main.tf +13 -0
- package/src/lint/post-synth/fixtures/TF026/live-default/main.tf +9 -0
- package/src/lint/post-synth/fixtures/TF026/live-explicit-delete/main.tf +13 -0
- package/src/lint/post-synth/fixtures/TF026/live-keep/main.tf +13 -0
- package/src/lint/post-synth/fixtures/load.ts +108 -0
- package/src/lint/post-synth/index.ts +48 -0
- package/src/lint/post-synth/module-rules.test.ts +153 -0
- package/src/lint/post-synth/module-source.test.ts +75 -0
- package/src/lint/post-synth/module-source.ts +121 -0
- package/src/lint/post-synth/post-synth.test.ts +14 -15
- package/src/lint/post-synth/scope.ts +107 -0
- package/src/lint/post-synth/single-block.test.ts +263 -0
- package/src/lint/post-synth/suppression.test.ts +110 -0
- package/src/lint/post-synth/tf001.ts +32 -8
- package/src/lint/post-synth/tf002.test.ts +93 -0
- package/src/lint/post-synth/tf002.ts +151 -0
- package/src/lint/post-synth/tf003.test.ts +75 -0
- package/src/lint/post-synth/tf003.ts +71 -0
- package/src/lint/post-synth/tf004.test.ts +47 -0
- package/src/lint/post-synth/tf004.ts +63 -0
- package/src/lint/post-synth/tf005.test.ts +57 -0
- package/src/lint/post-synth/tf005.ts +76 -0
- package/src/lint/post-synth/tf006.ts +53 -0
- package/src/lint/post-synth/tf007.ts +78 -0
- package/src/lint/post-synth/tf008.ts +75 -0
- package/src/lint/post-synth/tf009.ts +59 -0
- package/src/lint/post-synth/tf010.ts +51 -0
- package/src/lint/post-synth/tf011.ts +49 -0
- package/src/lint/post-synth/tf012.ts +47 -0
- package/src/lint/post-synth/tf013.ts +63 -0
- package/src/lint/post-synth/tf014.ts +72 -0
- package/src/lint/post-synth/tf015.ts +63 -0
- package/src/lint/post-synth/tf016.ts +75 -0
- package/src/lint/post-synth/tf017.ts +50 -0
- package/src/lint/post-synth/tf018.ts +72 -0
- package/src/lint/post-synth/tf019.ts +72 -0
- package/src/lint/post-synth/tf020.ts +123 -0
- package/src/lint/post-synth/tf021.ts +126 -0
- package/src/lint/post-synth/tf022.ts +61 -0
- package/src/lint/post-synth/tf024.test.ts +42 -0
- package/src/lint/post-synth/tf024.ts +70 -0
- package/src/lint/post-synth/tf025.test.ts +46 -0
- package/src/lint/post-synth/tf025.ts +101 -0
- package/src/lint/post-synth/tf026.test.ts +56 -0
- package/src/lint/post-synth/tf026.ts +80 -0
- package/src/lint/presets.test.ts +72 -0
- package/src/lint/rules/fixtures/TF101/negative-op.ts +2 -0
- package/src/lint/rules/fixtures/TF101/positive-op.ts +2 -0
- package/src/lint/rules/fixtures/load.ts +53 -0
- package/src/lint/rules/plan-before-apply.test.ts +112 -7
- package/src/lint/rules/plan-before-apply.ts +11 -0
- package/src/lint/secret-shape.test.ts +150 -0
- package/src/lint/secret-shape.ts +159 -0
- package/src/live-ownership.ts +60 -0
- package/src/lsp/completions.test.ts +3 -2
- package/src/lsp/option-keys.ts +10 -5
- package/src/op/activities/choudoufu.acceptance.test.ts +143 -0
- package/src/op/activities/choudoufu.test.ts +693 -0
- package/src/op/activities/index.ts +40 -4
- package/src/op/activities/live-detect.test.ts +143 -0
- package/src/op/activities/live-detect.ts +162 -0
- package/src/op/activities/registry.test.ts +11 -3
- package/src/op/activities/terraform.test.ts +7 -3
- package/src/op/activities/terraform.ts +823 -69
- package/src/op/activity-contracts.test.ts +147 -0
- package/src/op/activity-contracts.ts +178 -0
- package/src/op/adoption.test.ts +170 -0
- package/src/op/adoption.ts +241 -0
- package/src/op/builders.test.ts +60 -5
- package/src/op/builders.ts +93 -5
- package/src/op/resolve-root-mode.test.ts +85 -0
- package/src/op/resolve-root-mode.ts +72 -0
- package/src/plugin.test.ts +68 -0
- package/src/plugin.ts +75 -9
- package/src/skills/chant-terraform.md +1 -1
|
@@ -4,9 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Shaped after `lexicons/k3s/src/op/activities/k3s.ts`: `promisify(exec)` with
|
|
6
6
|
* the caller's `AbortSignal` forwarded so a local timeout or Ctrl-C kills the
|
|
7
|
-
* child,
|
|
8
|
-
*
|
|
9
|
-
* test can assert on it without running terraform.
|
|
7
|
+
* child, and every command and environment string produced by a pure exported
|
|
8
|
+
* function so a test can assert on it without running terraform.
|
|
10
9
|
*
|
|
11
10
|
* Two invariants hold for every call:
|
|
12
11
|
*
|
|
@@ -18,15 +17,61 @@
|
|
|
18
17
|
* (terraform answers `flag provided but not defined: -input`), so it
|
|
19
18
|
* carries the environment variable alone.
|
|
20
19
|
*
|
|
21
|
-
* `terraformApply` takes a saved plan file and nothing else
|
|
22
|
-
* re-plans at apply time, which is exactly the gap an
|
|
23
|
-
* close, so it is refused rather than offered.
|
|
20
|
+
* `terraformApply` takes a saved plan file and nothing else on a stock root,
|
|
21
|
+
* since a bare apply re-plans at apply time, which is exactly the gap an
|
|
22
|
+
* approval gate exists to close, so it is refused rather than offered. On a
|
|
23
|
+
* live root (#2103, `terraform.binary: "choudoufu"` plus a declared estate)
|
|
24
|
+
* it is the opposite: choudoufu refuses a plan file by design, so
|
|
25
|
+
* `terraformApply` refuses one there and runs a bare `apply -auto-approve`
|
|
26
|
+
* instead.
|
|
27
|
+
*
|
|
28
|
+
* `choudoufuLivePlan`, `choudoufuLiveLs` and `choudoufuLiveCheck` (#2103) are
|
|
29
|
+
* choudoufu-only activities living in this same module for the same reason
|
|
30
|
+
* the four above do: pure command builders, the `promisify(exec)` shape, and
|
|
31
|
+
* no dependency on the lexicon's HCL parse. `./live-detect.ts` is a
|
|
32
|
+
* deliberately separate, cheap regex-based read of "does this root declare a
|
|
33
|
+
* live estate," used only to decide how `terraformApply` reads a non-zero
|
|
34
|
+
* exit and to
|
|
35
|
+
* auto-detect `-estate` for the two live-only reads that need it; the
|
|
36
|
+
* accurate, AST-based version lives in `../../hcl/parse.ts` and stays out of
|
|
37
|
+
* this module's dependency graph. `choudoufu version` is checked once per
|
|
38
|
+
* module load (`ensureChoudoufuVersion`) and refuses a binary older than
|
|
39
|
+
* {@link MIN_CHOUDOUFU_VERSION}.
|
|
24
40
|
*/
|
|
25
41
|
import type { TerraformConfig, TerraformRootConfig } from "../../config.js";
|
|
42
|
+
import { type AdoptionCandidate } from "../adoption.js";
|
|
26
43
|
/** Plan file written into the root directory when a step names none. */
|
|
27
44
|
export declare const DEFAULT_PLAN_FILE = "chant.tfplan";
|
|
28
45
|
/** Binary used when the `terraform` namespace records no preference. */
|
|
29
46
|
export declare const DEFAULT_TERRAFORM_BINARY = "terraform";
|
|
47
|
+
/** Where {@link choudoufuLivePlan} writes GitHub issue #788's JSON document, relative to the root directory. */
|
|
48
|
+
export declare const DEFAULT_LIVE_PLAN_DOCUMENT_FILE = "chant.live-plan.json";
|
|
49
|
+
/**
|
|
50
|
+
* choudoufu below this refuses. v0.12.0 brought `live-plan -json`, `live-ls`
|
|
51
|
+
* and `live-check -json` (#2103); v0.13.0 brought the approval artifact
|
|
52
|
+
* ([choudoufu #878](https://github.com/INTENTIUS/choudoufu/issues/878), PR
|
|
53
|
+
* 889): under a live block `plan -out=FILE` is accepted and `apply FILE`
|
|
54
|
+
* re-plans the live system and refuses on a mismatch with exit status 3.
|
|
55
|
+
* {@link terraformApply} depends on that refusal existing, so the floor is
|
|
56
|
+
* the release that shipped it rather than the one before.
|
|
57
|
+
*/
|
|
58
|
+
export declare const MIN_CHOUDOUFU_VERSION = "0.13.0";
|
|
59
|
+
/**
|
|
60
|
+
* choudoufu's own refusal summary for `-out` on the `live-plan -estate`
|
|
61
|
+
* surface (`internal/command/live_mode.go`). That is the one surface where a
|
|
62
|
+
* saved plan file is still refused: a directory reached through `-estate` has
|
|
63
|
+
* no `live` block, so plain `plan` and `apply` there are ordinary state-backed
|
|
64
|
+
* commands and a file written from this form would be applied by something
|
|
65
|
+
* that never heard of the estate. Under a `live` block `plan -out` is
|
|
66
|
+
* accepted (choudoufu #878).
|
|
67
|
+
*/
|
|
68
|
+
export declare const CHOUDOUFU_LIVE_PLAN_OUT_REFUSAL = "Saved plan files are not available under live resource markers";
|
|
69
|
+
/** Exit status choudoufu's approval refusals carry: not 1 (any ordinary failure), not 2 (`-detailed-exitcode`). */
|
|
70
|
+
export declare const CHOUDOUFU_APPROVAL_EXIT_CODE = 3;
|
|
71
|
+
/** Summary line of choudoufu's refusal when the fresh live plan differs from the approved plan file. */
|
|
72
|
+
export declare const CHOUDOUFU_APPROVAL_MISMATCH_REFUSAL = "The approved plan no longer matches the live system";
|
|
73
|
+
/** Summary line of choudoufu's sibling refusal when the plan file was produced against another estate. */
|
|
74
|
+
export declare const CHOUDOUFU_WRONG_ESTATE_REFUSAL = "The approved plan belongs to a different estate";
|
|
30
75
|
/** Fields every activity here takes: which root, and where the project is. */
|
|
31
76
|
export interface TerraformRootArgs {
|
|
32
77
|
/**
|
|
@@ -55,16 +100,73 @@ export interface TerraformPlanArgs extends TerraformRootArgs {
|
|
|
55
100
|
}
|
|
56
101
|
export interface TerraformApplyArgs extends TerraformRootArgs {
|
|
57
102
|
/**
|
|
58
|
-
* The saved plan file to apply, relative to the root directory
|
|
103
|
+
* The saved plan file to apply, relative to the root directory, normally
|
|
59
104
|
* `plan.out.planFile`, the Plan step's own output. Required: this activity
|
|
60
|
-
* has no bare-apply mode.
|
|
105
|
+
* applies a saved plan and has no bare-apply mode, on either kind of root.
|
|
106
|
+
*
|
|
107
|
+
* On a live root this file is the approval artifact
|
|
108
|
+
* [choudoufu #878](https://github.com/INTENTIUS/choudoufu/issues/878) asked
|
|
109
|
+
* for, in the stock form choudoufu v0.13.0 shipped (PR 889). `plan -out`
|
|
110
|
+
* writes stock's own plan file; `apply <planfile>` never replays it, and
|
|
111
|
+
* never reads it as prior state or as an ownership answer. It re-plans
|
|
112
|
+
* against the live system the way every live-markers run does, then
|
|
113
|
+
* compares its fresh plan with the file's, down to the planned values, and
|
|
114
|
+
* refuses with exit status 3 when they differ. So the seam #2106 left named
|
|
115
|
+
* and unused on these args is now this field itself, and there is nothing
|
|
116
|
+
* separate to pass.
|
|
61
117
|
*/
|
|
62
|
-
planFile
|
|
118
|
+
planFile?: string;
|
|
63
119
|
}
|
|
64
120
|
export interface TerraformShowArgs extends TerraformRootArgs {
|
|
65
121
|
/** Show this saved plan file. Omitted, the activity shows current state. */
|
|
66
122
|
planFile?: string;
|
|
67
123
|
}
|
|
124
|
+
export interface ChoudoufuLivePlanArgs extends TerraformRootArgs {
|
|
125
|
+
/**
|
|
126
|
+
* The estate whose ownership markers this run looks for (`-estate`).
|
|
127
|
+
* Omitted, it is auto-detected from the root's `live` block or
|
|
128
|
+
* `estate.chdf.hcl` sidecar, the same estate the root's own configuration
|
|
129
|
+
* declares, which is what a live root's every other activity assumes too.
|
|
130
|
+
*/
|
|
131
|
+
estate?: string;
|
|
132
|
+
/**
|
|
133
|
+
* Render the human half as choudoufu's adoption ledger (`-adoption-only`)
|
|
134
|
+
* instead of the ordinary plan (#2105).
|
|
135
|
+
*
|
|
136
|
+
* This activity already makes two live reads, one for the `-json` document
|
|
137
|
+
* and one for the human render, because the document carries no rendering of
|
|
138
|
+
* the plan itself. This flag changes only the second of them, which is what
|
|
139
|
+
* makes it possible at all: choudoufu refuses `-adoption-only` and `-json` on
|
|
140
|
+
* one invocation ("this run cannot produce both reports at once"), so the two
|
|
141
|
+
* reports have to come from two runs whether or not chant wants both. The
|
|
142
|
+
* cost is that the second read asks the estate-wide sweep the account-bounded
|
|
143
|
+
* question ("which live resources carry no ownership marker at all"), so it
|
|
144
|
+
* is slower than the ordinary render, not faster.
|
|
145
|
+
*/
|
|
146
|
+
adoptionOnly?: boolean;
|
|
147
|
+
}
|
|
148
|
+
export interface ChoudoufuLiveLsArgs extends TerraformRootArgs {
|
|
149
|
+
/** The estate to list (`-estate`). Omitted, auto-detected the same way {@link ChoudoufuLivePlanArgs.estate} is. */
|
|
150
|
+
estate?: string;
|
|
151
|
+
/** `-consistent`: poll past the Resource Groups Tagging API's eventual-consistency window. */
|
|
152
|
+
consistent?: boolean;
|
|
153
|
+
}
|
|
154
|
+
export type ChoudoufuLiveCheckArgs = TerraformRootArgs;
|
|
155
|
+
export interface ChoudoufuAdoptArgs extends TerraformRootArgs {
|
|
156
|
+
/**
|
|
157
|
+
* The adoptable matches to claim, normally `ledger.out.adoptions` from a
|
|
158
|
+
* {@link choudoufuLivePlan} step run with `adoptionOnly`. Each carries the
|
|
159
|
+
* two marker values and, where choudoufu printed one, the tagging command
|
|
160
|
+
* that writes them.
|
|
161
|
+
*/
|
|
162
|
+
adoptions: AdoptionCandidate[];
|
|
163
|
+
/**
|
|
164
|
+
* The contested candidates the same ledger refused, normally
|
|
165
|
+
* `ledger.out.contested`. Passed in so the Op's result names what was not
|
|
166
|
+
* adopted and why, beside what was; nothing here is ever written.
|
|
167
|
+
*/
|
|
168
|
+
contested?: AdoptionCandidate[];
|
|
169
|
+
}
|
|
68
170
|
/** What {@link terraformInit} resolved. */
|
|
69
171
|
export interface TerraformInitResult {
|
|
70
172
|
/** Absolute path of the root module directory that was initialized. */
|
|
@@ -94,14 +196,148 @@ export interface TerraformPlanResult extends PlanChangeCounts {
|
|
|
94
196
|
/** `terraform show -no-color <planFile>` — the human-readable plan. */
|
|
95
197
|
text: string;
|
|
96
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* Why a live apply refused the approval artifact it was handed. Both are
|
|
201
|
+
* choudoufu's exit status 3, which is neither 1 (any ordinary failure, which
|
|
202
|
+
* a pipeline must not route back to a reviewer) nor `-detailed-exitcode`'s 2.
|
|
203
|
+
*
|
|
204
|
+
* - `"approval-mismatch"`: the fresh live plan's change set or planned
|
|
205
|
+
* values differ from the approved file's.
|
|
206
|
+
* - `"wrong-estate"`: the file was produced from a configuration naming
|
|
207
|
+
* another estate.
|
|
208
|
+
*/
|
|
209
|
+
export type TerraformApprovalRefusal = "approval-mismatch" | "wrong-estate";
|
|
97
210
|
/** What {@link terraformApply} resolved. */
|
|
98
211
|
export interface TerraformApplyResult {
|
|
99
|
-
/** The plan file that was applied. */
|
|
100
|
-
planFile
|
|
212
|
+
/** The plan file that was applied, or that was refused. */
|
|
213
|
+
planFile?: string;
|
|
101
214
|
/** Absolute path of the root module directory. */
|
|
102
215
|
dir: string;
|
|
103
|
-
/**
|
|
216
|
+
/** `true` when the plan was applied. `false` exactly when {@link refused} is set. */
|
|
104
217
|
applied: boolean;
|
|
218
|
+
/**
|
|
219
|
+
* Set when a live apply refused the approval artifact (choudoufu exit 3).
|
|
220
|
+
* This is a result, not a thrown error, so a workflow can route the run
|
|
221
|
+
* back to review instead of treating it as a broken step.
|
|
222
|
+
*/
|
|
223
|
+
refused?: TerraformApprovalRefusal;
|
|
224
|
+
/** choudoufu's own refusal text, verbatim, when {@link refused} is set. */
|
|
225
|
+
refusal?: string;
|
|
226
|
+
}
|
|
227
|
+
/** Counts projected out of `live-plan -json`'s `unowned` section. */
|
|
228
|
+
export interface LivePlanUnownedCounts {
|
|
229
|
+
/** Live resources at a declared identity carrying no ownership marker for this estate. */
|
|
230
|
+
unowned: number;
|
|
231
|
+
/** Of those, how many an exact content match makes adoptable. */
|
|
232
|
+
adoptable: number;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* What {@link choudoufuLivePlan} resolved. `adds`/`changes`/`destroys` (#2106,
|
|
236
|
+
* {@link PlanChangeCounts}) are parsed off the human-readable render's own
|
|
237
|
+
* "Plan: N to add, N to change, N to destroy." summary line
|
|
238
|
+
* ({@link parseChoudoufuPlanSummary}), not off GitHub issue #788's JSON
|
|
239
|
+
* document: that document is deliberately scoped to the three sections a
|
|
240
|
+
* stock plan's `-json` has no notion of at all (`bound`, `omissions`,
|
|
241
|
+
* `unowned`; `internal/command/views/live_plan.go`'s own `LivePlanDocument`
|
|
242
|
+
* doc comment says as much — "the stock plan's -json...can stay separate")
|
|
243
|
+
* and carries no resource-change diff of its own. The ordinary create/change/
|
|
244
|
+
* destroy diff — including the delete choudoufu's own `undeclared_tagged`
|
|
245
|
+
* quadrant folds into it for an orphaned marked resource, per that same
|
|
246
|
+
* file's `StatelessRemoval` doc comment ("the plan's own resource diff
|
|
247
|
+
* carries the destroy itself for those") — renders only in the human form,
|
|
248
|
+
* the same summary line a stock `terraform plan` prints
|
|
249
|
+
* (`internal/command/views/operation_test.go`'s own fixtures confirm the
|
|
250
|
+
* exact wording), which is why the human run's text, already fetched here for
|
|
251
|
+
* the approver to read, is what this activity parses instead of the JSON.
|
|
252
|
+
*/
|
|
253
|
+
export interface ChoudoufuLivePlanResult extends LivePlanUnownedCounts, PlanChangeCounts {
|
|
254
|
+
/** `true` when `-detailed-exitcode` reported exit 2: the live plan proposes changes. */
|
|
255
|
+
drift: boolean;
|
|
256
|
+
/** GitHub issue #788's JSON document (`bound`, `omissions`, `unowned`), captured whole. */
|
|
257
|
+
json: unknown;
|
|
258
|
+
/**
|
|
259
|
+
* The human-readable plan, from a second `live-plan` run without `-json`
|
|
260
|
+
* (the document carries no render of it) — or, under
|
|
261
|
+
* {@link ChoudoufuLivePlanArgs.adoptionOnly}, choudoufu's own adoption ledger.
|
|
262
|
+
*/
|
|
263
|
+
text: string;
|
|
264
|
+
/**
|
|
265
|
+
* chant's rendering of the adoption ledger over the `-json` document
|
|
266
|
+
* (#2105): one line per adoptable match with its address, its live identity
|
|
267
|
+
* and the two marker values, then any contested address, listed and never
|
|
268
|
+
* offered. Present on every run, `-adoption-only` or not, since it is a
|
|
269
|
+
* projection of the document rather than a second report.
|
|
270
|
+
*/
|
|
271
|
+
ledger: string;
|
|
272
|
+
/**
|
|
273
|
+
* What a finding mode posts: {@link ChoudoufuLivePlanResult.text} and then
|
|
274
|
+
* {@link ChoudoufuLivePlanResult.ledger}. The one field an issue or PR body
|
|
275
|
+
* references, so that the JSON document has no path into a body at all.
|
|
276
|
+
*/
|
|
277
|
+
finding: string;
|
|
278
|
+
/** Adoptable matches: exactly one live resource at the declared address, with the marker pair that claims it. */
|
|
279
|
+
adoptions: AdoptionCandidate[];
|
|
280
|
+
/** Every candidate at a declared address more than one live resource sits at. Never adoptable. */
|
|
281
|
+
contested: AdoptionCandidate[];
|
|
282
|
+
/** How many declared addresses are contested — the count `contested` above spells out. */
|
|
283
|
+
ambiguous: number;
|
|
284
|
+
/** Absolute path of the root module directory. */
|
|
285
|
+
dir: string;
|
|
286
|
+
/** Where the JSON document was written, relative to `dir`; {@link DEFAULT_LIVE_PLAN_DOCUMENT_FILE} unless overridden. */
|
|
287
|
+
documentPath: string;
|
|
288
|
+
/** The estate this plan ran against. */
|
|
289
|
+
estate: string;
|
|
290
|
+
}
|
|
291
|
+
/** What {@link choudoufuLiveLs} resolved. */
|
|
292
|
+
export interface ChoudoufuLiveLsResult {
|
|
293
|
+
/** The `-json` listing, parsed: every resource the account holds under the estate. */
|
|
294
|
+
json: unknown;
|
|
295
|
+
/** Absolute path of the root module directory (`live-ls` needs no configuration, but this activity still runs in it). */
|
|
296
|
+
dir: string;
|
|
297
|
+
/** The estate that was listed. */
|
|
298
|
+
estate: string;
|
|
299
|
+
}
|
|
300
|
+
/** One adoption {@link choudoufuAdopt} declined, with the reason an operator acts on. */
|
|
301
|
+
export interface AdoptionRefusal {
|
|
302
|
+
/** The declared instance address that was not claimed. */
|
|
303
|
+
addr: string;
|
|
304
|
+
/** The live resource's identity, when the refusal is about a particular one. */
|
|
305
|
+
identity: string;
|
|
306
|
+
/** Why, in a sentence, always naming the two marker values a hand-write would need. */
|
|
307
|
+
reason: string;
|
|
308
|
+
}
|
|
309
|
+
/** What {@link choudoufuAdopt} resolved. */
|
|
310
|
+
export interface ChoudoufuAdoptResult {
|
|
311
|
+
/**
|
|
312
|
+
* How the markers were written. Only `"tag-write"` today; the field exists
|
|
313
|
+
* because #2105 weighed a second mechanism (choudoufu's `adopt` policy verb)
|
|
314
|
+
* and a later run of this activity should say which one it used rather than
|
|
315
|
+
* leave a reader to infer it from the absence of a field. See the activity's
|
|
316
|
+
* own doc for why the policy verb is not reachable from outside the
|
|
317
|
+
* configuration.
|
|
318
|
+
*/
|
|
319
|
+
mechanism: "tag-write";
|
|
320
|
+
/** The declared addresses whose live resources now carry this estate's markers. */
|
|
321
|
+
adopted: string[];
|
|
322
|
+
/** `adopted.length`, as a scalar an outcome attribute can carry. */
|
|
323
|
+
adoptedCount: number;
|
|
324
|
+
/** Every candidate this run declined, contested addresses included, with the reason. */
|
|
325
|
+
refused: AdoptionRefusal[];
|
|
326
|
+
/** How many declared addresses were contested — never adopted, always reported. */
|
|
327
|
+
ambiguous: number;
|
|
328
|
+
/** Absolute path of the root module directory. */
|
|
329
|
+
dir: string;
|
|
330
|
+
}
|
|
331
|
+
/** What {@link choudoufuLiveCheck} resolved. */
|
|
332
|
+
export interface ChoudoufuLiveCheckResult {
|
|
333
|
+
/** `true` when the configuration is refused under live resource markers (a non-zero exit). */
|
|
334
|
+
refused: boolean;
|
|
335
|
+
/** GitHub issue #790's declared roster, parsed, when the output could be parsed as JSON. */
|
|
336
|
+
json: unknown;
|
|
337
|
+
/** The raw `-json` output. */
|
|
338
|
+
text: string;
|
|
339
|
+
/** Absolute path of the root module directory. */
|
|
340
|
+
dir: string;
|
|
105
341
|
}
|
|
106
342
|
/** What {@link terraformShow} resolved. */
|
|
107
343
|
export interface TerraformShowResult extends PlanChangeCounts {
|
|
@@ -149,11 +385,56 @@ export declare function terraformPlanCommand(opts: {
|
|
|
149
385
|
varFiles?: string[];
|
|
150
386
|
destroy?: boolean;
|
|
151
387
|
}): string;
|
|
152
|
-
/**
|
|
388
|
+
/**
|
|
389
|
+
* `terraform apply <planFile>` — a saved plan, never a bare apply. The same
|
|
390
|
+
* command on a live root: choudoufu v0.13.0 admits a plan file under a `live`
|
|
391
|
+
* block, and a matched one applies without re-prompting, exactly as stock's
|
|
392
|
+
* own `apply <planfile>` does, so no `-auto-approve` is needed or passed.
|
|
393
|
+
*/
|
|
153
394
|
export declare function terraformApplyCommand(opts: {
|
|
154
395
|
binary: string;
|
|
155
396
|
planFile: string;
|
|
156
397
|
}): string;
|
|
398
|
+
/**
|
|
399
|
+
* `live-plan -detailed-exitcode -json -estate=<estate>`. `-json` is what
|
|
400
|
+
* prints GitHub issue #788's document instead of the plan; the human render
|
|
401
|
+
* needs a second invocation without it (see {@link choudoufuLivePlan}).
|
|
402
|
+
*
|
|
403
|
+
* `adoptionOnly` makes that second invocation print the adoption ledger and
|
|
404
|
+
* nothing else (GitHub issue #587). It is refused here alongside `json`
|
|
405
|
+
* because choudoufu refuses the pair itself, and a builder that emitted a
|
|
406
|
+
* command the binary rejects would move the error to the far side of a
|
|
407
|
+
* process spawn for no gain.
|
|
408
|
+
*/
|
|
409
|
+
export declare function choudoufuLivePlanCommand(opts: {
|
|
410
|
+
binary: string;
|
|
411
|
+
estate: string;
|
|
412
|
+
json: boolean;
|
|
413
|
+
adoptionOnly?: boolean;
|
|
414
|
+
noColor?: boolean;
|
|
415
|
+
}): string;
|
|
416
|
+
/** `live-ls -estate=<estate> -json [-consistent]`. */
|
|
417
|
+
export declare function choudoufuLiveLsCommand(opts: {
|
|
418
|
+
binary: string;
|
|
419
|
+
estate: string;
|
|
420
|
+
consistent?: boolean;
|
|
421
|
+
}): string;
|
|
422
|
+
/**
|
|
423
|
+
* `live-check -json`. No `DIR` argument: the activity already runs in the
|
|
424
|
+
* root directory (`cwd`), so `-json` alone checks it, since DIR defaults to
|
|
425
|
+
* `.`. Makes no cloud calls; a non-zero exit is a refusal, not a failure this
|
|
426
|
+
* builder's caller need distinguish from one.
|
|
427
|
+
*/
|
|
428
|
+
export declare function choudoufuLiveCheckCommand(opts: {
|
|
429
|
+
binary: string;
|
|
430
|
+
}): string;
|
|
431
|
+
/**
|
|
432
|
+
* Project `live-plan -json`'s `unowned` section into counts: how many live
|
|
433
|
+
* resources at a declared identity carry no ownership marker for this
|
|
434
|
+
* estate, and of those, how many an exact content match makes adoptable
|
|
435
|
+
* (`adopt_tofu_estate`/`adopt_tofu_address` present).
|
|
436
|
+
*/
|
|
437
|
+
export declare function countLivePlanUnowned(document: unknown): LivePlanUnownedCounts;
|
|
157
438
|
/**
|
|
158
439
|
* `terraform show`. The one command here that takes no `-input` flag
|
|
159
440
|
* (terraform answers `flag provided but not defined: -input`), so automation
|
|
@@ -171,6 +452,30 @@ export declare function terraformShowCommand(opts: {
|
|
|
171
452
|
* counts as one add and one destroy, exactly as terraform reports it.
|
|
172
453
|
*/
|
|
173
454
|
export declare function countPlanChanges(planJson: unknown): PlanChangeCounts;
|
|
455
|
+
/**
|
|
456
|
+
* Parse the ordinary "Plan: N to add, N to change, N to destroy." (or "...N
|
|
457
|
+
* to import, N to add...") summary line out of a human-readable `live-plan`
|
|
458
|
+
* render (#2106). "No changes." — the exit-0 case — matches nothing and
|
|
459
|
+
* reads as zero on every count, the same conservative default
|
|
460
|
+
* {@link countPlanChanges} falls back to on a shape it does not recognize.
|
|
461
|
+
*/
|
|
462
|
+
export declare function parseChoudoufuPlanSummary(text: string): PlanChangeCounts;
|
|
463
|
+
/** Whether `version` is strictly older than `min`, comparing `major.minor.patch` numerically. */
|
|
464
|
+
export declare function isOlderVersion(version: string, min: string): boolean;
|
|
465
|
+
/**
|
|
466
|
+
* Extract the release version from `choudoufu version`'s human-readable
|
|
467
|
+
* output: `"choudoufu v0.12.0 (based on OpenTofu v1.13.0)\non darwin_arm64"`.
|
|
468
|
+
* `choudoufu version -json`'s `terraform_version` field is the wrong number
|
|
469
|
+
* here: it names the upstream OpenTofu base this build forked from, not the
|
|
470
|
+
* choudoufu release itself (`internal/command/views/version.go`), so this
|
|
471
|
+
* reads the human form's `choudoufu vX.Y.Z` prefix instead. A dev build with
|
|
472
|
+
* no release tag baked in (`version.Fork` unset) prints only the upstream
|
|
473
|
+
* line and carries no choudoufu version to check at all: `undefined` here,
|
|
474
|
+
* same as an output this cannot parse.
|
|
475
|
+
*/
|
|
476
|
+
export declare function parseChoudoufuVersion(versionOutput: string): string | undefined;
|
|
477
|
+
/** Test-only: clear the cached version check so a test can simulate a fresh module load. */
|
|
478
|
+
export declare function __resetChoudoufuVersionCheckForTests(): void;
|
|
174
479
|
/**
|
|
175
480
|
* `terraform init` in the named root, with the root's `backendConfig` supplied
|
|
176
481
|
* as `-backend-config` flags. Uses the longInfra profile: init downloads
|
|
@@ -192,10 +497,30 @@ export declare function terraformInit(args: TerraformInitArgs, signal?: AbortSig
|
|
|
192
497
|
*/
|
|
193
498
|
export declare function terraformPlan(args: TerraformPlanArgs, signal?: AbortSignal): Promise<TerraformPlanResult>;
|
|
194
499
|
/**
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
500
|
+
* Which of choudoufu's two approval refusals an exit-3 apply printed, or
|
|
501
|
+
* `undefined` when the output carries neither summary line. Reads both the
|
|
502
|
+
* stderr the diagnostic is written to and the stdout the fresh plan is
|
|
503
|
+
* rendered on, since the two travel separately.
|
|
504
|
+
*/
|
|
505
|
+
export declare function classifyApprovalRefusal(output: string): TerraformApprovalRefusal | undefined;
|
|
506
|
+
/**
|
|
507
|
+
* `terraform apply <planFile>` in the named root, on a stock root and on a
|
|
508
|
+
* live one alike.
|
|
509
|
+
*
|
|
510
|
+
* Neither kind has a bare-apply mode here: without a saved `planFile`, apply
|
|
511
|
+
* re-plans at apply time and acts on something no gate ever saw, so a missing
|
|
512
|
+
* one is refused before the CLI runs. choudoufu v0.13.0 is what makes the
|
|
513
|
+
* live half of that true (choudoufu #878, PR 889): `plan -out` is accepted
|
|
514
|
+
* under a `live` block, and `apply <planfile>` re-plans against the live
|
|
515
|
+
* system, compares its fresh plan with the file's down to the planned values,
|
|
516
|
+
* and applies only when they agree.
|
|
517
|
+
*
|
|
518
|
+
* When they do not, choudoufu exits **3**, neither 1 (any ordinary failure)
|
|
519
|
+
* nor `-detailed-exitcode`'s 2, with one of two named refusals. That is an
|
|
520
|
+
* answer rather than a breakage, so it comes back as a result (`refused`,
|
|
521
|
+
* `refusal`) instead of a thrown error, and a workflow can route the run back
|
|
522
|
+
* to review. Exit 3 is read this way only on a live root; on a stock root
|
|
523
|
+
* nothing produces it and every non-zero exit stays a failure.
|
|
199
524
|
*
|
|
200
525
|
* Uses the longInfra profile.
|
|
201
526
|
*/
|
|
@@ -210,4 +535,107 @@ export declare function terraformApply(args: TerraformApplyArgs, signal?: AbortS
|
|
|
210
535
|
* provider.
|
|
211
536
|
*/
|
|
212
537
|
export declare function terraformShow(args: TerraformShowArgs, signal?: AbortSignal): Promise<TerraformShowResult>;
|
|
538
|
+
/**
|
|
539
|
+
* `choudoufu live-plan -detailed-exitcode -json -estate=<estate>`, plus a
|
|
540
|
+
* second `live-plan` without `-json` for the human-readable render. GitHub
|
|
541
|
+
* issue #788's JSON document carries no render of the plan itself
|
|
542
|
+
* (`views.LivePlanDocument` has no such field), so unlike `terraformPlan`'s
|
|
543
|
+
* single saved artifact this genuinely needs two live reads.
|
|
544
|
+
*
|
|
545
|
+
* The exit code is the answer, exactly as `terraformPlan`'s is: 0 is no
|
|
546
|
+
* drift, 2 is drift, and anything else is a failure thrown with choudoufu's
|
|
547
|
+
* own stderr attached. The JSON document is written to `documentPath` (under
|
|
548
|
+
* `dir`) for a later step or reviewer to open directly.
|
|
549
|
+
*
|
|
550
|
+
* Uses the longInfra profile: like `terraformPlan`, this reads the live
|
|
551
|
+
* system in full (the estate-wide sweep).
|
|
552
|
+
*/
|
|
553
|
+
/**
|
|
554
|
+
* The JSON document within a `live-plan -json` stdout: everything from the
|
|
555
|
+
* first line that is a bare `{` to the end. Stock keeps stdout to the
|
|
556
|
+
* document; choudoufu's `-estate` path precedes it with refresh progress
|
|
557
|
+
* lines (choudoufu #894). Returns the input unchanged when no such line
|
|
558
|
+
* exists, so a clean stdout parses as before and a broken one fails in
|
|
559
|
+
* `JSON.parse` with the real text in the error.
|
|
560
|
+
*/
|
|
561
|
+
export declare function liveDocumentFrom(stdout: string): string;
|
|
562
|
+
export declare function choudoufuLivePlan(args: ChoudoufuLivePlanArgs & {
|
|
563
|
+
documentPath?: string;
|
|
564
|
+
}, signal?: AbortSignal): Promise<ChoudoufuLivePlanResult>;
|
|
565
|
+
/**
|
|
566
|
+
* `choudoufu live-ls -estate=<estate> -json [-consistent]`: every resource
|
|
567
|
+
* the account holds under the estate, read straight from the Resource Groups
|
|
568
|
+
* Tagging API. No configuration, state or record store is read.
|
|
569
|
+
*
|
|
570
|
+
* Uses the fastIdempotent profile: like `terraformShow`, this reads an
|
|
571
|
+
* artifact-shaped answer and does not plan.
|
|
572
|
+
*/
|
|
573
|
+
export declare function choudoufuLiveLs(args: ChoudoufuLiveLsArgs, signal?: AbortSignal): Promise<ChoudoufuLiveLsResult>;
|
|
574
|
+
/**
|
|
575
|
+
* Claim the adoptable matches an adoption ledger found, by writing the two
|
|
576
|
+
* ownership markers onto each live resource (#2105).
|
|
577
|
+
*
|
|
578
|
+
* ## Why a tag write and not a policy verb
|
|
579
|
+
*
|
|
580
|
+
* choudoufu's `policy` block has an `adopt` verb for exactly this cell
|
|
581
|
+
* (`declared_untagged`), and `site/content/docs/use/migrate.md` names
|
|
582
|
+
* `policy { declared_untagged = "adopt" }` as the way to adopt a whole estate
|
|
583
|
+
* at once instead of one resource at a time. That would have been the smaller
|
|
584
|
+
* write: one apply, no tagging calls of chant's own. It is not reachable from
|
|
585
|
+
* outside the configuration, and #2105 checked both ways in:
|
|
586
|
+
*
|
|
587
|
+
* - a `live` block in a terraform override file is dropped in silence.
|
|
588
|
+
* `Module.mergeFile` (choudoufu's `internal/configs/module.go`) merges
|
|
589
|
+
* backends, cloud blocks, providers and resources from an override file
|
|
590
|
+
* and has no `Lives` case at all, so an `override.tf` carrying
|
|
591
|
+
* `terraform { live { policy { declared_untagged = "adopt" } } }` changes
|
|
592
|
+
* nothing. Measured, not inferred: a policy block with a deliberately
|
|
593
|
+
* invalid verb in an override file passes `live-check` clean, and the same
|
|
594
|
+
* block in a primary file is refused by name.
|
|
595
|
+
* - a second primary file carrying one is refused outright: "A module may
|
|
596
|
+
* have only one 'live' block." So is a sidecar beside an in-block form.
|
|
597
|
+
*
|
|
598
|
+
* Which leaves editing the root's own checked-in live configuration, running
|
|
599
|
+
* an apply, and putting it back — a mutation of a reviewed file, with a
|
|
600
|
+
* failure mode (a run that dies between the two edits) that leaves the estate
|
|
601
|
+
* declaring "adopt everything declared and unmarked" for every later apply.
|
|
602
|
+
* chant does not do that to a repository it does not own.
|
|
603
|
+
*
|
|
604
|
+
* So the mechanism is the tag write, which choudoufu's own migration guide
|
|
605
|
+
* calls the whole contract: "There is no `choudoufu adopt` command and no need
|
|
606
|
+
* for one. Two tags is the whole contract (`live/MARKERS.md`), so any tool
|
|
607
|
+
* that writes two tags can adopt a resource." The command each write runs is
|
|
608
|
+
* the paste-ready one choudoufu printed under `live-plan -adoption-only`,
|
|
609
|
+
* carried on the candidate — built from choudoufu's own provider
|
|
610
|
+
* configuration, so it lands on the region and endpoint the plan just read
|
|
611
|
+
* rather than wherever an operator's AWS CLI profile points, and shell-quoted
|
|
612
|
+
* by choudoufu for exactly this use.
|
|
613
|
+
*
|
|
614
|
+
* ## What it refuses
|
|
615
|
+
*
|
|
616
|
+
* A candidate with no printed command (a service whose tagging call this fork
|
|
617
|
+
* does not spell out: IAM, Route53, S3) is refused with its two marker values
|
|
618
|
+
* named, not guessed at. A contested address — more than one live resource at
|
|
619
|
+
* one declared identity — is refused because no single tag write claims it;
|
|
620
|
+
* `contested` is passed in so the Op's own result names what was refused
|
|
621
|
+
* beside what was written, and nothing in this function can adopt one, since
|
|
622
|
+
* `readAdoptionLedger` never puts a contested candidate in `adoptions`.
|
|
623
|
+
*
|
|
624
|
+
* Uses the longInfra profile: one tagging round trip per resource, against the
|
|
625
|
+
* cloud.
|
|
626
|
+
*/
|
|
627
|
+
export declare function choudoufuAdopt(args: ChoudoufuAdoptArgs, signal?: AbortSignal): Promise<ChoudoufuAdoptResult>;
|
|
628
|
+
/**
|
|
629
|
+
* `choudoufu live-check -json`: whether the configuration in this root can
|
|
630
|
+
* move under live resource markers, and what stops it if it cannot. Makes no
|
|
631
|
+
* cloud calls and needs no `live` block at all, since the check this activity
|
|
632
|
+
* runs works on any configuration, which is why it needs no `estate`.
|
|
633
|
+
*
|
|
634
|
+
* A non-zero exit is a refusal choudoufu reports, not a failure of this
|
|
635
|
+
* activity: `refused: true` carries it back rather than throwing. An abort
|
|
636
|
+
* or a spawn failure (no numeric exit code) still throws.
|
|
637
|
+
*
|
|
638
|
+
* Uses the fastIdempotent profile: no cloud calls, no state.
|
|
639
|
+
*/
|
|
640
|
+
export declare function choudoufuLiveCheck(args: ChoudoufuLiveCheckArgs, signal?: AbortSignal): Promise<ChoudoufuLiveCheckResult>;
|
|
213
641
|
//# sourceMappingURL=terraform.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terraform.d.ts","sourceRoot":"","sources":["../../../src/op/activities/terraform.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"terraform.d.ts","sourceRoot":"","sources":["../../../src/op/activities/terraform.ts"],"names":[],"mappings":"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"}
|