@intentius/chant-lexicon-terraform 0.102.0 → 0.104.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__fixtures__/terragrunt/affected-cases.d.ts +23 -0
- package/dist/__fixtures__/terragrunt/affected-cases.d.ts.map +1 -0
- package/dist/__fixtures__/terragrunt/record.d.ts +17 -0
- package/dist/__fixtures__/terragrunt/record.d.ts.map +1 -0
- package/dist/change-set.d.ts +67 -0
- package/dist/change-set.d.ts.map +1 -0
- package/dist/changed-roots.d.ts +30 -0
- package/dist/changed-roots.d.ts.map +1 -0
- package/dist/commands.d.ts +26 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/components/capability-plugin.d.ts +54 -0
- package/dist/components/capability-plugin.d.ts.map +1 -0
- package/dist/composites/terraform-pin-rollout-op.d.ts +44 -0
- package/dist/composites/terraform-pin-rollout-op.d.ts.map +1 -0
- package/dist/hcl/descend.d.ts +1 -1
- package/dist/hcl/descend.d.ts.map +1 -1
- package/dist/hcl/edges.d.ts +2 -2
- package/dist/hcl/edges.d.ts.map +1 -1
- package/dist/hcl/parse.d.ts +29 -1
- package/dist/hcl/parse.d.ts.map +1 -1
- package/dist/hcl/roots.d.ts +1 -1
- package/dist/hcl/roots.d.ts.map +1 -1
- package/dist/hcl/suppressions.d.ts.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/integrity.json +13 -4
- package/dist/lint/audit-catalog.d.ts.map +1 -1
- package/dist/lint/post-synth/index.d.ts.map +1 -1
- package/dist/lint/post-synth/module-source.d.ts +27 -1
- package/dist/lint/post-synth/module-source.d.ts.map +1 -1
- package/dist/lint/post-synth/terragrunt.d.ts +37 -0
- package/dist/lint/post-synth/terragrunt.d.ts.map +1 -0
- package/dist/lint/post-synth/tf002.d.ts +3 -1
- package/dist/lint/post-synth/tf002.d.ts.map +1 -1
- package/dist/lint/post-synth/tf038.d.ts +22 -0
- package/dist/lint/post-synth/tf038.d.ts.map +1 -0
- package/dist/lint/post-synth/tf039.d.ts +23 -0
- package/dist/lint/post-synth/tf039.d.ts.map +1 -0
- package/dist/lint/post-synth/tf040.d.ts +30 -0
- package/dist/lint/post-synth/tf040.d.ts.map +1 -0
- package/dist/lint/post-synth/tf041.d.ts +20 -0
- package/dist/lint/post-synth/tf041.d.ts.map +1 -0
- package/dist/lint/post-synth/tf042.d.ts +18 -0
- package/dist/lint/post-synth/tf042.d.ts.map +1 -0
- package/dist/lint/post-synth/tf043.d.ts +17 -0
- package/dist/lint/post-synth/tf043.d.ts.map +1 -0
- package/dist/lint/post-synth/tf044.d.ts +17 -0
- package/dist/lint/post-synth/tf044.d.ts.map +1 -0
- package/dist/lint/post-synth/tf045.d.ts +22 -0
- package/dist/lint/post-synth/tf045.d.ts.map +1 -0
- package/dist/manifest.json +1 -1
- package/dist/okf/index.md +8 -0
- package/dist/okf/rules/TF038.md +11 -0
- package/dist/okf/rules/TF039.md +11 -0
- package/dist/okf/rules/TF040.md +11 -0
- package/dist/okf/rules/TF041.md +11 -0
- package/dist/okf/rules/TF042.md +11 -0
- package/dist/okf/rules/TF043.md +11 -0
- package/dist/okf/rules/TF044.md +11 -0
- package/dist/okf/rules/TF045.md +11 -0
- package/dist/op/activities/index.d.ts +4 -0
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/op/activities/pin-rollout.d.ts +46 -0
- package/dist/op/activities/pin-rollout.d.ts.map +1 -0
- package/dist/op/activities/terraform.d.ts +24 -50
- package/dist/op/activities/terraform.d.ts.map +1 -1
- package/dist/op/activity-contracts.d.ts +48 -0
- package/dist/op/activity-contracts.d.ts.map +1 -1
- package/dist/op/builders.d.ts +9 -0
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/pin/edit-ts.d.ts +21 -0
- package/dist/pin/edit-ts.d.ts.map +1 -0
- package/dist/pin/edit.d.ts +52 -0
- package/dist/pin/edit.d.ts.map +1 -0
- package/dist/pin/forge.d.ts +39 -0
- package/dist/pin/forge.d.ts.map +1 -0
- package/dist/pin/index.d.ts +22 -0
- package/dist/pin/index.d.ts.map +1 -0
- package/dist/pin/rollout.d.ts +116 -0
- package/dist/pin/rollout.d.ts.map +1 -0
- package/dist/pin/scan.d.ts +54 -0
- package/dist/pin/scan.d.ts.map +1 -0
- package/dist/pin/source.d.ts +93 -0
- package/dist/pin/source.d.ts.map +1 -0
- package/dist/pin/waves.d.ts +66 -0
- package/dist/pin/waves.d.ts.map +1 -0
- package/dist/plan-digest.d.ts +59 -0
- package/dist/plan-digest.d.ts.map +1 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/rules/module-source.ts +56 -1
- package/dist/rules/terragrunt.ts +76 -0
- package/dist/rules/tf002.ts +1 -1
- package/dist/rules/tf038.ts +71 -0
- package/dist/rules/tf039.ts +64 -0
- package/dist/rules/tf040.ts +76 -0
- package/dist/rules/tf041.ts +56 -0
- package/dist/rules/tf042.ts +42 -0
- package/dist/rules/tf043.ts +49 -0
- package/dist/rules/tf044.ts +51 -0
- package/dist/rules/tf045.ts +47 -0
- package/dist/terragrunt/affected.d.ts +119 -0
- package/dist/terragrunt/affected.d.ts.map +1 -0
- package/dist/terragrunt/index.d.ts +11 -0
- package/dist/terragrunt/index.d.ts.map +1 -0
- package/dist/terragrunt/mocks.d.ts +147 -0
- package/dist/terragrunt/mocks.d.ts.map +1 -0
- package/dist/terragrunt/run.d.ts +130 -0
- package/dist/terragrunt/run.d.ts.map +1 -0
- package/dist/terragrunt/units.d.ts +103 -0
- package/dist/terragrunt/units.d.ts.map +1 -0
- package/dist/terragrunt/wave.d.ts +89 -0
- package/dist/terragrunt/wave.d.ts.map +1 -0
- package/package.json +12 -2
- package/src/__fixtures__/change-set/choudoufu-set-plan.change-set.golden.json +95 -0
- package/src/__fixtures__/change-set/choudoufu-set-plan.json +76 -0
- package/src/__fixtures__/change-set/choudoufu.part.golden.json +173 -0
- package/src/__fixtures__/change-set/choudoufu.plan.json +610 -0
- package/src/__fixtures__/change-set/terraform.import-forget.plan.json +81 -0
- package/src/__fixtures__/change-set/terraform.part.golden.json +173 -0
- package/src/__fixtures__/change-set/terraform.plan.json +589 -0
- package/src/__fixtures__/change-set/tofu.part.golden.json +173 -0
- package/src/__fixtures__/change-set/tofu.plan.json +588 -0
- package/src/__fixtures__/change-set/v1.tf.txt +21 -0
- package/src/__fixtures__/change-set/v2-module-app.tf.txt +4 -0
- package/src/__fixtures__/change-set/v2.tf.txt +21 -0
- package/src/__fixtures__/pin/choudoufu-live-waves-n5.json +83 -0
- package/src/__fixtures__/pin/largeset-oci-n5/apply-order.txt +5 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e01/estate.chdf.hcl +6 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e01/main.tf +33 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e02/estate.chdf.hcl +6 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e02/main.tf +45 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e03/estate.chdf.hcl +6 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e03/main.tf +47 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e04/estate.chdf.hcl +6 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e04/main.tf +31 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e05/estate.chdf.hcl +6 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e05/main.tf +27 -0
- package/src/__fixtures__/pin/largeset-oci-n5/fixture.json +77 -0
- package/src/__fixtures__/plan-summary/largeset-n5-bump.json +2071 -0
- package/src/__fixtures__/plan-summary/largeset-n5.summary.golden.json +95 -0
- package/src/__fixtures__/plan-summary/largeset-n5.summary.golden.md +22 -0
- package/src/__fixtures__/plan-summary/largeset-n5.summary.golden.txt +12 -0
- package/src/__fixtures__/terragrunt/affected/catalog/units/web/terragrunt.hcl +3 -0
- package/src/__fixtures__/terragrunt/affected/gitignore +3 -0
- package/src/__fixtures__/terragrunt/affected/live/dev/app/terragrunt.hcl +3 -0
- package/src/__fixtures__/terragrunt/affected/live/dev/vpc/terragrunt.hcl +3 -0
- package/src/__fixtures__/terragrunt/affected/live/prod/app/terragrunt.hcl +3 -0
- package/src/__fixtures__/terragrunt/affected/live/stg/terragrunt.stack.hcl +5 -0
- package/src/__fixtures__/terragrunt/affected/modules/app/main.tf +6 -0
- package/src/__fixtures__/terragrunt/affected/modules/app/policy.json +1 -0
- package/src/__fixtures__/terragrunt/affected/modules/net/main.tf +2 -0
- package/src/__fixtures__/terragrunt/affected/modules/thing/main.tf +3 -0
- package/src/__fixtures__/terragrunt/affected/root.hcl +5 -0
- package/src/__fixtures__/terragrunt/affected-cases.ts +126 -0
- package/src/__fixtures__/terragrunt/five-units/catalog/units/thing/terragrunt.hcl +3 -0
- package/src/__fixtures__/terragrunt/five-units/live/dev/app/terragrunt.hcl +13 -0
- package/src/__fixtures__/terragrunt/five-units/live/dev/db/terragrunt.hcl +8 -0
- package/src/__fixtures__/terragrunt/five-units/live/dev/vpc/terragrunt.hcl +3 -0
- package/src/__fixtures__/terragrunt/five-units/live/prod/app/terragrunt.hcl +8 -0
- package/src/__fixtures__/terragrunt/five-units/live/prod/vpc/terragrunt.hcl +3 -0
- package/src/__fixtures__/terragrunt/five-units/modules/thing/main.tf +7 -0
- package/src/__fixtures__/terragrunt/five-units/root.hcl +5 -0
- package/src/__fixtures__/terragrunt/record.ts +56 -0
- package/src/__fixtures__/terragrunt/recorded/affected-find.json +50 -0
- package/src/__fixtures__/terragrunt/recorded/failed-plan-report.json +36 -0
- package/src/__fixtures__/terragrunt/recorded/find.json +67 -0
- package/src/__fixtures__/terragrunt/recorded/version.txt +1 -0
- package/src/__fixtures__/terragrunt/recorded/wave-1/apply-report.json +22 -0
- package/src/__fixtures__/terragrunt/recorded/wave-1/json/live/dev/vpc/tfplan.json +1 -0
- package/src/__fixtures__/terragrunt/recorded/wave-1/json/live/prod/vpc/tfplan.json +1 -0
- package/src/__fixtures__/terragrunt/recorded/wave-1/plan-report.json +22 -0
- package/src/__fixtures__/terragrunt/recorded/wave-2/json/live/dev/db/tfplan.json +1 -0
- package/src/__fixtures__/terragrunt/recorded/wave-2/json/live/prod/app/tfplan.json +1 -0
- package/src/__fixtures__/terragrunt/recorded/wave-2/plan-report.json +22 -0
- package/src/change-set-combined-run.test.ts +156 -0
- package/src/change-set.test.ts +151 -0
- package/src/change-set.ts +273 -0
- package/src/changed-roots.test.ts +58 -0
- package/src/changed-roots.ts +102 -0
- package/src/commands.ts +112 -0
- package/src/components/capability-plugin.test.ts +91 -0
- package/src/components/capability-plugin.ts +131 -0
- package/src/components/pr-loop.tofu.test.ts +244 -0
- package/src/composites/terraform-pin-rollout-op.test.ts +69 -0
- package/src/composites/terraform-pin-rollout-op.ts +60 -0
- package/src/hcl/descend.ts +1 -1
- package/src/hcl/edges.ts +2 -2
- package/src/hcl/parse.test.ts +25 -0
- package/src/hcl/parse.ts +91 -6
- package/src/hcl/roots.ts +1 -1
- package/src/hcl/suppressions.ts +8 -2
- package/src/index.ts +18 -0
- package/src/lint/audit-catalog.ts +82 -0
- package/src/lint/audit.test.ts +3 -1
- package/src/lint/post-synth/fixtures/TF038/positive.tf +3 -0
- package/src/lint/post-synth/fixtures/TF039/positive.tf +4 -0
- package/src/lint/post-synth/fixtures/TF041/negative/terragrunt.hcl +12 -0
- package/src/lint/post-synth/fixtures/TF041/positive/terragrunt.hcl +7 -0
- package/src/lint/post-synth/fixtures/TF041/positive-apply/terragrunt.hcl +8 -0
- package/src/lint/post-synth/fixtures/TF042/negative/terragrunt.hcl +13 -0
- package/src/lint/post-synth/fixtures/TF042/positive/terragrunt.hcl +9 -0
- package/src/lint/post-synth/fixtures/TF043/negative/terragrunt.hcl +3 -0
- package/src/lint/post-synth/fixtures/TF043/negative-other/terragrunt.hcl +3 -0
- package/src/lint/post-synth/fixtures/TF043/positive-git/terragrunt.hcl +3 -0
- package/src/lint/post-synth/fixtures/TF043/positive-oci/terragrunt.hcl +3 -0
- package/src/lint/post-synth/fixtures/TF043/positive-tfr/terragrunt.hcl +3 -0
- package/src/lint/post-synth/fixtures/TF044/negative/terragrunt.hcl +9 -0
- package/src/lint/post-synth/fixtures/TF044/positive/terragrunt.hcl +7 -0
- package/src/lint/post-synth/fixtures/TF044/positive-generate/terragrunt.hcl +9 -0
- package/src/lint/post-synth/fixtures/TF045/negative/root.hcl +1 -0
- package/src/lint/post-synth/fixtures/TF045/negative/terragrunt.hcl +3 -0
- package/src/lint/post-synth/fixtures/TF045/positive/root.hcl +9 -0
- package/src/lint/post-synth/fixtures/TF045/positive/terragrunt.hcl +3 -0
- package/src/lint/post-synth/fixtures/TF045/unit-only/terragrunt.hcl +3 -0
- package/src/lint/post-synth/index.ts +16 -0
- package/src/lint/post-synth/module-source.test.ts +42 -1
- package/src/lint/post-synth/module-source.ts +56 -1
- package/src/lint/post-synth/terragrunt.ts +76 -0
- package/src/lint/post-synth/tf002.ts +1 -1
- package/src/lint/post-synth/tf038.test.ts +51 -0
- package/src/lint/post-synth/tf038.ts +71 -0
- package/src/lint/post-synth/tf039.test.ts +40 -0
- package/src/lint/post-synth/tf039.ts +64 -0
- package/src/lint/post-synth/tf040.test.ts +55 -0
- package/src/lint/post-synth/tf040.ts +76 -0
- package/src/lint/post-synth/tf041.test.ts +50 -0
- package/src/lint/post-synth/tf041.ts +56 -0
- package/src/lint/post-synth/tf042.test.ts +19 -0
- package/src/lint/post-synth/tf042.ts +42 -0
- package/src/lint/post-synth/tf043.test.ts +65 -0
- package/src/lint/post-synth/tf043.ts +49 -0
- package/src/lint/post-synth/tf044.test.ts +27 -0
- package/src/lint/post-synth/tf044.ts +51 -0
- package/src/lint/post-synth/tf045.test.ts +30 -0
- package/src/lint/post-synth/tf045.ts +47 -0
- package/src/op/activities/index.ts +4 -0
- package/src/op/activities/pin-rollout.ts +77 -0
- package/src/op/activities/terraform.test.ts +13 -0
- package/src/op/activities/terraform.ts +46 -86
- package/src/op/activity-contracts.test.ts +4 -1
- package/src/op/activity-contracts.ts +42 -0
- package/src/op/builders.ts +13 -0
- package/src/pin/bundle.test.ts +53 -0
- package/src/pin/edit-ts.test.ts +39 -0
- package/src/pin/edit-ts.ts +77 -0
- package/src/pin/edit.test.ts +199 -0
- package/src/pin/edit.ts +157 -0
- package/src/pin/forge.ts +85 -0
- package/src/pin/index.ts +22 -0
- package/src/pin/rollout.test.ts +232 -0
- package/src/pin/rollout.ts +451 -0
- package/src/pin/scan.ts +309 -0
- package/src/pin/source.ts +206 -0
- package/src/pin/waves.test.ts +101 -0
- package/src/pin/waves.ts +125 -0
- package/src/plan-digest.ts +99 -0
- package/src/plan-summary.test.ts +154 -0
- package/src/plugin.ts +25 -2
- package/src/terragrunt/affected.acceptance.test.ts +83 -0
- package/src/terragrunt/affected.test.ts +177 -0
- package/src/terragrunt/affected.ts +348 -0
- package/src/terragrunt/index.ts +11 -0
- package/src/terragrunt/mocks.acceptance.test.ts +105 -0
- package/src/terragrunt/mocks.test.ts +309 -0
- package/src/terragrunt/mocks.ts +324 -0
- package/src/terragrunt/run.ts +369 -0
- package/src/terragrunt/terragrunt.acceptance.test.ts +122 -0
- package/src/terragrunt/terragrunt.test.ts +332 -0
- package/src/terragrunt/units.ts +235 -0
- package/src/terragrunt/wave.ts +181 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared reading for the Terragrunt rules TF041 to TF045 (#3417).
|
|
3
|
+
*
|
|
4
|
+
* These rules look at `terragrunt.hcl` and `root.hcl`, which the parse reads
|
|
5
|
+
* into their own entity types (`TERRAGRUNT_*_TYPE` in `../../hcl/parse.ts`)
|
|
6
|
+
* and never into the module types the other TF rules check. Like the module
|
|
7
|
+
* source rules, they read the literal values hcl2json hands back: an
|
|
8
|
+
* attribute built from a function or a `local.` reference arrives as a
|
|
9
|
+
* `"${...}"` string and is treated as not determined, never as a finding.
|
|
10
|
+
*/
|
|
11
|
+
import { type Declarable } from "@intentius/chant/declarable";
|
|
12
|
+
import type { BlockBody } from "../../hcl/parse.js";
|
|
13
|
+
/** Entities of one Terragrunt type, with their keys, in map order. */
|
|
14
|
+
export declare function terragruntEntities(entities: ReadonlyMap<string, Declarable>, entityType: string): Array<{
|
|
15
|
+
key: string;
|
|
16
|
+
address: string;
|
|
17
|
+
file: string;
|
|
18
|
+
body: BlockBody;
|
|
19
|
+
}>;
|
|
20
|
+
/** An HCL expression hcl2json left as `"${...}"`: its value is not known without evaluating it. */
|
|
21
|
+
export declare function isExpression(value: unknown): boolean;
|
|
22
|
+
export type TerragruntSourceKind = "local" | "git" | "tfr" | "oci" | "other";
|
|
23
|
+
export interface TerragruntSourceClassification {
|
|
24
|
+
kind: TerragruntSourceKind;
|
|
25
|
+
/** Whether the source names a version: `?ref=` for git, `?version=` for `tfr://`, a tag or digest for `oci://`. Undefined for `local` and `other`. */
|
|
26
|
+
pinned?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Classify a unit's `terraform.source`. Git and `oci://` sources go through
|
|
30
|
+
* {@link classifyModuleSource}, the reader TF005 and TF038 use. `tfr://` is
|
|
31
|
+
* Terragrunt's own scheme for registry modules and takes its version from the
|
|
32
|
+
* `?version=` query argument. A source that holds an interpolation, or that
|
|
33
|
+
* names an absolute path or an archive URL, is `other` or `local` and is
|
|
34
|
+
* never reported.
|
|
35
|
+
*/
|
|
36
|
+
export declare function classifyTerragruntSource(source: string): TerragruntSourceClassification;
|
|
37
|
+
//# sourceMappingURL=terragrunt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terragrunt.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/terragrunt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,sEAAsE;AACtE,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EACzC,UAAU,EAAE,MAAM,GACjB,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAaxE;AAED,mGAAmG;AACnG,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;AAE7E,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,oBAAoB,CAAC;IAC3B,sJAAsJ;IACtJ,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,8BAA8B,CAoBvF"}
|
|
@@ -27,6 +27,8 @@
|
|
|
27
27
|
* would both credit the root with requirements it never declared and judge it
|
|
28
28
|
* on providers it never named.
|
|
29
29
|
*/
|
|
30
|
-
import type { PostSynthCheck } from "@intentius/chant/lint/post-synth";
|
|
30
|
+
import type { PostSynthCheck, PostSynthContext } from "@intentius/chant/lint/post-synth";
|
|
31
|
+
/** One implied provider name to the entity key that first implied it in file order. */
|
|
32
|
+
export declare function impliedProviders(entities: PostSynthContext["entities"], root: string): Map<string, string>;
|
|
31
33
|
export declare const tf002: PostSynthCheck;
|
|
32
34
|
//# sourceMappingURL=tf002.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tf002.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/tf002.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EACV,cAAc,
|
|
1
|
+
{"version":3,"file":"tf002.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/tf002.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAEjB,MAAM,kCAAkC,CAAC;AAkB1C,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA6B1G;AAyBD,eAAO,MAAM,KAAK,EAAE,cA2CnB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TF038: an `oci://` module source names no tag and no digest, or a mutable
|
|
3
|
+
* tag.
|
|
4
|
+
*
|
|
5
|
+
* OpenTofu resolves an OCI module source with no `tag` to the `latest` tag
|
|
6
|
+
* (https://opentofu.org/docs/language/modules/sources/), so an unpinned source
|
|
7
|
+
* and `?tag=latest` are the same thing: a push to the registry changes what
|
|
8
|
+
* the root provisions with no diff to review. A digest, or an exact version
|
|
9
|
+
* tag, holds it. `classifyModuleSource` (`./module-source.ts`) reads the tag
|
|
10
|
+
* and digest from either spelling.
|
|
11
|
+
*
|
|
12
|
+
* A warning rather than an error: a registry can make a version tag
|
|
13
|
+
* immutable, and a source that names `?tag=1.4.0` is read as pinned here
|
|
14
|
+
* whether or not the registry enforces that. A digest is the only pin the
|
|
15
|
+
* registry cannot move, which the message says. A source that names a digest
|
|
16
|
+
* is never flagged, whatever tag sits beside it.
|
|
17
|
+
*
|
|
18
|
+
* Scope: root and child modules alike (#2112), same as TF004 and TF005.
|
|
19
|
+
*/
|
|
20
|
+
import type { PostSynthCheck } from "@intentius/chant/lint/post-synth";
|
|
21
|
+
export declare const tf038: PostSynthCheck;
|
|
22
|
+
//# sourceMappingURL=tf038.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tf038.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/tf038.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,kCAAkC,CAAC;AAK1C,eAAO,MAAM,KAAK,EAAE,cAyCnB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TF039: a registry module's `version` is a range, not an exact version.
|
|
3
|
+
*
|
|
4
|
+
* TF004 flags a registry module with no `version`; a `version` of `~> 1.4`,
|
|
5
|
+
* `>= 1.4` or `>= 1.0, < 2.0` passes it, yet an upstream release inside the
|
|
6
|
+
* range changes what the root provisions with no diff to review. This rule is
|
|
7
|
+
* for projects that pin modules to one version (`1.4.0` or `= 1.4.0`).
|
|
8
|
+
*
|
|
9
|
+
* Off by default: it is a `report-only` catalog entry, so the `recommended`
|
|
10
|
+
* preset leaves it out and `lint.presets: { terraform: "all" }` (or a
|
|
11
|
+
* `lint.rules` entry for TF039) turns it on. Ranges are common and often
|
|
12
|
+
* intended, so a default warning would be noise for most roots. It is a
|
|
13
|
+
* separate rule from TF004 because a post-synth check receives no options
|
|
14
|
+
* (`PostSynthCheck.check(ctx)`), while the preset mechanism already carries
|
|
15
|
+
* exactly this on/off choice per rule id (#3190).
|
|
16
|
+
*
|
|
17
|
+
* A module that has no `version` is TF004's finding and is skipped here.
|
|
18
|
+
*
|
|
19
|
+
* Scope: root and child modules alike (#2112).
|
|
20
|
+
*/
|
|
21
|
+
import type { PostSynthCheck } from "@intentius/chant/lint/post-synth";
|
|
22
|
+
export declare const tf039: PostSynthCheck;
|
|
23
|
+
//# sourceMappingURL=tf039.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tf039.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/tf039.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,kCAAkC,CAAC;AAK1C,eAAO,MAAM,KAAK,EAAE,cAiCnB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TF040: a root that uses providers has no `.terraform.lock.hcl`.
|
|
3
|
+
*
|
|
4
|
+
* The lock file records the provider versions and hashes `terraform init`
|
|
5
|
+
* selected. Without it, each `init` resolves `required_providers` constraints
|
|
6
|
+
* afresh, so a provider release changes a plan with no diff. None of
|
|
7
|
+
* TF001 to TF029 looks at it.
|
|
8
|
+
*
|
|
9
|
+
* "Committed" is decided by presence: the file sits beside the root's `.tf`
|
|
10
|
+
* files in the source tree being parsed (`props.lockFile`, stamped by
|
|
11
|
+
* `parseTerraformRootDir` and by the local audit path). Whether git tracks it
|
|
12
|
+
* is not asked, so a lock file that is present but gitignored counts as
|
|
13
|
+
* committed. A parse with no directory to look in (a fetched repository,
|
|
14
|
+
* inline source) leaves `lockFile` unset and the rule reports nothing: not
|
|
15
|
+
* determined, not clean.
|
|
16
|
+
*
|
|
17
|
+
* A root that implies no provider (no `provider` block and no resource or data
|
|
18
|
+
* type) gets no lock file from `init`, so it is skipped, as is a live
|
|
19
|
+
* choudoufu root, which runs no `init`. One diagnostic per root, anchored on
|
|
20
|
+
* the first block that implies a provider.
|
|
21
|
+
*
|
|
22
|
+
* Off by default in both places: the `report-only` tier keeps it out of a
|
|
23
|
+
* build's `recommended` preset, and `auditOptIn` keeps it out of `chant audit`.
|
|
24
|
+
* Many estates run `init` in CI and never commit the file.
|
|
25
|
+
*
|
|
26
|
+
* Scope: root modules only (#2112); a child module has no lock file of its own.
|
|
27
|
+
*/
|
|
28
|
+
import type { PostSynthCheck } from "@intentius/chant/lint/post-synth";
|
|
29
|
+
export declare const tf040: PostSynthCheck;
|
|
30
|
+
//# sourceMappingURL=tf040.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tf040.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/tf040.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,kCAAkC,CAAC;AAM1C,eAAO,MAAM,KAAK,EAAE,cAqCnB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TF041: a Terragrunt `dependency` has `mock_outputs` and lets them stand in
|
|
3
|
+
* for `apply`.
|
|
4
|
+
*
|
|
5
|
+
* `mock_outputs` is what a dependency returns when it has no outputs yet.
|
|
6
|
+
* `mock_outputs_allowed_terraform_commands` limits which commands may use
|
|
7
|
+
* them. Terragrunt reads a missing list and an empty list the same way, as no
|
|
8
|
+
* limit (`shouldReturnMockOutputs` in `pkg/config/dependency.go`, v1.1.6:
|
|
9
|
+
* `nil || len == 0 || slices.Contains(list, command)`). So a dependency with
|
|
10
|
+
* mocks and no list, or a list that names `apply`, can apply the mock values
|
|
11
|
+
* to real state when the upstream unit has not been applied, and the apply
|
|
12
|
+
* reports success. The usual list is `["validate", "plan"]`.
|
|
13
|
+
*
|
|
14
|
+
* A list that is an expression (`local.mock_commands`) is not determined and
|
|
15
|
+
* passes. A dependency with `enabled = false` returns its mocks whatever the
|
|
16
|
+
* list says; that is a different decision and is not reported here.
|
|
17
|
+
*/
|
|
18
|
+
import type { PostSynthCheck } from "@intentius/chant/lint/post-synth";
|
|
19
|
+
export declare const tf041: PostSynthCheck;
|
|
20
|
+
//# sourceMappingURL=tf041.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tf041.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/tf041.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,kCAAkC,CAAC;AAI9G,eAAO,MAAM,KAAK,EAAE,cAiCnB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TF042: a Terragrunt `dependency` sets `skip_outputs = true` and
|
|
3
|
+
* `mock_outputs`.
|
|
4
|
+
*
|
|
5
|
+
* With `skip_outputs = true` Terragrunt never reads the upstream unit's
|
|
6
|
+
* outputs (`shouldGetOutputs` in `pkg/config/dependency.go`, v1.1.6), so the
|
|
7
|
+
* only values the dependency can return are the mocks. Every plan and apply
|
|
8
|
+
* the mocks are allowed for runs on them, however far the upstream unit has
|
|
9
|
+
* been applied. The pair is sometimes meant, to break a cycle or to avoid
|
|
10
|
+
* reading state, and then the mock values are the configuration; that is
|
|
11
|
+
* worth writing as inputs, which a reader of the unit can see.
|
|
12
|
+
*
|
|
13
|
+
* Only a literal `skip_outputs = true` is reported. A `skip_outputs` built
|
|
14
|
+
* from an expression is not determined.
|
|
15
|
+
*/
|
|
16
|
+
import type { PostSynthCheck } from "@intentius/chant/lint/post-synth";
|
|
17
|
+
export declare const tf042: PostSynthCheck;
|
|
18
|
+
//# sourceMappingURL=tf042.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tf042.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/tf042.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,kCAAkC,CAAC;AAI9G,eAAO,MAAM,KAAK,EAAE,cAqBnB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TF043: a Terragrunt unit's `terraform.source` names no version.
|
|
3
|
+
*
|
|
4
|
+
* A git source with no `?ref=` follows the default branch, a `tfr://` source
|
|
5
|
+
* with no `?version=` follows the registry's latest release, and an `oci://`
|
|
6
|
+
* source with no tag or digest pulls `latest`. A push or a release changes
|
|
7
|
+
* what the unit provisions with no diff to review. TF005 and TF038 do the same
|
|
8
|
+
* for `module` blocks; a Terragrunt unit has no `module` block, its source is
|
|
9
|
+
* the `source` argument of the `terraform` block.
|
|
10
|
+
*
|
|
11
|
+
* A local path and a source built from an expression (`${local.base}//x`) are
|
|
12
|
+
* not determined and pass. A mutable `?ref=main` is not judged
|
|
13
|
+
* here: the rule asks only whether a version is named.
|
|
14
|
+
*/
|
|
15
|
+
import type { PostSynthCheck } from "@intentius/chant/lint/post-synth";
|
|
16
|
+
export declare const tf043: PostSynthCheck;
|
|
17
|
+
//# sourceMappingURL=tf043.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tf043.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/tf043.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,kCAAkC,CAAC;AAU9G,eAAO,MAAM,KAAK,EAAE,cAuBnB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TF044: a Terragrunt config keeps state in a local backend.
|
|
3
|
+
*
|
|
4
|
+
* Read from `remote_state { backend = "local" }` and from a `generate` block
|
|
5
|
+
* whose `contents` declare `backend "local"`. State on the runner's disk is
|
|
6
|
+
* gone when the job ends, a second job cannot read what the first applied, and
|
|
7
|
+
* a git-range run, which checks out each side in a temporary directory, never
|
|
8
|
+
* sees state at all. A shared backend (S3, GCS, azurerm, a Terraform HTTP
|
|
9
|
+
* backend) holds it.
|
|
10
|
+
*
|
|
11
|
+
* A backend named by an expression is not determined and passes. A local
|
|
12
|
+
* backend is sometimes right for a throwaway sandbox; suppress the rule there
|
|
13
|
+
* with `# chant-ignore TF044`.
|
|
14
|
+
*/
|
|
15
|
+
import type { PostSynthCheck } from "@intentius/chant/lint/post-synth";
|
|
16
|
+
export declare const tf044: PostSynthCheck;
|
|
17
|
+
//# sourceMappingURL=tf044.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tf044.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/tf044.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,kCAAkC,CAAC;AAM9G,eAAO,MAAM,KAAK,EAAE,cA6BnB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TF045: no Terragrunt config sets `terragrunt_version_constraint`.
|
|
3
|
+
*
|
|
4
|
+
* The attribute makes Terragrunt refuse to run on a release outside the range.
|
|
5
|
+
* Without it each machine and each CI image runs whatever Terragrunt it
|
|
6
|
+
* installed, and a behaviour change between releases reaches a plan with no
|
|
7
|
+
* diff. It is usually set once, in the root config every unit includes.
|
|
8
|
+
*
|
|
9
|
+
* The rule looks at the whole set of configs in the scan and reports once. It
|
|
10
|
+
* reports only when the set holds a config that includes no other file (the
|
|
11
|
+
* root config, or a self-contained unit) and none of the configs sets the
|
|
12
|
+
* attribute. A set made only of units that include a parent it did not read,
|
|
13
|
+
* such as one unit directory passed alone, is not determined: the parent may
|
|
14
|
+
* set it. The finding is anchored on `root.hcl` when the set has one.
|
|
15
|
+
*
|
|
16
|
+
* Off by default: the `report-only` tier keeps it out of the `recommended`
|
|
17
|
+
* preset, since many repos pin Terragrunt in the toolchain (`.tool-versions`,
|
|
18
|
+
* a CI image) rather than in config.
|
|
19
|
+
*/
|
|
20
|
+
import type { PostSynthCheck } from "@intentius/chant/lint/post-synth";
|
|
21
|
+
export declare const tf045: PostSynthCheck;
|
|
22
|
+
//# sourceMappingURL=tf045.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tf045.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/tf045.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,kCAAkC,CAAC;AAI9G,eAAO,MAAM,KAAK,EAAE,cAsBnB,CAAC"}
|
package/dist/manifest.json
CHANGED
package/dist/okf/index.md
CHANGED
|
@@ -40,4 +40,12 @@ okf_version: '0.2'
|
|
|
40
40
|
* [TF035](/rules/TF035.md) - SQS queue turns server-side encryption off
|
|
41
41
|
* [TF036](/rules/TF036.md) - EBS volume does not ask for encryption
|
|
42
42
|
* [TF037](/rules/TF037.md) - ECR repository allows mutable image tags
|
|
43
|
+
* [TF038](/rules/TF038.md) - OCI module source has no tag or digest, or a mutable tag
|
|
44
|
+
* [TF039](/rules/TF039.md) - Registry module version is a range, not an exact version
|
|
45
|
+
* [TF040](/rules/TF040.md) - Root has no committed .terraform.lock.hcl
|
|
46
|
+
* [TF041](/rules/TF041.md) - Terragrunt dependency lets mock_outputs stand in for apply
|
|
47
|
+
* [TF042](/rules/TF042.md) - Terragrunt dependency sets skip_outputs together with mock_outputs
|
|
48
|
+
* [TF043](/rules/TF043.md) - Terragrunt terraform.source names no version (git ref, tfr version or oci tag)
|
|
49
|
+
* [TF044](/rules/TF044.md) - Terragrunt config keeps state in a local backend
|
|
50
|
+
* [TF045](/rules/TF045.md) - No Terragrunt config sets terragrunt_version_constraint
|
|
43
51
|
* [TF101](/rules/TF101.md) - terraformApply's planFile must reference a preceding terraformPlan step.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: post-synth-check
|
|
3
|
+
title: TF038
|
|
4
|
+
description: OCI module source has no tag or digest, or a mutable tag
|
|
5
|
+
id: TF038
|
|
6
|
+
severity: error
|
|
7
|
+
category: post-synth
|
|
8
|
+
lexicon: terraform
|
|
9
|
+
docs: https://intentius.io/chant/lexicons/terraform/rules/
|
|
10
|
+
---
|
|
11
|
+
OCI module source has no tag or digest, or a mutable tag
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: post-synth-check
|
|
3
|
+
title: TF039
|
|
4
|
+
description: Registry module version is a range, not an exact version
|
|
5
|
+
id: TF039
|
|
6
|
+
severity: error
|
|
7
|
+
category: post-synth
|
|
8
|
+
lexicon: terraform
|
|
9
|
+
docs: https://intentius.io/chant/lexicons/terraform/rules/
|
|
10
|
+
---
|
|
11
|
+
Registry module version is a range, not an exact version
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: post-synth-check
|
|
3
|
+
title: TF040
|
|
4
|
+
description: Root has no committed .terraform.lock.hcl
|
|
5
|
+
id: TF040
|
|
6
|
+
severity: error
|
|
7
|
+
category: post-synth
|
|
8
|
+
lexicon: terraform
|
|
9
|
+
docs: https://intentius.io/chant/lexicons/terraform/rules/
|
|
10
|
+
---
|
|
11
|
+
Root has no committed .terraform.lock.hcl
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: post-synth-check
|
|
3
|
+
title: TF041
|
|
4
|
+
description: Terragrunt dependency lets mock_outputs stand in for apply
|
|
5
|
+
id: TF041
|
|
6
|
+
severity: error
|
|
7
|
+
category: post-synth
|
|
8
|
+
lexicon: terraform
|
|
9
|
+
docs: https://intentius.io/chant/lexicons/terraform/rules/
|
|
10
|
+
---
|
|
11
|
+
Terragrunt dependency lets mock_outputs stand in for apply
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: post-synth-check
|
|
3
|
+
title: TF042
|
|
4
|
+
description: Terragrunt dependency sets skip_outputs together with mock_outputs
|
|
5
|
+
id: TF042
|
|
6
|
+
severity: error
|
|
7
|
+
category: post-synth
|
|
8
|
+
lexicon: terraform
|
|
9
|
+
docs: https://intentius.io/chant/lexicons/terraform/rules/
|
|
10
|
+
---
|
|
11
|
+
Terragrunt dependency sets skip_outputs together with mock_outputs
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: post-synth-check
|
|
3
|
+
title: TF043
|
|
4
|
+
description: Terragrunt terraform.source names no version (git ref, tfr version or oci tag)
|
|
5
|
+
id: TF043
|
|
6
|
+
severity: error
|
|
7
|
+
category: post-synth
|
|
8
|
+
lexicon: terraform
|
|
9
|
+
docs: https://intentius.io/chant/lexicons/terraform/rules/
|
|
10
|
+
---
|
|
11
|
+
Terragrunt terraform.source names no version (git ref, tfr version or oci tag)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: post-synth-check
|
|
3
|
+
title: TF044
|
|
4
|
+
description: Terragrunt config keeps state in a local backend
|
|
5
|
+
id: TF044
|
|
6
|
+
severity: error
|
|
7
|
+
category: post-synth
|
|
8
|
+
lexicon: terraform
|
|
9
|
+
docs: https://intentius.io/chant/lexicons/terraform/rules/
|
|
10
|
+
---
|
|
11
|
+
Terragrunt config keeps state in a local backend
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: post-synth-check
|
|
3
|
+
title: TF045
|
|
4
|
+
description: No Terragrunt config sets terragrunt_version_constraint
|
|
5
|
+
id: TF045
|
|
6
|
+
severity: error
|
|
7
|
+
category: post-synth
|
|
8
|
+
lexicon: terraform
|
|
9
|
+
docs: https://intentius.io/chant/lexicons/terraform/rules/
|
|
10
|
+
---
|
|
11
|
+
No Terragrunt config sets terragrunt_version_constraint
|
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
* - choudoufuLiveLs: `live-ls -estate=<estate> -json [-consistent]` (#2103).
|
|
17
17
|
* - choudoufuLiveCheck: `live-check -json`, no cloud calls (#2103).
|
|
18
18
|
* - choudoufuAdopt: the tag writes that claim an adoption ledger's matches (#2105).
|
|
19
|
+
* - terraformPinRollout: one run of a pin-bump rollout, opening at most one
|
|
20
|
+
* wave's pull request (#3189). It loads the HCL parser on first call.
|
|
19
21
|
*
|
|
20
22
|
* The module is dependency-light on purpose: it shells out to the configured
|
|
21
23
|
* binary and reads the `terraform` config namespace, and never touches the
|
|
@@ -26,4 +28,6 @@
|
|
|
26
28
|
export { terraformInit, terraformPlan, terraformApply, terraformShow, choudoufuLivePlan, choudoufuLiveLs, choudoufuLiveCheck, choudoufuAdopt, terraformInitCommand, terraformPlanCommand, terraformApplyCommand, terraformShowCommand, choudoufuLivePlanCommand, choudoufuLiveLsCommand, choudoufuLiveCheckCommand, terraformEnvironment, terraformBinary, countPlanChanges, countLivePlanUnowned, isOlderVersion, parseChoudoufuVersion, quoteArg, DEFAULT_PLAN_FILE, DEFAULT_TERRAFORM_BINARY, DEFAULT_LIVE_PLAN_DOCUMENT_FILE, MIN_CHOUDOUFU_VERSION, classifyApprovalRefusal, CHOUDOUFU_LIVE_PLAN_OUT_REFUSAL, CHOUDOUFU_APPROVAL_EXIT_CODE, CHOUDOUFU_APPROVAL_MISMATCH_REFUSAL, CHOUDOUFU_WRONG_ESTATE_REFUSAL, } from "./terraform.js";
|
|
27
29
|
export type { TerraformRootArgs, TerraformInitArgs, TerraformPlanArgs, TerraformApplyArgs, TerraformShowArgs, ChoudoufuLivePlanArgs, ChoudoufuLiveLsArgs, ChoudoufuLiveCheckArgs, ChoudoufuAdoptArgs, TerraformInitResult, TerraformPlanResult, TerraformApplyResult, TerraformApprovalRefusal, TerraformShowResult, ChoudoufuLivePlanResult, ChoudoufuLiveLsResult, ChoudoufuLiveCheckResult, ChoudoufuAdoptResult, AdoptionRefusal, PlanChangeCounts, LivePlanUnownedCounts, } from "./terraform.js";
|
|
28
30
|
export { detectLiveEstate } from "./live-detect.js";
|
|
31
|
+
export { terraformPinRollout } from "./pin-rollout.js";
|
|
32
|
+
export type { TerraformPinRolloutArgs, TerraformPinRolloutResult } from "./pin-rollout.js";
|
|
29
33
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/op/activities/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/op/activities/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,QAAQ,EACR,iBAAiB,EACjB,wBAAwB,EACxB,+BAA+B,EAC/B,qBAAqB,EACrB,uBAAuB,EACvB,+BAA+B,EAC/B,4BAA4B,EAC5B,mCAAmC,EACnC,8BAA8B,GAC/B,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,YAAY,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `terraformPinRollout`: one run of a pin-bump rollout (#3189), as an Op
|
|
3
|
+
* activity. `chant terraform pin-rollout` calls the same function.
|
|
4
|
+
*
|
|
5
|
+
* Each run reads where the rollout stands on the forge and opens at most one
|
|
6
|
+
* wave's pull request (`../../pin/rollout.ts`). Run it again, by hand or on
|
|
7
|
+
* an Op `schedule`, to move on once a wave's PR has merged and its roots have
|
|
8
|
+
* applied. A run that finds a failed root or a PR closed without merging
|
|
9
|
+
* throws, naming it, so the run fails rather than reporting success.
|
|
10
|
+
*
|
|
11
|
+
* The HCL parser, the pin code and the TypeScript editor load on first call,
|
|
12
|
+
* so importing the activities loads none of them.
|
|
13
|
+
*/
|
|
14
|
+
import type { PinRoot, PinRolloutMode, PinRolloutResult } from "../../pin/index.js";
|
|
15
|
+
export interface TerraformPinRolloutArgs {
|
|
16
|
+
/** The module, as its `source` names it without the pin: `oci://registry.example.com/modules/vpc`. */
|
|
17
|
+
module: string;
|
|
18
|
+
/** The pin the roots are at now. */
|
|
19
|
+
from: string;
|
|
20
|
+
/** The pin to move them to: an exact version, tag, ref or `sha256:` digest. */
|
|
21
|
+
to: string;
|
|
22
|
+
/** The roots, by directory relative to the repository. Default: every root that calls the module. */
|
|
23
|
+
roots?: PinRoot[];
|
|
24
|
+
/** Roots that form wave 1. */
|
|
25
|
+
canaries?: string[];
|
|
26
|
+
/** A `choudoufu live-waves -json` document to take the waves from, instead of canaries and dependency order. */
|
|
27
|
+
wavesFrom?: string;
|
|
28
|
+
/** The directory choudoufu ran in, relative to the repository, when its roots are relative to that. */
|
|
29
|
+
wavesPrefix?: string;
|
|
30
|
+
/** `report` (default) or `pull-request`. */
|
|
31
|
+
mode?: PinRolloutMode;
|
|
32
|
+
/** The branch PRs target. Default: the remote's default branch. */
|
|
33
|
+
base?: string;
|
|
34
|
+
/** Default `origin`. */
|
|
35
|
+
remote?: string;
|
|
36
|
+
/** The apply check each root reports on the merge commit, with `{root}` for its directory. Default `apply/{root}`. */
|
|
37
|
+
appliedCheck?: string;
|
|
38
|
+
/** A directory in the repository. Default: the working directory. */
|
|
39
|
+
cwd?: string;
|
|
40
|
+
}
|
|
41
|
+
export type TerraformPinRolloutResult = PinRolloutResult;
|
|
42
|
+
/** Run one step of a pin-bump rollout. Throws when the rollout has stopped. */
|
|
43
|
+
export declare function terraformPinRollout(args: TerraformPinRolloutArgs): Promise<TerraformPinRolloutResult>;
|
|
44
|
+
/** The same run, returning a stopped rollout instead of throwing. `chant terraform pin-rollout` calls this. */
|
|
45
|
+
export declare function readPinRollout(args: TerraformPinRolloutArgs): Promise<TerraformPinRolloutResult>;
|
|
46
|
+
//# sourceMappingURL=pin-rollout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pin-rollout.d.ts","sourceRoot":"","sources":["../../../src/op/activities/pin-rollout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE3E,MAAM,WAAW,uBAAuB;IACtC,sGAAsG;IACtG,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,EAAE,EAAE,MAAM,CAAC;IACX,qGAAqG;IACrG,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,gHAAgH;IAChH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uGAAuG;IACvG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sHAAsH;IACtH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,yBAAyB,GAAG,gBAAgB,CAAC;AAEzD,+EAA+E;AAC/E,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAI3G;AAED,+GAA+G;AAC/G,wBAAsB,cAAc,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAqBtG"}
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
* module load (`ensureChoudoufuVersion`) and refuses a binary older than
|
|
39
39
|
* {@link MIN_CHOUDOUFU_VERSION}.
|
|
40
40
|
*/
|
|
41
|
+
import type { ChangeSetPart } from "@intentius/chant/change-set";
|
|
41
42
|
import type { TerraformConfig, TerraformRootConfig } from "../../config.js";
|
|
42
43
|
import { type AdoptionCandidate } from "../adoption.js";
|
|
43
44
|
/** Plan file written into the root directory when a step names none. */
|
|
@@ -111,6 +112,14 @@ export interface TerraformPlanArgs extends TerraformRootArgs {
|
|
|
111
112
|
planFile?: string;
|
|
112
113
|
/** `-destroy`: plan the removal of everything the root manages. */
|
|
113
114
|
destroy?: boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Input variables, passed as `-var` after the root's `-var-file`s, so they
|
|
117
|
+
* win over a var file that sets the same name (#3049). A string goes as it
|
|
118
|
+
* is; anything else as JSON, which terraform reads as HCL for a list, a map
|
|
119
|
+
* or an object. This is how a value another root produced, wired with
|
|
120
|
+
* `stackOutput()`, reaches the plan.
|
|
121
|
+
*/
|
|
122
|
+
vars?: Record<string, unknown>;
|
|
114
123
|
}
|
|
115
124
|
export interface TerraformApplyArgs extends TerraformRootArgs {
|
|
116
125
|
/**
|
|
@@ -203,56 +212,7 @@ export interface PlanChangeCounts {
|
|
|
203
212
|
/** Resources to destroy. This is the number an approval gate exists for. */
|
|
204
213
|
destroys: number;
|
|
205
214
|
}
|
|
206
|
-
|
|
207
|
-
* One resource's proposed change, as a plan digest sees it (#2300) — the
|
|
208
|
-
* projection of a `terraform show -json` `resource_changes` entry that
|
|
209
|
-
* survives into {@link terraformPlanDigest}.
|
|
210
|
-
*/
|
|
211
|
-
export interface TerraformPlannedChange {
|
|
212
|
-
address: unknown;
|
|
213
|
-
mode: unknown;
|
|
214
|
-
type: unknown;
|
|
215
|
-
name: unknown;
|
|
216
|
-
index: unknown;
|
|
217
|
-
provider_name: unknown;
|
|
218
|
-
deposed: unknown;
|
|
219
|
-
actions: unknown;
|
|
220
|
-
before: unknown;
|
|
221
|
-
after: unknown;
|
|
222
|
-
after_unknown: unknown;
|
|
223
|
-
replace_paths: unknown;
|
|
224
|
-
importing: unknown;
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* The change set a `terraform show -json` plan describes, canonicalised
|
|
228
|
-
* (#2300): every proposed change, at its address, with the values that would
|
|
229
|
-
* be written, sorted so two renderings of the same plan project identically.
|
|
230
|
-
*
|
|
231
|
-
* Everything else in the document is dropped, and the drops are the point —
|
|
232
|
-
* see `packages/core/src/lifecycle/plan-digest.ts` for the general rule. Here
|
|
233
|
-
* that means `timestamp` and `terraform_version` (when the plan was taken and
|
|
234
|
-
* by which binary), `format_version` (how it was rendered), `prior_state` and
|
|
235
|
-
* `planned_values` (restatements of the same change set from another angle),
|
|
236
|
-
* `configuration` (the source that produced it, which can be refactored
|
|
237
|
-
* without changing a single proposed action) and `checks` / `relevant_
|
|
238
|
-
* attributes` (diagnostics about the plan, not the plan). What is left is
|
|
239
|
-
* what applying it would do.
|
|
240
|
-
*/
|
|
241
|
-
export declare function terraformPlanChangeSet(planJson: unknown): {
|
|
242
|
-
resourceChanges: TerraformPlannedChange[];
|
|
243
|
-
outputChanges: unknown;
|
|
244
|
-
};
|
|
245
|
-
/**
|
|
246
|
-
* The identity of a terraform plan (#2300): {@link terraformPlanChangeSet}
|
|
247
|
-
* hashed. This is what a `TerraformApplyOp` gate binds its approval to, and
|
|
248
|
-
* what a later run recomputes and compares.
|
|
249
|
-
*
|
|
250
|
-
* Taken over the `show -json` rendering rather than the plan file's bytes on
|
|
251
|
-
* purpose: the file is an opaque, version-stamped archive, and two runs of
|
|
252
|
-
* `plan -out` over an unchanged root produce different bytes. The rendering
|
|
253
|
-
* is the same plan both times.
|
|
254
|
-
*/
|
|
255
|
-
export declare function terraformPlanDigest(planJson: unknown): string;
|
|
215
|
+
export { terraformPlanChangeSet, terraformPlanDigest, type TerraformPlannedChange } from "../../plan-digest.js";
|
|
256
216
|
/** What {@link terraformPlan} resolved. Carries the plan itself, so no later step re-plans. */
|
|
257
217
|
export interface TerraformPlanResult extends PlanChangeCounts {
|
|
258
218
|
/** `true` when terraform reported exit 2 under `-detailed-exitcode`: the plan proposes changes. */
|
|
@@ -272,6 +232,13 @@ export interface TerraformPlanResult extends PlanChangeCounts {
|
|
|
272
232
|
* plan.out.planDigest })`.
|
|
273
233
|
*/
|
|
274
234
|
planDigest: string;
|
|
235
|
+
/**
|
|
236
|
+
* This root's part of a change-set document (#3181): every proposed change
|
|
237
|
+
* as an entry, the root's name as the member, and {@link planDigest} as the
|
|
238
|
+
* member's plan digest. Hand the parts of a run's roots to
|
|
239
|
+
* `composeChangeSet` and bind the run's gate to the document's digest.
|
|
240
|
+
*/
|
|
241
|
+
changeSet: ChangeSetPart;
|
|
275
242
|
}
|
|
276
243
|
/**
|
|
277
244
|
* Why a live apply refused the approval artifact it was handed. Both are
|
|
@@ -481,6 +448,7 @@ export declare function terraformPlanCommand(opts: {
|
|
|
481
448
|
binary: string;
|
|
482
449
|
planFile: string;
|
|
483
450
|
varFiles?: string[];
|
|
451
|
+
vars?: Record<string, unknown>;
|
|
484
452
|
destroy?: boolean;
|
|
485
453
|
}): string;
|
|
486
454
|
/**
|
|
@@ -631,6 +599,12 @@ export declare function classifyApprovalRefusal(output: string): TerraformApprov
|
|
|
631
599
|
* Uses the longInfra profile.
|
|
632
600
|
*/
|
|
633
601
|
export declare function terraformApply(args: TerraformApplyArgs, signal?: AbortSignal): Promise<TerraformApplyResult>;
|
|
602
|
+
/**
|
|
603
|
+
* `terraform output -json` in the named root, as `{ name: value }` (#3049).
|
|
604
|
+
* A sensitive output's value comes back like any other, since the caller
|
|
605
|
+
* asked for the values to hand them on.
|
|
606
|
+
*/
|
|
607
|
+
export declare function terraformOutputs(args: TerraformRootArgs, signal?: AbortSignal): Promise<Record<string, unknown>>;
|
|
634
608
|
/**
|
|
635
609
|
* `terraform show` over current state, or over a saved plan when `planFile` is
|
|
636
610
|
* given. Returns the parsed `-json` output and the `-no-color` render, plus
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terraform.d.ts","sourceRoot":"","sources":["../../../src/op/activities/terraform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;
|
|
1
|
+
{"version":3,"file":"terraform.d.ts","sourceRoot":"","sources":["../../../src/op/activities/terraform.ts"],"names":[],"mappings":"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"}
|