@intentius/chant-lexicon-azure 0.42.1 → 0.44.2
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/landing-zone.d.ts +2 -2
- package/dist/governance.d.ts +8 -8
- package/dist/governance.d.ts.map +1 -1
- package/dist/integrity.json +5 -5
- package/dist/lint/post-synth/azr031.d.ts +1 -1
- package/dist/lint/post-synth/azr032.d.ts +1 -1
- package/dist/lint/post-synth/azr033.d.ts +1 -1
- package/dist/manifest.json +1 -1
- package/dist/rules/azr031.ts +1 -1
- package/dist/rules/azr032.ts +1 -1
- package/dist/rules/azr033.ts +1 -1
- package/package.json +2 -2
- package/src/composites/landing-zone.test.ts +3 -3
- package/src/composites/landing-zone.ts +2 -2
- package/src/governance.test.ts +1 -1
- package/src/governance.ts +9 -9
- package/src/index.ts +2 -2
- package/src/lint/audit-catalog.ts +1 -1
- package/src/lint/post-synth/azr031.ts +1 -1
- package/src/lint/post-synth/azr032.ts +1 -1
- package/src/lint/post-synth/azr033.ts +1 -1
- package/src/serializer.ts +1 -1
- package/src/validate.ts +1 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Landing-zone bootstrap composites
|
|
2
|
+
* Landing-zone bootstrap composites — the Azure slice.
|
|
3
3
|
*
|
|
4
4
|
* Fixed-shape resources for greenfield creation of the recommended
|
|
5
5
|
* governance foundation. The evaluability rules (EVL002/004) require
|
|
6
6
|
* composites to declare a fixed set of resources, so these carry the
|
|
7
7
|
* foundation only; arbitrary management-group/subscription trees are
|
|
8
8
|
* authored as config with `landingZoneConfig()` (../governance.ts) and
|
|
9
|
-
* reconciled by
|
|
9
|
+
* reconciled by an external governance reconciler, and further groups/subscriptions
|
|
10
10
|
* are declared as ordinary resources.
|
|
11
11
|
*
|
|
12
12
|
* A single ARM template cannot mix deployment scopes (AZR030, #1545), so
|
package/dist/governance.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Azure governance authoring
|
|
3
|
-
* shape
|
|
2
|
+
* Azure governance authoring: the desired-state config
|
|
3
|
+
* shape an external governance reconciler reconciles, and `landingZoneConfig()` — the
|
|
4
4
|
* typed authoring layer that emits it.
|
|
5
5
|
*
|
|
6
6
|
* This is deliberately NOT a composite. The evaluability rules (EVL002/004,
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* the AWS/GCP slices (lexicons/{aws,gcp}/src/governance.ts): authoring emits
|
|
10
10
|
* config (this module, arbitrary cardinality); resources for greenfield
|
|
11
11
|
* bootstrap are the fixed-shape composites in `composites/landing-zone.ts`;
|
|
12
|
-
* the
|
|
12
|
+
* the reconciler consumes only the config.
|
|
13
13
|
*
|
|
14
14
|
* Azure has no OrganizationRoot analog — the tenant and its root management
|
|
15
15
|
* group come from Entra ID, never from the resource API. Subscriptions the
|
|
@@ -31,9 +31,9 @@ export interface PolicyConfig {
|
|
|
31
31
|
/** A subscription declared inside a management group. */
|
|
32
32
|
export interface SubscriptionConfig {
|
|
33
33
|
name: string;
|
|
34
|
-
/** An existing subscription to place. Omitted: the
|
|
34
|
+
/** An existing subscription to place. Omitted: the reconciler creates one via a tenant-scope alias. */
|
|
35
35
|
subscriptionId?: string;
|
|
36
|
-
/** Billing scope for subscriptions the
|
|
36
|
+
/** Billing scope for subscriptions the reconciler creates. */
|
|
37
37
|
billingScope?: string;
|
|
38
38
|
workload?: "Production" | "DevTest";
|
|
39
39
|
}
|
|
@@ -48,9 +48,9 @@ export interface ManagementGroupConfig {
|
|
|
48
48
|
}
|
|
49
49
|
/**
|
|
50
50
|
* The desired-state governance tree for one Azure tenant. This is the shape
|
|
51
|
-
*
|
|
51
|
+
* an external governance reconciler loads as config — the Azure counterpart of
|
|
52
52
|
* `AwsGovernanceConfig`/`GcpGovernanceConfig`. Cycles map onto the
|
|
53
|
-
* governance verbs
|
|
53
|
+
* governance verbs: the management-group/subscription tree is
|
|
54
54
|
* `org-unit`, policy assignments are `policy-guardrail`, the activity-log
|
|
55
55
|
* sink is `audit-sink`.
|
|
56
56
|
*/
|
|
@@ -110,7 +110,7 @@ export interface LandingZoneConfigProps {
|
|
|
110
110
|
activityLogWorkspaceId?: string;
|
|
111
111
|
}
|
|
112
112
|
/**
|
|
113
|
-
* Author the desired-state tree
|
|
113
|
+
* Author the desired-state tree an external governance reconciler reconciles. Pure.
|
|
114
114
|
* Throws when the tree assigns a policy name with no definition; only
|
|
115
115
|
* policies the tree actually assigns are included in the output.
|
|
116
116
|
*/
|
package/dist/governance.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../src/governance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,qFAAqF;AACrF,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../src/governance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,qFAAqF;AACrF,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,uGAAuG;IACvG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CACrC;AAED,4FAA4F;AAC5F,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CAClD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE;QACN,iEAAiE;QACjE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,qFAAqF;QACrF,+BAA+B,CAAC,EAAE,OAAO,CAAC;KAC3C,CAAC;IACF,4EAA4E;IAC5E,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACxD,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACvC,kCAAkC;IAClC,UAAU,CAAC,EAAE;QACX,WAAW,CAAC,EAAE;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC;KACvC,CAAC;CACH;AAMD,eAAO,MAAM,sBAAsB,EAAE,YAQpC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,YA4BlC,CAAC;AAEF,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,YAAY,CAe9E;AAED;;;;;;GAMG;AACH,eAAO,MAAM,2CAA2C,8FACqC,CAAC;AAE9F;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAK9E,CAAC;AAMF,MAAM,WAAW,sBAAsB;IACrC;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,2IAA2I;IAC3I,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACzD,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxC,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,mGAAmG;IACnG,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,sBAA2B,GAAG,qBAAqB,CA2C3F"}
|
package/dist/integrity.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"algorithm": "sha256",
|
|
3
3
|
"artifacts": {
|
|
4
|
-
"manifest.json": "
|
|
4
|
+
"manifest.json": "2145b0e429f811b3dd11e55f7bc68a9668976e280d1d8c6e7d520c10eacc2ccb",
|
|
5
5
|
"meta.json": "760a8d2e359be71f29a990339cb075701fe668e6275dfa923b9d112474ba660a",
|
|
6
6
|
"types/index.d.ts": "c5a8a3e107b07a11ac992fa7d6d136fe1a71c99a89c57921b3e4bc86361adb3f",
|
|
7
7
|
"rules/hardcoded-location.ts": "a9b1d1cec93f2ca9c5206641f53fc9621cefcfd2c00b3ab89c194b30a75fa949",
|
|
@@ -29,13 +29,13 @@
|
|
|
29
29
|
"rules/azr028.ts": "cbb0b780f62478b3cf26261e28a41f231f202d6bb8905c96b84a1e4080df9a1a",
|
|
30
30
|
"rules/azr029.ts": "18e6cef437207239aa8c8f1b382e0f95661cb0bca0de83ca293f66f0db446ee0",
|
|
31
31
|
"rules/azr030.ts": "81ede36e17290b860d51d1a0d20769383f903c5cc84036168f1d74b9befe065e",
|
|
32
|
-
"rules/azr031.ts": "
|
|
33
|
-
"rules/azr032.ts": "
|
|
34
|
-
"rules/azr033.ts": "
|
|
32
|
+
"rules/azr031.ts": "7f0654c9dce1e3a1a86818d8b4d0201fb4600021f7a4a757c36b1513fe16e0fd",
|
|
33
|
+
"rules/azr032.ts": "ea94cc7fdece0812c43898c76c4b8a115a306157b741fe3b76fe726335f6c2d2",
|
|
34
|
+
"rules/azr033.ts": "d440ec79a1563160bb7c8cc29c81880da71997c872215f14ec3be18f05a07ed3",
|
|
35
35
|
"skills/chant-azure.md": "86399e4fafd35cdf56670b32dbff5db42a4bfa1453b25231c4ee15eea9a2a1b9",
|
|
36
36
|
"skills/chant-azure-security.md": "95ab789202662f60b43cf2fce1ae549cbcf5b689306481dabb656847281879ff",
|
|
37
37
|
"skills/chant-azure-patterns.md": "1a3bacfac612826b77332d2692a59195638db9f1b5e8ea2eda7579621d25f603",
|
|
38
38
|
"skills/chant-azure-aks.md": "2d4e0098c1a22b54ffadd410564d9df0f3a04cb4eb7c6261f20ae33106e7aca8"
|
|
39
39
|
},
|
|
40
|
-
"composite": "
|
|
40
|
+
"composite": "7f758770238b4b502b32ce21b88475570a479cf95306ee84a899fc1838c9a2a2"
|
|
41
41
|
}
|
package/dist/manifest.json
CHANGED
package/dist/rules/azr031.ts
CHANGED
package/dist/rules/azr032.ts
CHANGED
package/dist/rules/azr033.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentius/chant-lexicon-azure",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.44.2",
|
|
4
4
|
"description": "Azure lexicon for chant — declarative IaC in TypeScript",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://intentius.io/chant",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"typescript": "^5.9.3"
|
|
75
75
|
},
|
|
76
76
|
"peerDependencies": {
|
|
77
|
-
"@intentius/chant": "^0.
|
|
77
|
+
"@intentius/chant": "^0.44.2",
|
|
78
78
|
"typescript": "^5.9.3"
|
|
79
79
|
}
|
|
80
80
|
}
|
|
@@ -8,7 +8,7 @@ function p(member: unknown): Record<string, any> {
|
|
|
8
8
|
return (member as any).props;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
describe("GovernanceFoundation
|
|
11
|
+
describe("GovernanceFoundation", () => {
|
|
12
12
|
test("declares the foundation management groups and the subscription tenant policy", () => {
|
|
13
13
|
const lz = GovernanceFoundation({});
|
|
14
14
|
expect(Object.keys(lz.members)).toEqual([
|
|
@@ -47,7 +47,7 @@ describe("GovernanceFoundation (#791)", () => {
|
|
|
47
47
|
});
|
|
48
48
|
});
|
|
49
49
|
|
|
50
|
-
describe("GovernanceBaseline
|
|
50
|
+
describe("GovernanceBaseline", () => {
|
|
51
51
|
test("defines and assigns the two baseline policies", () => {
|
|
52
52
|
const gb = GovernanceBaseline({});
|
|
53
53
|
expect(Object.keys(gb.members)).toEqual([
|
|
@@ -76,7 +76,7 @@ describe("GovernanceBaseline (#791)", () => {
|
|
|
76
76
|
});
|
|
77
77
|
});
|
|
78
78
|
|
|
79
|
-
describe("LocationRestriction and ActivityLogSink
|
|
79
|
+
describe("LocationRestriction and ActivityLogSink", () => {
|
|
80
80
|
test("LocationRestriction defines and assigns the allowed-locations policy", () => {
|
|
81
81
|
const lr = LocationRestriction({ locations: ["westeurope"] });
|
|
82
82
|
const def = p(lr.definitionLocationRestriction);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Landing-zone bootstrap composites
|
|
2
|
+
* Landing-zone bootstrap composites — the Azure slice.
|
|
3
3
|
*
|
|
4
4
|
* Fixed-shape resources for greenfield creation of the recommended
|
|
5
5
|
* governance foundation. The evaluability rules (EVL002/004) require
|
|
6
6
|
* composites to declare a fixed set of resources, so these carry the
|
|
7
7
|
* foundation only; arbitrary management-group/subscription trees are
|
|
8
8
|
* authored as config with `landingZoneConfig()` (../governance.ts) and
|
|
9
|
-
* reconciled by
|
|
9
|
+
* reconciled by an external governance reconciler, and further groups/subscriptions
|
|
10
10
|
* are declared as ordinary resources.
|
|
11
11
|
*
|
|
12
12
|
* A single ARM template cannot mix deployment scopes (AZR030, #1545), so
|
package/src/governance.test.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describe, expect, test } from "vitest";
|
|
2
2
|
import { landingZoneConfig, FOUNDATION_MANAGEMENT_GROUPS } from "./governance";
|
|
3
3
|
|
|
4
|
-
describe("landingZoneConfig
|
|
4
|
+
describe("landingZoneConfig", () => {
|
|
5
5
|
test("the default is the recommended foundation", () => {
|
|
6
6
|
const cfg = landingZoneConfig();
|
|
7
7
|
expect(Object.keys(cfg.managementGroups)).toEqual(["Security", "Infrastructure", "Sandbox", "Workloads"]);
|
package/src/governance.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Azure governance authoring
|
|
3
|
-
* shape
|
|
2
|
+
* Azure governance authoring: the desired-state config
|
|
3
|
+
* shape an external governance reconciler reconciles, and `landingZoneConfig()` — the
|
|
4
4
|
* typed authoring layer that emits it.
|
|
5
5
|
*
|
|
6
6
|
* This is deliberately NOT a composite. The evaluability rules (EVL002/004,
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* the AWS/GCP slices (lexicons/{aws,gcp}/src/governance.ts): authoring emits
|
|
10
10
|
* config (this module, arbitrary cardinality); resources for greenfield
|
|
11
11
|
* bootstrap are the fixed-shape composites in `composites/landing-zone.ts`;
|
|
12
|
-
* the
|
|
12
|
+
* the reconciler consumes only the config.
|
|
13
13
|
*
|
|
14
14
|
* Azure has no OrganizationRoot analog — the tenant and its root management
|
|
15
15
|
* group come from Entra ID, never from the resource API. Subscriptions the
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
// ---------------------------------------------------------------------------
|
|
22
|
-
// The desired-state config shape
|
|
22
|
+
// The desired-state config shape an external governance reconciler consumes
|
|
23
23
|
// ---------------------------------------------------------------------------
|
|
24
24
|
|
|
25
25
|
/** A custom policy definition, keyed by name in `AzureGovernanceConfig.policies`. */
|
|
@@ -37,9 +37,9 @@ export interface PolicyConfig {
|
|
|
37
37
|
/** A subscription declared inside a management group. */
|
|
38
38
|
export interface SubscriptionConfig {
|
|
39
39
|
name: string;
|
|
40
|
-
/** An existing subscription to place. Omitted: the
|
|
40
|
+
/** An existing subscription to place. Omitted: the reconciler creates one via a tenant-scope alias. */
|
|
41
41
|
subscriptionId?: string;
|
|
42
|
-
/** Billing scope for subscriptions the
|
|
42
|
+
/** Billing scope for subscriptions the reconciler creates. */
|
|
43
43
|
billingScope?: string;
|
|
44
44
|
workload?: "Production" | "DevTest";
|
|
45
45
|
}
|
|
@@ -56,9 +56,9 @@ export interface ManagementGroupConfig {
|
|
|
56
56
|
|
|
57
57
|
/**
|
|
58
58
|
* The desired-state governance tree for one Azure tenant. This is the shape
|
|
59
|
-
*
|
|
59
|
+
* an external governance reconciler loads as config — the Azure counterpart of
|
|
60
60
|
* `AwsGovernanceConfig`/`GcpGovernanceConfig`. Cycles map onto the
|
|
61
|
-
* governance verbs
|
|
61
|
+
* governance verbs: the management-group/subscription tree is
|
|
62
62
|
* `org-unit`, policy assignments are `policy-guardrail`, the activity-log
|
|
63
63
|
* sink is `audit-sink`.
|
|
64
64
|
*/
|
|
@@ -188,7 +188,7 @@ export interface LandingZoneConfigProps {
|
|
|
188
188
|
}
|
|
189
189
|
|
|
190
190
|
/**
|
|
191
|
-
* Author the desired-state tree
|
|
191
|
+
* Author the desired-state tree an external governance reconciler reconciles. Pure.
|
|
192
192
|
* Throws when the tree assigns a policy name with no definition; only
|
|
193
193
|
* policies the tree actually assigns are included in the output.
|
|
194
194
|
*/
|
package/src/index.ts
CHANGED
|
@@ -76,8 +76,8 @@ export {
|
|
|
76
76
|
ActivityLogSink, type ActivityLogSinkProps, type ActivityLogSinkResult,
|
|
77
77
|
} from "./composites/index";
|
|
78
78
|
|
|
79
|
-
// Azure governance authoring
|
|
80
|
-
//
|
|
79
|
+
// Azure governance authoring: the desired-state config the Azure
|
|
80
|
+
// external governance reconciler applies, and the typed landing-zone authoring layer.
|
|
81
81
|
export {
|
|
82
82
|
landingZoneConfig, locationRestriction,
|
|
83
83
|
DENY_CLASSIC_RESOURCES, DENY_UNMANAGED_DISKS,
|
|
@@ -29,7 +29,7 @@ export const azureAuditCatalog: Record<string, RuleMeta> = {
|
|
|
29
29
|
AZR029: auditRule("AZR029", "merge-worthy", "guidance", "Managed disk missing encryption", "Enable encryption for data at rest.", { authority: [AZ_SEC] }),
|
|
30
30
|
AZR030: auditRule("AZR030", "merge-worthy", "guidance", "Resource at unsupported template scope", "Move the resource to a project deployed at a scope its schema supports.", { category: "correctness" }),
|
|
31
31
|
|
|
32
|
-
//
|
|
32
|
+
// governance posture regressions.
|
|
33
33
|
AZR031: auditRule("AZR031", "merge-worthy", "guidance", "Policy assignment not enforced (DoNotEnforce)", "Set enforcementMode to Default so the assigned guardrail applies.", { authority: [AZ_SEC] }),
|
|
34
34
|
AZR032: auditRule("AZR032", "merge-worthy", "guidance", "Custom policy definition assigned nowhere", "Pair the policy definition with a policy assignment — unassigned it enforces nothing.", { authority: [AZ_SEC] }),
|
|
35
35
|
AZR033: auditRule("AZR033", "merge-worthy", "guidance", "Subscriptions may leave the tenant", "Set blockSubscriptionsLeavingTenant: true on the Microsoft.Subscription/policies resource.", { authority: [AZ_SEC] }),
|
package/src/serializer.ts
CHANGED
|
@@ -187,7 +187,7 @@ function serializeToTemplate(
|
|
|
187
187
|
// pin overrides the inference — policy definitions and assignments
|
|
188
188
|
// deploy at several scopes, so a management-group guardrail project
|
|
189
189
|
// cannot be told from a subscription one by its resource set alone
|
|
190
|
-
|
|
190
|
+
//; AZR030 still flags resources the pinned scope cannot hold.
|
|
191
191
|
let pinnedScope: DeployScope | undefined;
|
|
192
192
|
const emittedTypes: string[] = [];
|
|
193
193
|
for (const [, entity] of entities) {
|
package/src/validate.ts
CHANGED
|
@@ -25,7 +25,7 @@ const REQUIRED_NAMES = [
|
|
|
25
25
|
"SqlServer", "SqlDatabase",
|
|
26
26
|
// Security & Identity
|
|
27
27
|
"KeyVault", "ManagedIdentity",
|
|
28
|
-
// Governance — org hierarchy + policy primitives (#1545).
|
|
28
|
+
// Governance — org hierarchy + policy primitives (#1545). once claimed
|
|
29
29
|
// these existed when they did not; this gate keeps them from vanishing again.
|
|
30
30
|
"ManagementGroup", "SubscriptionAlias", "PolicyDefinition", "PolicyAssignment",
|
|
31
31
|
// DNS & Traffic
|