@microsoft/terraform-cdk-constructs 1.2.0 → 1.3.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/.jsii +54846 -26661
- package/API.md +72091 -23784
- package/lib/azure-actiongroup/index.d.ts +0 -10
- package/lib/azure-actiongroup/index.js +1 -11
- package/lib/azure-actiongroup/lib/action-group.d.ts +0 -10
- package/lib/azure-actiongroup/lib/action-group.js +6 -32
- package/lib/azure-actiongroup/lib/index.d.ts +1 -4
- package/lib/azure-actiongroup/lib/index.js +2 -5
- package/lib/azure-activitylogalert/index.d.ts +0 -10
- package/lib/azure-activitylogalert/index.js +1 -11
- package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +0 -10
- package/lib/azure-activitylogalert/lib/activity-log-alert.js +6 -32
- package/lib/azure-activitylogalert/lib/index.d.ts +1 -4
- package/lib/azure-activitylogalert/lib/index.js +2 -5
- package/lib/azure-aks/index.d.ts +0 -8
- package/lib/azure-aks/index.js +1 -11
- package/lib/azure-aks/lib/aks-cluster.d.ts +4 -13
- package/lib/azure-aks/lib/aks-cluster.js +13 -36
- package/lib/azure-aks/lib/index.d.ts +1 -10
- package/lib/azure-aks/lib/index.js +2 -21
- package/lib/azure-diagnosticsettings/index.d.ts +0 -6
- package/lib/azure-diagnosticsettings/index.js +1 -7
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +0 -10
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +6 -32
- package/lib/azure-diagnosticsettings/lib/index.d.ts +1 -7
- package/lib/azure-diagnosticsettings/lib/index.js +2 -8
- package/lib/azure-dnsforwardingruleset/index.d.ts +1 -0
- package/lib/azure-dnsforwardingruleset/index.js +18 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.d.ts +24 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.js +206 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.d.ts +174 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +214 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.d.ts +24 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.js +242 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.d.ts +193 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +193 -0
- package/lib/azure-dnsforwardingruleset/lib/index.d.ts +6 -0
- package/lib/azure-dnsforwardingruleset/lib/index.js +23 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.d.ts +24 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.js +199 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.d.ts +160 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +178 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.js +133 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.js +350 -0
- package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.js +397 -0
- package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.js +285 -0
- package/lib/azure-dnsresolver/index.d.ts +1 -0
- package/lib/azure-dnsresolver/index.js +18 -0
- package/lib/azure-dnsresolver/lib/dns-resolver-schemas.d.ts +24 -0
- package/lib/azure-dnsresolver/lib/dns-resolver-schemas.js +218 -0
- package/lib/azure-dnsresolver/lib/dns-resolver.d.ts +170 -0
- package/lib/azure-dnsresolver/lib/dns-resolver.js +236 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.d.ts +24 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.js +261 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint.d.ts +189 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint.js +243 -0
- package/lib/azure-dnsresolver/lib/index.d.ts +6 -0
- package/lib/azure-dnsresolver/lib/index.js +23 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.d.ts +24 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.js +231 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint.d.ts +175 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint.js +234 -0
- package/lib/azure-dnsresolver/test/dns-resolver.integ.d.ts +14 -0
- package/lib/azure-dnsresolver/test/dns-resolver.integ.js +117 -0
- package/lib/azure-dnsresolver/test/dns-resolver.spec.d.ts +9 -0
- package/lib/azure-dnsresolver/test/dns-resolver.spec.js +353 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.integ.d.ts +9 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.integ.js +151 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.spec.d.ts +9 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.spec.js +441 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.integ.d.ts +9 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.integ.js +149 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.spec.d.ts +9 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.spec.js +301 -0
- package/lib/azure-dnszone/index.d.ts +1 -0
- package/lib/azure-dnszone/index.js +18 -0
- package/lib/azure-dnszone/lib/dns-zone-schemas.d.ts +24 -0
- package/lib/azure-dnszone/lib/dns-zone-schemas.js +191 -0
- package/lib/azure-dnszone/lib/dns-zone.d.ts +182 -0
- package/lib/azure-dnszone/lib/dns-zone.js +228 -0
- package/lib/azure-dnszone/lib/index.d.ts +2 -0
- package/lib/azure-dnszone/lib/index.js +19 -0
- package/lib/azure-dnszone/test/dns-zone.integ.d.ts +9 -0
- package/lib/azure-dnszone/test/dns-zone.integ.js +85 -0
- package/lib/azure-dnszone/test/dns-zone.spec.d.ts +9 -0
- package/lib/azure-dnszone/test/dns-zone.spec.js +285 -0
- package/lib/azure-metricalert/index.d.ts +0 -10
- package/lib/azure-metricalert/index.js +1 -11
- package/lib/azure-metricalert/lib/index.d.ts +1 -4
- package/lib/azure-metricalert/lib/index.js +2 -5
- package/lib/azure-metricalert/lib/metric-alert.d.ts +0 -10
- package/lib/azure-metricalert/lib/metric-alert.js +6 -32
- package/lib/azure-networkinterface/index.d.ts +0 -3
- package/lib/azure-networkinterface/index.js +1 -4
- package/lib/azure-networkinterface/lib/index.d.ts +1 -5
- package/lib/azure-networkinterface/lib/index.js +2 -5
- package/lib/azure-networkinterface/lib/network-interface.d.ts +4 -9
- package/lib/azure-networkinterface/lib/network-interface.js +14 -29
- package/lib/azure-networkinterface/test/network-interface.integ.js +20 -6
- package/lib/azure-networksecuritygroup/index.d.ts +0 -5
- package/lib/azure-networksecuritygroup/index.js +1 -6
- package/lib/azure-networksecuritygroup/lib/index.d.ts +2 -5
- package/lib/azure-networksecuritygroup/lib/index.js +17 -14
- package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +4 -13
- package/lib/azure-networksecuritygroup/lib/network-security-group.js +14 -36
- package/lib/azure-policyassignment/index.d.ts +1 -0
- package/lib/azure-policyassignment/index.js +18 -0
- package/lib/azure-policyassignment/lib/index.d.ts +2 -0
- package/lib/azure-policyassignment/lib/index.js +19 -0
- package/lib/azure-policyassignment/lib/policy-assignment-schemas.d.ts +25 -0
- package/lib/azure-policyassignment/lib/policy-assignment-schemas.js +260 -0
- package/lib/azure-policyassignment/lib/policy-assignment.d.ts +342 -0
- package/lib/azure-policyassignment/lib/policy-assignment.js +228 -0
- package/lib/azure-policyassignment/test/policy-assignment.integ.d.ts +13 -0
- package/lib/azure-policyassignment/test/policy-assignment.integ.js +153 -0
- package/lib/azure-policyassignment/test/policy-assignment.spec.d.ts +9 -0
- package/lib/azure-policyassignment/test/policy-assignment.spec.js +651 -0
- package/lib/azure-policydefinition/index.d.ts +1 -0
- package/lib/azure-policydefinition/index.js +18 -0
- package/lib/azure-policydefinition/lib/index.d.ts +2 -0
- package/lib/azure-policydefinition/lib/index.js +19 -0
- package/lib/azure-policydefinition/lib/policy-definition-schemas.d.ts +25 -0
- package/lib/azure-policydefinition/lib/policy-definition-schemas.js +210 -0
- package/lib/azure-policydefinition/lib/policy-definition.d.ts +260 -0
- package/lib/azure-policydefinition/lib/policy-definition.js +199 -0
- package/lib/azure-policydefinition/test/policy-definition.integ.d.ts +9 -0
- package/lib/azure-policydefinition/test/policy-definition.integ.js +137 -0
- package/lib/azure-policydefinition/test/policy-definition.spec.d.ts +9 -0
- package/lib/azure-policydefinition/test/policy-definition.spec.js +596 -0
- package/lib/azure-privatednszone/index.d.ts +1 -0
- package/lib/azure-privatednszone/index.js +18 -0
- package/lib/azure-privatednszone/lib/index.d.ts +2 -0
- package/lib/azure-privatednszone/lib/index.js +19 -0
- package/lib/azure-privatednszone/lib/private-dns-zone-schemas.d.ts +24 -0
- package/lib/azure-privatednszone/lib/private-dns-zone-schemas.js +254 -0
- package/lib/azure-privatednszone/lib/private-dns-zone.d.ts +178 -0
- package/lib/azure-privatednszone/lib/private-dns-zone.js +272 -0
- package/lib/azure-privatednszone/test/private-dns-zone.integ.d.ts +9 -0
- package/lib/azure-privatednszone/test/private-dns-zone.integ.js +84 -0
- package/lib/azure-privatednszone/test/private-dns-zone.spec.d.ts +9 -0
- package/lib/azure-privatednszone/test/private-dns-zone.spec.js +341 -0
- package/lib/azure-privatednszonelink/index.d.ts +1 -0
- package/lib/azure-privatednszonelink/index.js +18 -0
- package/lib/azure-privatednszonelink/lib/index.d.ts +2 -0
- package/lib/azure-privatednszonelink/lib/index.js +19 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.d.ts +24 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.js +262 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.d.ts +202 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +250 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.d.ts +9 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.js +110 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.d.ts +9 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.js +465 -0
- package/lib/azure-publicipaddress/index.d.ts +0 -5
- package/lib/azure-publicipaddress/index.js +1 -6
- package/lib/azure-publicipaddress/lib/index.d.ts +2 -9
- package/lib/azure-publicipaddress/lib/index.js +17 -17
- package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +4 -13
- package/lib/azure-publicipaddress/lib/public-ip-address.js +14 -36
- package/lib/azure-resourcegroup/index.d.ts +0 -37
- package/lib/azure-resourcegroup/index.js +1 -39
- package/lib/azure-resourcegroup/lib/index.d.ts +1 -44
- package/lib/azure-resourcegroup/lib/index.js +2 -43
- package/lib/azure-resourcegroup/lib/resource-group.d.ts +9 -23
- package/lib/azure-resourcegroup/lib/resource-group.js +23 -56
- package/lib/azure-resourcegroup/test/resource-group.spec.js +13 -19
- package/lib/azure-roleassignment/index.d.ts +1 -0
- package/lib/azure-roleassignment/index.js +18 -0
- package/lib/azure-roleassignment/lib/index.d.ts +2 -0
- package/lib/azure-roleassignment/lib/index.js +19 -0
- package/lib/azure-roleassignment/lib/role-assignment-schemas.d.ts +25 -0
- package/lib/azure-roleassignment/lib/role-assignment-schemas.js +238 -0
- package/lib/azure-roleassignment/lib/role-assignment.d.ts +294 -0
- package/lib/azure-roleassignment/lib/role-assignment.js +257 -0
- package/lib/azure-roleassignment/test/role-assignment.integ.d.ts +12 -0
- package/lib/azure-roleassignment/test/role-assignment.integ.js +101 -0
- package/lib/azure-roleassignment/test/role-assignment.spec.d.ts +9 -0
- package/lib/azure-roleassignment/test/role-assignment.spec.js +633 -0
- package/lib/azure-roledefinition/index.d.ts +1 -0
- package/lib/azure-roledefinition/index.js +18 -0
- package/lib/azure-roledefinition/lib/index.d.ts +2 -0
- package/lib/azure-roledefinition/lib/index.js +19 -0
- package/lib/azure-roledefinition/lib/role-definition-schemas.d.ts +25 -0
- package/lib/azure-roledefinition/lib/role-definition-schemas.js +195 -0
- package/lib/azure-roledefinition/lib/role-definition.d.ts +236 -0
- package/lib/azure-roledefinition/lib/role-definition.js +192 -0
- package/lib/azure-roledefinition/test/role-definition.integ.d.ts +12 -0
- package/lib/azure-roledefinition/test/role-definition.integ.js +142 -0
- package/lib/azure-roledefinition/test/role-definition.spec.d.ts +9 -0
- package/lib/azure-roledefinition/test/role-definition.spec.js +946 -0
- package/lib/azure-storageaccount/index.d.ts +0 -19
- package/lib/azure-storageaccount/index.js +1 -20
- package/lib/azure-storageaccount/lib/index.d.ts +1 -7
- package/lib/azure-storageaccount/lib/index.js +2 -8
- package/lib/azure-storageaccount/lib/storage-account.d.ts +4 -9
- package/lib/azure-storageaccount/lib/storage-account.js +15 -29
- package/lib/azure-subnet/index.d.ts +0 -3
- package/lib/azure-subnet/index.js +1 -4
- package/lib/azure-subnet/lib/index.d.ts +1 -4
- package/lib/azure-subnet/lib/index.js +2 -5
- package/lib/azure-subnet/lib/subnet.d.ts +3 -14
- package/lib/azure-subnet/lib/subnet.js +28 -47
- package/lib/azure-subnet/test/subnet.integ.js +19 -7
- package/lib/azure-subnet/test/subnet.spec.js +1 -2
- package/lib/azure-virtualmachine/index.d.ts +0 -6
- package/lib/azure-virtualmachine/index.js +1 -7
- package/lib/azure-virtualmachine/lib/index.d.ts +1 -10
- package/lib/azure-virtualmachine/lib/index.js +2 -21
- package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +4 -13
- package/lib/azure-virtualmachine/lib/virtual-machine.js +15 -36
- package/lib/azure-virtualnetwork/index.d.ts +0 -9
- package/lib/azure-virtualnetwork/index.js +1 -11
- package/lib/azure-virtualnetwork/lib/index.d.ts +2 -9
- package/lib/azure-virtualnetwork/lib/index.js +17 -20
- package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +4 -13
- package/lib/azure-virtualnetwork/lib/virtual-network.js +15 -36
- package/lib/azure-virtualnetworkmanager/index.d.ts +1 -0
- package/lib/azure-virtualnetworkmanager/index.js +18 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.d.ts +48 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.js +265 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.d.ts +185 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +206 -0
- package/lib/azure-virtualnetworkmanager/lib/index.d.ts +14 -0
- package/lib/azure-virtualnetworkmanager/lib/index.js +31 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.js +189 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.js +201 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.d.ts +135 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +163 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group.d.ts +139 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group.js +158 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.js +182 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.d.ts +144 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +164 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.d.ts +38 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.js +206 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.d.ts +142 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +162 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.d.ts +39 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.js +359 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.d.ts +221 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +204 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.js +236 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.d.ts +337 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +283 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.d.ts +25 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.js +402 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.d.ts +9 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.js +1652 -0
- package/lib/azure-vmss/index.d.ts +0 -5
- package/lib/azure-vmss/index.js +1 -6
- package/lib/azure-vmss/lib/index.d.ts +0 -7
- package/lib/azure-vmss/lib/index.js +1 -21
- package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +5 -13
- package/lib/azure-vmss/lib/virtual-machine-scale-set.js +29 -53
- package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.d.ts +10 -0
- package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.js +218 -0
- package/lib/core-azure/lib/azapi/azapi-resource.d.ts +178 -26
- package/lib/core-azure/lib/azapi/azapi-resource.js +328 -90
- package/lib/core-azure/lib/azapi/azapi-resource.spec.js +2 -2
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
- package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +5 -3
- package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
- package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
- package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
- package/lib/core-azure/lib/azapi/resource-schema-validator.d.ts +118 -0
- package/lib/core-azure/lib/azapi/resource-schema-validator.js +236 -0
- package/lib/core-azure/lib/azapi/resource-version-manager.d.ts +103 -0
- package/lib/core-azure/lib/azapi/resource-version-manager.js +168 -0
- package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +11 -6
- package/lib/core-azure/lib/index.d.ts +2 -2
- package/lib/core-azure/lib/index.js +5 -5
- package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
- package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
- package/lib/index.d.ts +19 -0
- package/lib/index.js +21 -2
- package/lib/testing/index.js +2 -2
- package/lib/testing/lib/cleanup.d.ts +1 -0
- package/lib/testing/lib/cleanup.js +19 -12
- package/lib/testing/lib/metadata.js +19 -16
- package/package.json +1 -1
- package/scripts/cleanup-test-resources.ts +22 -4
- package/scripts/generate-index.js +25 -8
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Azure Policy Assignment implementation using VersionedAzapiResource framework
|
|
3
|
+
*
|
|
4
|
+
* This class provides a version-aware implementation for managing Azure Policy Assignments
|
|
5
|
+
* using the AZAPI provider. Policy assignments apply policy definitions to specific scopes
|
|
6
|
+
* (subscription, resource group, or resource) and can provide parameter values and
|
|
7
|
+
* enforcement settings.
|
|
8
|
+
*
|
|
9
|
+
* Supported API Versions:
|
|
10
|
+
* - 2022-06-01 (Active, Latest)
|
|
11
|
+
*
|
|
12
|
+
* Features:
|
|
13
|
+
* - Automatic latest version resolution when no version is specified
|
|
14
|
+
* - Explicit version pinning for stability requirements
|
|
15
|
+
* - Schema-driven validation and transformation
|
|
16
|
+
* - Support for enforcement modes (Default, DoNotEnforce)
|
|
17
|
+
* - Managed identity support for remediation policies
|
|
18
|
+
* - Custom non-compliance messages
|
|
19
|
+
* - Scope exclusions (notScopes)
|
|
20
|
+
* - JSII compliance for multi-language support
|
|
21
|
+
*/
|
|
22
|
+
import * as cdktf from "cdktf";
|
|
23
|
+
import { Construct } from "constructs";
|
|
24
|
+
import { AzapiResource, AzapiResourceProps } from "../../core-azure/lib/azapi/azapi-resource";
|
|
25
|
+
import { ApiSchema } from "../../core-azure/lib/version-manager/interfaces/version-interfaces";
|
|
26
|
+
/**
|
|
27
|
+
* Identity configuration for policy assignments
|
|
28
|
+
* Required for policies with deployIfNotExists or modify effects
|
|
29
|
+
*/
|
|
30
|
+
export interface PolicyAssignmentIdentity {
|
|
31
|
+
/**
|
|
32
|
+
* The type of managed identity
|
|
33
|
+
* @example "SystemAssigned", "UserAssigned", "None"
|
|
34
|
+
*/
|
|
35
|
+
readonly type: string;
|
|
36
|
+
/**
|
|
37
|
+
* The user assigned identities associated with the policy assignment
|
|
38
|
+
* Required when type is UserAssigned
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* {
|
|
42
|
+
* "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity": {}
|
|
43
|
+
* }
|
|
44
|
+
*/
|
|
45
|
+
readonly userAssignedIdentities?: {
|
|
46
|
+
[key: string]: any;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Non-compliance message configuration
|
|
51
|
+
*/
|
|
52
|
+
export interface PolicyAssignmentNonComplianceMessage {
|
|
53
|
+
/**
|
|
54
|
+
* The non-compliance message for the policy assignment
|
|
55
|
+
*/
|
|
56
|
+
readonly message: string;
|
|
57
|
+
/**
|
|
58
|
+
* The policy definition reference ID within a policy set definition
|
|
59
|
+
* Optional - if specified, this message applies only to the specified policy within the set
|
|
60
|
+
*/
|
|
61
|
+
readonly policyDefinitionReferenceId?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Properties for the unified Azure Policy Assignment
|
|
65
|
+
*
|
|
66
|
+
* Extends AzapiResourceProps with Policy Assignment specific properties
|
|
67
|
+
*/
|
|
68
|
+
export interface PolicyAssignmentProps extends AzapiResourceProps {
|
|
69
|
+
/**
|
|
70
|
+
* The policy definition ID to assign
|
|
71
|
+
* This can be a built-in or custom policy definition
|
|
72
|
+
* Required property
|
|
73
|
+
*
|
|
74
|
+
* @example "/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/policyDefinitions/policy-name"
|
|
75
|
+
* @example "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d" (built-in)
|
|
76
|
+
*/
|
|
77
|
+
readonly policyDefinitionId: string;
|
|
78
|
+
/**
|
|
79
|
+
* The scope at which the policy assignment is applied
|
|
80
|
+
* Can be a subscription, resource group, or resource
|
|
81
|
+
* Required property
|
|
82
|
+
*
|
|
83
|
+
* @example "/subscriptions/00000000-0000-0000-0000-000000000000"
|
|
84
|
+
* @example "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-name"
|
|
85
|
+
*/
|
|
86
|
+
readonly scope: string;
|
|
87
|
+
/**
|
|
88
|
+
* The display name of the policy assignment
|
|
89
|
+
* Provides a human-readable name for the assignment
|
|
90
|
+
*
|
|
91
|
+
* @example "Require tag on resources in production"
|
|
92
|
+
*/
|
|
93
|
+
readonly displayName?: string;
|
|
94
|
+
/**
|
|
95
|
+
* The policy assignment description
|
|
96
|
+
* Provides detailed information about the assignment
|
|
97
|
+
*
|
|
98
|
+
* @example "Enforces required tags on all resources in production environment"
|
|
99
|
+
*/
|
|
100
|
+
readonly description?: string;
|
|
101
|
+
/**
|
|
102
|
+
* The enforcement mode of the policy assignment
|
|
103
|
+
* @default "Default"
|
|
104
|
+
* @example "Default" - Policy effect is enforced during resource creation/update
|
|
105
|
+
* @example "DoNotEnforce" - Policy effect is not enforced (audit only)
|
|
106
|
+
*/
|
|
107
|
+
readonly enforcementMode?: string;
|
|
108
|
+
/**
|
|
109
|
+
* Parameters for the policy assignment
|
|
110
|
+
* Provides values for parameters defined in the policy definition
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* {
|
|
114
|
+
* tagName: {
|
|
115
|
+
* value: "Environment"
|
|
116
|
+
* },
|
|
117
|
+
* tagValue: {
|
|
118
|
+
* value: "Production"
|
|
119
|
+
* }
|
|
120
|
+
* }
|
|
121
|
+
*/
|
|
122
|
+
readonly parameters?: any;
|
|
123
|
+
/**
|
|
124
|
+
* Metadata for the policy assignment
|
|
125
|
+
* Used to store additional information like assignedBy, parameterScopes, etc.
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* {
|
|
129
|
+
* assignedBy: "admin@example.com",
|
|
130
|
+
* parameterScopes: {}
|
|
131
|
+
* }
|
|
132
|
+
*/
|
|
133
|
+
readonly metadata?: any;
|
|
134
|
+
/**
|
|
135
|
+
* The managed identity associated with the policy assignment
|
|
136
|
+
* Required for policies with deployIfNotExists or modify effects
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* {
|
|
140
|
+
* type: "SystemAssigned"
|
|
141
|
+
* }
|
|
142
|
+
*/
|
|
143
|
+
readonly identity?: PolicyAssignmentIdentity;
|
|
144
|
+
/**
|
|
145
|
+
* The policy's excluded scopes
|
|
146
|
+
* Resources within these scopes will not be evaluated by the policy
|
|
147
|
+
*
|
|
148
|
+
* @example ["/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/excluded-rg"]
|
|
149
|
+
*/
|
|
150
|
+
readonly notScopes?: string[];
|
|
151
|
+
/**
|
|
152
|
+
* The non-compliance messages for the policy assignment
|
|
153
|
+
* Provides custom messages when resources are non-compliant
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* [
|
|
157
|
+
* {
|
|
158
|
+
* message: "Resource must have the Environment tag"
|
|
159
|
+
* }
|
|
160
|
+
* ]
|
|
161
|
+
*/
|
|
162
|
+
readonly nonComplianceMessages?: PolicyAssignmentNonComplianceMessage[];
|
|
163
|
+
/**
|
|
164
|
+
* The lifecycle rules to ignore changes
|
|
165
|
+
* @example ["metadata"]
|
|
166
|
+
*/
|
|
167
|
+
readonly ignoreChanges?: string[];
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Properties interface for Azure Policy Assignment
|
|
171
|
+
* This is required for JSII compliance to support multi-language code generation
|
|
172
|
+
*/
|
|
173
|
+
export interface PolicyAssignmentProperties {
|
|
174
|
+
/**
|
|
175
|
+
* The policy definition ID
|
|
176
|
+
*/
|
|
177
|
+
readonly policyDefinitionId: string;
|
|
178
|
+
/**
|
|
179
|
+
* The scope of the policy assignment
|
|
180
|
+
*/
|
|
181
|
+
readonly scope: string;
|
|
182
|
+
/**
|
|
183
|
+
* The display name of the policy assignment
|
|
184
|
+
*/
|
|
185
|
+
readonly displayName?: string;
|
|
186
|
+
/**
|
|
187
|
+
* The policy assignment description
|
|
188
|
+
*/
|
|
189
|
+
readonly description?: string;
|
|
190
|
+
/**
|
|
191
|
+
* The enforcement mode
|
|
192
|
+
*/
|
|
193
|
+
readonly enforcementMode?: string;
|
|
194
|
+
/**
|
|
195
|
+
* Parameters for the policy assignment
|
|
196
|
+
*/
|
|
197
|
+
readonly parameters?: any;
|
|
198
|
+
/**
|
|
199
|
+
* Metadata for the policy assignment
|
|
200
|
+
*/
|
|
201
|
+
readonly metadata?: any;
|
|
202
|
+
/**
|
|
203
|
+
* The policy's excluded scopes
|
|
204
|
+
*/
|
|
205
|
+
readonly notScopes?: string[];
|
|
206
|
+
/**
|
|
207
|
+
* The non-compliance messages
|
|
208
|
+
*/
|
|
209
|
+
readonly nonComplianceMessages?: PolicyAssignmentNonComplianceMessage[];
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* The resource body interface for Azure Policy Assignment API calls
|
|
213
|
+
* This matches the Azure REST API schema for policy assignments
|
|
214
|
+
*/
|
|
215
|
+
export interface PolicyAssignmentBody {
|
|
216
|
+
/**
|
|
217
|
+
* The properties of the policy assignment
|
|
218
|
+
*/
|
|
219
|
+
readonly properties: PolicyAssignmentProperties;
|
|
220
|
+
/**
|
|
221
|
+
* The managed identity associated with the policy assignment
|
|
222
|
+
*/
|
|
223
|
+
readonly identity?: PolicyAssignmentIdentity;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Unified Azure Policy Assignment implementation
|
|
227
|
+
*
|
|
228
|
+
* This class provides a single, version-aware implementation for managing Azure
|
|
229
|
+
* Policy Assignments. It automatically handles version resolution, schema validation,
|
|
230
|
+
* and property transformation.
|
|
231
|
+
*
|
|
232
|
+
* Note: Policy assignments can be deployed at subscription, resource group, or resource scope.
|
|
233
|
+
* Like policy definitions, they do not have a location property as they are not region-specific.
|
|
234
|
+
*
|
|
235
|
+
* @example
|
|
236
|
+
* // Basic policy assignment:
|
|
237
|
+
* const assignment = new PolicyAssignment(this, "assignment", {
|
|
238
|
+
* name: "require-tag-assignment",
|
|
239
|
+
* policyDefinitionId: policyDefinition.id,
|
|
240
|
+
* scope: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-name",
|
|
241
|
+
* displayName: "Require tag on resources",
|
|
242
|
+
* description: "Enforces required tags on resources"
|
|
243
|
+
* });
|
|
244
|
+
*
|
|
245
|
+
* @example
|
|
246
|
+
* // Policy assignment with parameters:
|
|
247
|
+
* const assignment = new PolicyAssignment(this, "assignment", {
|
|
248
|
+
* name: "require-tag-assignment",
|
|
249
|
+
* policyDefinitionId: policyDefinition.id,
|
|
250
|
+
* scope: "/subscriptions/00000000-0000-0000-0000-000000000000",
|
|
251
|
+
* parameters: {
|
|
252
|
+
* tagName: {
|
|
253
|
+
* value: "Environment"
|
|
254
|
+
* },
|
|
255
|
+
* tagValue: {
|
|
256
|
+
* value: "Production"
|
|
257
|
+
* }
|
|
258
|
+
* }
|
|
259
|
+
* });
|
|
260
|
+
*
|
|
261
|
+
* @example
|
|
262
|
+
* // Policy assignment with managed identity:
|
|
263
|
+
* const assignment = new PolicyAssignment(this, "assignment", {
|
|
264
|
+
* name: "deploy-monitoring-assignment",
|
|
265
|
+
* policyDefinitionId: "/providers/Microsoft.Authorization/policyDefinitions/policy-id",
|
|
266
|
+
* scope: "/subscriptions/00000000-0000-0000-0000-000000000000",
|
|
267
|
+
* identity: {
|
|
268
|
+
* type: "SystemAssigned"
|
|
269
|
+
* }
|
|
270
|
+
* });
|
|
271
|
+
*
|
|
272
|
+
* @stability stable
|
|
273
|
+
*/
|
|
274
|
+
export declare class PolicyAssignment extends AzapiResource {
|
|
275
|
+
/**
|
|
276
|
+
* The input properties for this Policy Assignment instance
|
|
277
|
+
*/
|
|
278
|
+
readonly props: PolicyAssignmentProps;
|
|
279
|
+
readonly idOutput: cdktf.TerraformOutput;
|
|
280
|
+
readonly nameOutput: cdktf.TerraformOutput;
|
|
281
|
+
/**
|
|
282
|
+
* Creates a new Azure Policy Assignment using the VersionedAzapiResource framework
|
|
283
|
+
*
|
|
284
|
+
* The constructor automatically handles version resolution, schema registration,
|
|
285
|
+
* validation, and resource creation.
|
|
286
|
+
*
|
|
287
|
+
* @param scope - The scope in which to define this construct
|
|
288
|
+
* @param id - The unique identifier for this instance
|
|
289
|
+
* @param props - Configuration properties for the Policy Assignment
|
|
290
|
+
*/
|
|
291
|
+
constructor(scope: Construct, id: string, props: PolicyAssignmentProps);
|
|
292
|
+
/**
|
|
293
|
+
* Gets the default API version to use when no explicit version is specified
|
|
294
|
+
* Returns the most recent stable version as the default
|
|
295
|
+
*/
|
|
296
|
+
protected defaultVersion(): string;
|
|
297
|
+
/**
|
|
298
|
+
* Gets the Azure resource type for Policy Assignments
|
|
299
|
+
*/
|
|
300
|
+
protected resourceType(): string;
|
|
301
|
+
/**
|
|
302
|
+
* Gets the API schema for the resolved version
|
|
303
|
+
* Uses the framework's schema resolution to get the appropriate schema
|
|
304
|
+
*/
|
|
305
|
+
protected apiSchema(): ApiSchema;
|
|
306
|
+
/**
|
|
307
|
+
* Creates the resource body for the Azure API call
|
|
308
|
+
* Transforms the input properties into the JSON format expected by Azure REST API
|
|
309
|
+
*
|
|
310
|
+
* Note: Policy assignments do not have a location property as they are
|
|
311
|
+
* scoped resources (subscription, resource group, or resource level).
|
|
312
|
+
* The scope property is NOT included in the body as it's read-only and
|
|
313
|
+
* automatically derived from the parentId.
|
|
314
|
+
*/
|
|
315
|
+
protected createResourceBody(props: any): any;
|
|
316
|
+
/**
|
|
317
|
+
* Overrides parent ID resolution to use the scope from props
|
|
318
|
+
* Policy assignments are scoped resources where the scope IS the parent
|
|
319
|
+
*/
|
|
320
|
+
protected resolveParentId(props: any): string;
|
|
321
|
+
/**
|
|
322
|
+
* Get the full resource identifier for use in other Azure resources
|
|
323
|
+
* Alias for the id property
|
|
324
|
+
*/
|
|
325
|
+
get resourceId(): string;
|
|
326
|
+
/**
|
|
327
|
+
* Get the policy definition ID this assignment references
|
|
328
|
+
*/
|
|
329
|
+
get policyDefinitionId(): string;
|
|
330
|
+
/**
|
|
331
|
+
* Get the scope of this policy assignment
|
|
332
|
+
*/
|
|
333
|
+
get assignmentScope(): string;
|
|
334
|
+
/**
|
|
335
|
+
* Get the enforcement mode
|
|
336
|
+
*/
|
|
337
|
+
get enforcementMode(): string;
|
|
338
|
+
/**
|
|
339
|
+
* Applies ignore changes lifecycle rules if specified in props
|
|
340
|
+
*/
|
|
341
|
+
private _applyIgnoreChanges;
|
|
342
|
+
}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.PolicyAssignment = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
/**
|
|
7
|
+
* Unified Azure Policy Assignment implementation using VersionedAzapiResource framework
|
|
8
|
+
*
|
|
9
|
+
* This class provides a version-aware implementation for managing Azure Policy Assignments
|
|
10
|
+
* using the AZAPI provider. Policy assignments apply policy definitions to specific scopes
|
|
11
|
+
* (subscription, resource group, or resource) and can provide parameter values and
|
|
12
|
+
* enforcement settings.
|
|
13
|
+
*
|
|
14
|
+
* Supported API Versions:
|
|
15
|
+
* - 2022-06-01 (Active, Latest)
|
|
16
|
+
*
|
|
17
|
+
* Features:
|
|
18
|
+
* - Automatic latest version resolution when no version is specified
|
|
19
|
+
* - Explicit version pinning for stability requirements
|
|
20
|
+
* - Schema-driven validation and transformation
|
|
21
|
+
* - Support for enforcement modes (Default, DoNotEnforce)
|
|
22
|
+
* - Managed identity support for remediation policies
|
|
23
|
+
* - Custom non-compliance messages
|
|
24
|
+
* - Scope exclusions (notScopes)
|
|
25
|
+
* - JSII compliance for multi-language support
|
|
26
|
+
*/
|
|
27
|
+
const cdktf = require("cdktf");
|
|
28
|
+
const policy_assignment_schemas_1 = require("./policy-assignment-schemas");
|
|
29
|
+
const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
|
|
30
|
+
/**
|
|
31
|
+
* Unified Azure Policy Assignment implementation
|
|
32
|
+
*
|
|
33
|
+
* This class provides a single, version-aware implementation for managing Azure
|
|
34
|
+
* Policy Assignments. It automatically handles version resolution, schema validation,
|
|
35
|
+
* and property transformation.
|
|
36
|
+
*
|
|
37
|
+
* Note: Policy assignments can be deployed at subscription, resource group, or resource scope.
|
|
38
|
+
* Like policy definitions, they do not have a location property as they are not region-specific.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* // Basic policy assignment:
|
|
42
|
+
* const assignment = new PolicyAssignment(this, "assignment", {
|
|
43
|
+
* name: "require-tag-assignment",
|
|
44
|
+
* policyDefinitionId: policyDefinition.id,
|
|
45
|
+
* scope: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-name",
|
|
46
|
+
* displayName: "Require tag on resources",
|
|
47
|
+
* description: "Enforces required tags on resources"
|
|
48
|
+
* });
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* // Policy assignment with parameters:
|
|
52
|
+
* const assignment = new PolicyAssignment(this, "assignment", {
|
|
53
|
+
* name: "require-tag-assignment",
|
|
54
|
+
* policyDefinitionId: policyDefinition.id,
|
|
55
|
+
* scope: "/subscriptions/00000000-0000-0000-0000-000000000000",
|
|
56
|
+
* parameters: {
|
|
57
|
+
* tagName: {
|
|
58
|
+
* value: "Environment"
|
|
59
|
+
* },
|
|
60
|
+
* tagValue: {
|
|
61
|
+
* value: "Production"
|
|
62
|
+
* }
|
|
63
|
+
* }
|
|
64
|
+
* });
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* // Policy assignment with managed identity:
|
|
68
|
+
* const assignment = new PolicyAssignment(this, "assignment", {
|
|
69
|
+
* name: "deploy-monitoring-assignment",
|
|
70
|
+
* policyDefinitionId: "/providers/Microsoft.Authorization/policyDefinitions/policy-id",
|
|
71
|
+
* scope: "/subscriptions/00000000-0000-0000-0000-000000000000",
|
|
72
|
+
* identity: {
|
|
73
|
+
* type: "SystemAssigned"
|
|
74
|
+
* }
|
|
75
|
+
* });
|
|
76
|
+
*
|
|
77
|
+
* @stability stable
|
|
78
|
+
*/
|
|
79
|
+
class PolicyAssignment extends azapi_resource_1.AzapiResource {
|
|
80
|
+
// Public properties
|
|
81
|
+
/**
|
|
82
|
+
* Creates a new Azure Policy Assignment using the VersionedAzapiResource framework
|
|
83
|
+
*
|
|
84
|
+
* The constructor automatically handles version resolution, schema registration,
|
|
85
|
+
* validation, and resource creation.
|
|
86
|
+
*
|
|
87
|
+
* @param scope - The scope in which to define this construct
|
|
88
|
+
* @param id - The unique identifier for this instance
|
|
89
|
+
* @param props - Configuration properties for the Policy Assignment
|
|
90
|
+
*/
|
|
91
|
+
constructor(scope, id, props) {
|
|
92
|
+
super(scope, id, props);
|
|
93
|
+
this.props = props;
|
|
94
|
+
// Validate that location is provided when identity is specified
|
|
95
|
+
if (props.identity && !this.location) {
|
|
96
|
+
throw new Error(`Location is required for Policy Assignment "${props.name || id}" when identity is specified. ` +
|
|
97
|
+
`The managed identity must be provisioned in a specific Azure region.`);
|
|
98
|
+
}
|
|
99
|
+
// Extract properties from the AZAPI resource outputs using Terraform interpolation
|
|
100
|
+
// Create Terraform outputs for easy access and referencing from other resources
|
|
101
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
102
|
+
value: this.id,
|
|
103
|
+
description: "The ID of the Policy Assignment",
|
|
104
|
+
});
|
|
105
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
106
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
107
|
+
description: "The name of the Policy Assignment",
|
|
108
|
+
});
|
|
109
|
+
// Override logical IDs to match original naming convention
|
|
110
|
+
this.idOutput.overrideLogicalId("id");
|
|
111
|
+
this.nameOutput.overrideLogicalId("name");
|
|
112
|
+
// Apply ignore changes if specified
|
|
113
|
+
this._applyIgnoreChanges();
|
|
114
|
+
}
|
|
115
|
+
// =============================================================================
|
|
116
|
+
// REQUIRED ABSTRACT METHODS FROM AzapiResource
|
|
117
|
+
// =============================================================================
|
|
118
|
+
/**
|
|
119
|
+
* Gets the default API version to use when no explicit version is specified
|
|
120
|
+
* Returns the most recent stable version as the default
|
|
121
|
+
*/
|
|
122
|
+
defaultVersion() {
|
|
123
|
+
return "2022-06-01";
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Gets the Azure resource type for Policy Assignments
|
|
127
|
+
*/
|
|
128
|
+
resourceType() {
|
|
129
|
+
return policy_assignment_schemas_1.POLICY_ASSIGNMENT_TYPE;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Gets the API schema for the resolved version
|
|
133
|
+
* Uses the framework's schema resolution to get the appropriate schema
|
|
134
|
+
*/
|
|
135
|
+
apiSchema() {
|
|
136
|
+
return this.resolveSchema();
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Creates the resource body for the Azure API call
|
|
140
|
+
* Transforms the input properties into the JSON format expected by Azure REST API
|
|
141
|
+
*
|
|
142
|
+
* Note: Policy assignments do not have a location property as they are
|
|
143
|
+
* scoped resources (subscription, resource group, or resource level).
|
|
144
|
+
* The scope property is NOT included in the body as it's read-only and
|
|
145
|
+
* automatically derived from the parentId.
|
|
146
|
+
*/
|
|
147
|
+
createResourceBody(props) {
|
|
148
|
+
const typedProps = props;
|
|
149
|
+
const body = {
|
|
150
|
+
properties: {
|
|
151
|
+
policyDefinitionId: typedProps.policyDefinitionId,
|
|
152
|
+
// Note: scope is NOT included here - it's read-only and derived from parentId
|
|
153
|
+
displayName: typedProps.displayName,
|
|
154
|
+
description: typedProps.description,
|
|
155
|
+
enforcementMode: typedProps.enforcementMode || "Default",
|
|
156
|
+
parameters: typedProps.parameters,
|
|
157
|
+
metadata: typedProps.metadata,
|
|
158
|
+
notScopes: typedProps.notScopes,
|
|
159
|
+
nonComplianceMessages: typedProps.nonComplianceMessages,
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
// Add identity if provided
|
|
163
|
+
if (typedProps.identity) {
|
|
164
|
+
body.identity = typedProps.identity;
|
|
165
|
+
// Azure requires location when identity is specified for managed identity provisioning
|
|
166
|
+
body.location = typedProps.location;
|
|
167
|
+
}
|
|
168
|
+
return body;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Overrides parent ID resolution to use the scope from props
|
|
172
|
+
* Policy assignments are scoped resources where the scope IS the parent
|
|
173
|
+
*/
|
|
174
|
+
resolveParentId(props) {
|
|
175
|
+
const typedProps = props;
|
|
176
|
+
return typedProps.scope;
|
|
177
|
+
}
|
|
178
|
+
// =============================================================================
|
|
179
|
+
// PUBLIC METHODS FOR POLICY ASSIGNMENT OPERATIONS
|
|
180
|
+
// =============================================================================
|
|
181
|
+
/**
|
|
182
|
+
* Get the full resource identifier for use in other Azure resources
|
|
183
|
+
* Alias for the id property
|
|
184
|
+
*/
|
|
185
|
+
get resourceId() {
|
|
186
|
+
return this.id;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Get the policy definition ID this assignment references
|
|
190
|
+
*/
|
|
191
|
+
get policyDefinitionId() {
|
|
192
|
+
return this.props.policyDefinitionId;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Get the scope of this policy assignment
|
|
196
|
+
*/
|
|
197
|
+
get assignmentScope() {
|
|
198
|
+
return this.props.scope;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get the enforcement mode
|
|
202
|
+
*/
|
|
203
|
+
get enforcementMode() {
|
|
204
|
+
return this.props.enforcementMode || "Default";
|
|
205
|
+
}
|
|
206
|
+
// =============================================================================
|
|
207
|
+
// PRIVATE HELPER METHODS
|
|
208
|
+
// =============================================================================
|
|
209
|
+
/**
|
|
210
|
+
* Applies ignore changes lifecycle rules if specified in props
|
|
211
|
+
*/
|
|
212
|
+
_applyIgnoreChanges() {
|
|
213
|
+
if (this.props.ignoreChanges && this.props.ignoreChanges.length > 0) {
|
|
214
|
+
this.terraformResource.addOverride("lifecycle", [
|
|
215
|
+
{
|
|
216
|
+
ignore_changes: this.props.ignoreChanges,
|
|
217
|
+
},
|
|
218
|
+
]);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
exports.PolicyAssignment = PolicyAssignment;
|
|
223
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
224
|
+
PolicyAssignment[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PolicyAssignment", version: "1.3.0" };
|
|
225
|
+
(() => {
|
|
226
|
+
azapi_resource_1.AzapiResource.registerSchemas(policy_assignment_schemas_1.POLICY_ASSIGNMENT_TYPE, policy_assignment_schemas_1.ALL_POLICY_ASSIGNMENT_VERSIONS);
|
|
227
|
+
})();
|
|
228
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWFzc2lnbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtcG9saWN5YXNzaWdubWVudC9saWIvcG9saWN5LWFzc2lnbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCwrQkFBK0I7QUFFL0IsMkVBR3FDO0FBQ3JDLDhFQUdtRDtBQWtPbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdERztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsOEJBQWE7SUFpQmpELG9CQUFvQjtJQUVwQjs7Ozs7Ozs7O09BU0c7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGdFQUFnRTtRQUNoRSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FDYiwrQ0FBK0MsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLGdDQUFnQztnQkFDN0Ysc0VBQXNFLENBQ3pFLENBQUM7UUFDSixDQUFDO1FBRUQsbUZBQW1GO1FBRW5GLGdGQUFnRjtRQUNoRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ3BELEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNkLFdBQVcsRUFBRSxpQ0FBaUM7U0FDL0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN4RCxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxRQUFRO1lBQy9DLFdBQVcsRUFBRSxtQ0FBbUM7U0FDakQsQ0FBQyxDQUFDO1FBRUgsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUxQyxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGdGQUFnRjtJQUNoRiwrQ0FBK0M7SUFDL0MsZ0ZBQWdGO0lBRWhGOzs7T0FHRztJQUNPLGNBQWM7UUFDdEIsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ08sWUFBWTtRQUNwQixPQUFPLGtEQUFzQixDQUFDO0lBQ2hDLENBQUM7SUFFRDs7O09BR0c7SUFDTyxTQUFTO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLGtCQUFrQixDQUFDLEtBQVU7UUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBOEIsQ0FBQztRQUVsRCxNQUFNLElBQUksR0FBUTtZQUNoQixVQUFVLEVBQUU7Z0JBQ1Ysa0JBQWtCLEVBQUUsVUFBVSxDQUFDLGtCQUFrQjtnQkFDakQsOEVBQThFO2dCQUM5RSxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7Z0JBQ25DLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztnQkFDbkMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxlQUFlLElBQUksU0FBUztnQkFDeEQsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO2dCQUNqQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7Z0JBQzdCLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztnQkFDL0IscUJBQXFCLEVBQUUsVUFBVSxDQUFDLHFCQUFxQjthQUN4RDtTQUNGLENBQUM7UUFFRiwyQkFBMkI7UUFDM0IsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3BDLHVGQUF1RjtZQUN2RixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDdEMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGVBQWUsQ0FBQyxLQUFVO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLEtBQThCLENBQUM7UUFDbEQsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYsa0RBQWtEO0lBQ2xELGdGQUFnRjtJQUVoRjs7O09BR0c7SUFDSCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsa0JBQWtCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsSUFBSSxTQUFTLENBQUM7SUFDakQsQ0FBQztJQUVELGdGQUFnRjtJQUNoRix5QkFBeUI7SUFDekIsZ0ZBQWdGO0lBRWhGOztPQUVHO0lBQ0ssbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUM5QztvQkFDRSxjQUFjLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO2lCQUN6QzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQXZMSCw0Q0F3TEM7OztBQXZMQztJQUNFLDhCQUFhLENBQUMsZUFBZSxDQUMzQixrREFBc0IsRUFDdEIsMERBQThCLENBQy9CLENBQUM7QUFDSixDQUFDLEdBQUEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCBBenVyZSBQb2xpY3kgQXNzaWdubWVudCBpbXBsZW1lbnRhdGlvbiB1c2luZyBWZXJzaW9uZWRBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIGZvciBtYW5hZ2luZyBBenVyZSBQb2xpY3kgQXNzaWdubWVudHNcbiAqIHVzaW5nIHRoZSBBWkFQSSBwcm92aWRlci4gUG9saWN5IGFzc2lnbm1lbnRzIGFwcGx5IHBvbGljeSBkZWZpbml0aW9ucyB0byBzcGVjaWZpYyBzY29wZXNcbiAqIChzdWJzY3JpcHRpb24sIHJlc291cmNlIGdyb3VwLCBvciByZXNvdXJjZSkgYW5kIGNhbiBwcm92aWRlIHBhcmFtZXRlciB2YWx1ZXMgYW5kXG4gKiBlbmZvcmNlbWVudCBzZXR0aW5ncy5cbiAqXG4gKiBTdXBwb3J0ZWQgQVBJIFZlcnNpb25zOlxuICogLSAyMDIyLTA2LTAxIChBY3RpdmUsIExhdGVzdClcbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gQXV0b21hdGljIGxhdGVzdCB2ZXJzaW9uIHJlc29sdXRpb24gd2hlbiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICogLSBFeHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmcgZm9yIHN0YWJpbGl0eSByZXF1aXJlbWVudHNcbiAqIC0gU2NoZW1hLWRyaXZlbiB2YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvblxuICogLSBTdXBwb3J0IGZvciBlbmZvcmNlbWVudCBtb2RlcyAoRGVmYXVsdCwgRG9Ob3RFbmZvcmNlKVxuICogLSBNYW5hZ2VkIGlkZW50aXR5IHN1cHBvcnQgZm9yIHJlbWVkaWF0aW9uIHBvbGljaWVzXG4gKiAtIEN1c3RvbSBub24tY29tcGxpYW5jZSBtZXNzYWdlc1xuICogLSBTY29wZSBleGNsdXNpb25zIChub3RTY29wZXMpXG4gKiAtIEpTSUkgY29tcGxpYW5jZSBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICovXG5cbmltcG9ydCAqIGFzIGNka3RmIGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIEFMTF9QT0xJQ1lfQVNTSUdOTUVOVF9WRVJTSU9OUyxcbiAgUE9MSUNZX0FTU0lHTk1FTlRfVFlQRSxcbn0gZnJvbSBcIi4vcG9saWN5LWFzc2lnbm1lbnQtc2NoZW1hc1wiO1xuaW1wb3J0IHtcbiAgQXphcGlSZXNvdXJjZSxcbiAgQXphcGlSZXNvdXJjZVByb3BzLFxufSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvYXphcGkvYXphcGktcmVzb3VyY2VcIjtcbmltcG9ydCB7IEFwaVNjaGVtYSB9IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi92ZXJzaW9uLW1hbmFnZXIvaW50ZXJmYWNlcy92ZXJzaW9uLWludGVyZmFjZXNcIjtcblxuLyoqXG4gKiBJZGVudGl0eSBjb25maWd1cmF0aW9uIGZvciBwb2xpY3kgYXNzaWdubWVudHNcbiAqIFJlcXVpcmVkIGZvciBwb2xpY2llcyB3aXRoIGRlcGxveUlmTm90RXhpc3RzIG9yIG1vZGlmeSBlZmZlY3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5QXNzaWdubWVudElkZW50aXR5IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIG1hbmFnZWQgaWRlbnRpdHlcbiAgICogQGV4YW1wbGUgXCJTeXN0ZW1Bc3NpZ25lZFwiLCBcIlVzZXJBc3NpZ25lZFwiLCBcIk5vbmVcIlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdXNlciBhc3NpZ25lZCBpZGVudGl0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICogUmVxdWlyZWQgd2hlbiB0eXBlIGlzIFVzZXJBc3NpZ25lZFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvcmcvcHJvdmlkZXJzL01pY3Jvc29mdC5NYW5hZ2VkSWRlbnRpdHkvdXNlckFzc2lnbmVkSWRlbnRpdGllcy9pZGVudGl0eVwiOiB7fVxuICAgKiB9XG4gICAqL1xuICByZWFkb25seSB1c2VyQXNzaWduZWRJZGVudGl0aWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLyoqXG4gKiBOb24tY29tcGxpYW5jZSBtZXNzYWdlIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2xpY3lBc3NpZ25tZW50Tm9uQ29tcGxpYW5jZU1lc3NhZ2Uge1xuICAvKipcbiAgICogVGhlIG5vbi1jb21wbGlhbmNlIG1lc3NhZ2UgZm9yIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IGRlZmluaXRpb24gcmVmZXJlbmNlIElEIHdpdGhpbiBhIHBvbGljeSBzZXQgZGVmaW5pdGlvblxuICAgKiBPcHRpb25hbCAtIGlmIHNwZWNpZmllZCwgdGhpcyBtZXNzYWdlIGFwcGxpZXMgb25seSB0byB0aGUgc3BlY2lmaWVkIHBvbGljeSB3aXRoaW4gdGhlIHNldFxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5RGVmaW5pdGlvblJlZmVyZW5jZUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSB1bmlmaWVkIEF6dXJlIFBvbGljeSBBc3NpZ25tZW50XG4gKlxuICogRXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMgd2l0aCBQb2xpY3kgQXNzaWdubWVudCBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5QXNzaWdubWVudFByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgZGVmaW5pdGlvbiBJRCB0byBhc3NpZ25cbiAgICogVGhpcyBjYW4gYmUgYSBidWlsdC1pbiBvciBjdXN0b20gcG9saWN5IGRlZmluaXRpb25cbiAgICogUmVxdWlyZWQgcHJvcGVydHlcbiAgICpcbiAgICogQGV4YW1wbGUgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3BvbGljeS1uYW1lXCJcbiAgICogQGV4YW1wbGUgXCIvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zLzA2YTc4ZTIwLTkzNTgtNDFjOS05MjNjLWZiNzM2ZDM4MmE0ZFwiIChidWlsdC1pbilcbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeURlZmluaXRpb25JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgYXQgd2hpY2ggdGhlIHBvbGljeSBhc3NpZ25tZW50IGlzIGFwcGxpZWRcbiAgICogQ2FuIGJlIGEgc3Vic2NyaXB0aW9uLCByZXNvdXJjZSBncm91cCwgb3IgcmVzb3VyY2VcbiAgICogUmVxdWlyZWQgcHJvcGVydHlcbiAgICpcbiAgICogQGV4YW1wbGUgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIlxuICAgKiBAZXhhbXBsZSBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy9yZy1uYW1lXCJcbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqIFByb3ZpZGVzIGEgaHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhlIGFzc2lnbm1lbnRcbiAgICpcbiAgICogQGV4YW1wbGUgXCJSZXF1aXJlIHRhZyBvbiByZXNvdXJjZXMgaW4gcHJvZHVjdGlvblwiXG4gICAqL1xuICByZWFkb25seSBkaXNwbGF5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBhc3NpZ25tZW50IGRlc2NyaXB0aW9uXG4gICAqIFByb3ZpZGVzIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhc3NpZ25tZW50XG4gICAqXG4gICAqIEBleGFtcGxlIFwiRW5mb3JjZXMgcmVxdWlyZWQgdGFncyBvbiBhbGwgcmVzb3VyY2VzIGluIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlbmZvcmNlbWVudCBtb2RlIG9mIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKiBAZGVmYXVsdCBcIkRlZmF1bHRcIlxuICAgKiBAZXhhbXBsZSBcIkRlZmF1bHRcIiAtIFBvbGljeSBlZmZlY3QgaXMgZW5mb3JjZWQgZHVyaW5nIHJlc291cmNlIGNyZWF0aW9uL3VwZGF0ZVxuICAgKiBAZXhhbXBsZSBcIkRvTm90RW5mb3JjZVwiIC0gUG9saWN5IGVmZmVjdCBpcyBub3QgZW5mb3JjZWQgKGF1ZGl0IG9ubHkpXG4gICAqL1xuICByZWFkb25seSBlbmZvcmNlbWVudE1vZGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhcmFtZXRlcnMgZm9yIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKiBQcm92aWRlcyB2YWx1ZXMgZm9yIHBhcmFtZXRlcnMgZGVmaW5lZCBpbiB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIHRhZ05hbWU6IHtcbiAgICogICAgIHZhbHVlOiBcIkVudmlyb25tZW50XCJcbiAgICogICB9LFxuICAgKiAgIHRhZ1ZhbHVlOiB7XG4gICAqICAgICB2YWx1ZTogXCJQcm9kdWN0aW9uXCJcbiAgICogICB9XG4gICAqIH1cbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGZvciB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICogVXNlZCB0byBzdG9yZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGxpa2UgYXNzaWduZWRCeSwgcGFyYW1ldGVyU2NvcGVzLCBldGMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHtcbiAgICogICBhc3NpZ25lZEJ5OiBcImFkbWluQGV4YW1wbGUuY29tXCIsXG4gICAqICAgcGFyYW1ldGVyU2NvcGVzOiB7fVxuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IGFueTtcblxuICAvKipcbiAgICogVGhlIG1hbmFnZWQgaWRlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKiBSZXF1aXJlZCBmb3IgcG9saWNpZXMgd2l0aCBkZXBsb3lJZk5vdEV4aXN0cyBvciBtb2RpZnkgZWZmZWN0c1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgdHlwZTogXCJTeXN0ZW1Bc3NpZ25lZFwiXG4gICAqIH1cbiAgICovXG4gIHJlYWRvbmx5IGlkZW50aXR5PzogUG9saWN5QXNzaWdubWVudElkZW50aXR5O1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5J3MgZXhjbHVkZWQgc2NvcGVzXG4gICAqIFJlc291cmNlcyB3aXRoaW4gdGhlc2Ugc2NvcGVzIHdpbGwgbm90IGJlIGV2YWx1YXRlZCBieSB0aGUgcG9saWN5XG4gICAqXG4gICAqIEBleGFtcGxlIFtcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy9leGNsdWRlZC1yZ1wiXVxuICAgKi9cbiAgcmVhZG9ubHkgbm90U2NvcGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBub24tY29tcGxpYW5jZSBtZXNzYWdlcyBmb3IgdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqIFByb3ZpZGVzIGN1c3RvbSBtZXNzYWdlcyB3aGVuIHJlc291cmNlcyBhcmUgbm9uLWNvbXBsaWFudFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBbXG4gICAqICAge1xuICAgKiAgICAgbWVzc2FnZTogXCJSZXNvdXJjZSBtdXN0IGhhdmUgdGhlIEVudmlyb25tZW50IHRhZ1wiXG4gICAqICAgfVxuICAgKiBdXG4gICAqL1xuICByZWFkb25seSBub25Db21wbGlhbmNlTWVzc2FnZXM/OiBQb2xpY3lBc3NpZ25tZW50Tm9uQ29tcGxpYW5jZU1lc3NhZ2VbXTtcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBydWxlcyB0byBpZ25vcmUgY2hhbmdlc1xuICAgKiBAZXhhbXBsZSBbXCJtZXRhZGF0YVwiXVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlQ2hhbmdlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgaW50ZXJmYWNlIGZvciBBenVyZSBQb2xpY3kgQXNzaWdubWVudFxuICogVGhpcyBpcyByZXF1aXJlZCBmb3IgSlNJSSBjb21wbGlhbmNlIHRvIHN1cHBvcnQgbXVsdGktbGFuZ3VhZ2UgY29kZSBnZW5lcmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5QXNzaWdubWVudFByb3BlcnRpZXMge1xuICAvKipcbiAgICogVGhlIHBvbGljeSBkZWZpbml0aW9uIElEXG4gICAqL1xuICByZWFkb25seSBwb2xpY3lEZWZpbml0aW9uSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNjb3BlIG9mIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IGFzc2lnbm1lbnQgZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5mb3JjZW1lbnQgbW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5mb3JjZW1lbnRNb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIGZvciB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGZvciB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5J3MgZXhjbHVkZWQgc2NvcGVzXG4gICAqL1xuICByZWFkb25seSBub3RTY29wZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG5vbi1jb21wbGlhbmNlIG1lc3NhZ2VzXG4gICAqL1xuICByZWFkb25seSBub25Db21wbGlhbmNlTWVzc2FnZXM/OiBQb2xpY3lBc3NpZ25tZW50Tm9uQ29tcGxpYW5jZU1lc3NhZ2VbXTtcbn1cblxuLyoqXG4gKiBUaGUgcmVzb3VyY2UgYm9keSBpbnRlcmZhY2UgZm9yIEF6dXJlIFBvbGljeSBBc3NpZ25tZW50IEFQSSBjYWxsc1xuICogVGhpcyBtYXRjaGVzIHRoZSBBenVyZSBSRVNUIEFQSSBzY2hlbWEgZm9yIHBvbGljeSBhc3NpZ25tZW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeUFzc2lnbm1lbnRCb2R5IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGVydGllczogUG9saWN5QXNzaWdubWVudFByb3BlcnRpZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBtYW5hZ2VkIGlkZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IGlkZW50aXR5PzogUG9saWN5QXNzaWdubWVudElkZW50aXR5O1xufVxuXG4vKipcbiAqIFVuaWZpZWQgQXp1cmUgUG9saWN5IEFzc2lnbm1lbnQgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2luZ2xlLCB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIGZvciBtYW5hZ2luZyBBenVyZVxuICogUG9saWN5IEFzc2lnbm1lbnRzLiBJdCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvbiByZXNvbHV0aW9uLCBzY2hlbWEgdmFsaWRhdGlvbixcbiAqIGFuZCBwcm9wZXJ0eSB0cmFuc2Zvcm1hdGlvbi5cbiAqXG4gKiBOb3RlOiBQb2xpY3kgYXNzaWdubWVudHMgY2FuIGJlIGRlcGxveWVkIGF0IHN1YnNjcmlwdGlvbiwgcmVzb3VyY2UgZ3JvdXAsIG9yIHJlc291cmNlIHNjb3BlLlxuICogTGlrZSBwb2xpY3kgZGVmaW5pdGlvbnMsIHRoZXkgZG8gbm90IGhhdmUgYSBsb2NhdGlvbiBwcm9wZXJ0eSBhcyB0aGV5IGFyZSBub3QgcmVnaW9uLXNwZWNpZmljLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyBwb2xpY3kgYXNzaWdubWVudDpcbiAqIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudCh0aGlzLCBcImFzc2lnbm1lbnRcIiwge1xuICogICBuYW1lOiBcInJlcXVpcmUtdGFnLWFzc2lnbm1lbnRcIixcbiAqICAgcG9saWN5RGVmaW5pdGlvbklkOiBwb2xpY3lEZWZpbml0aW9uLmlkLFxuICogICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvcmctbmFtZVwiLFxuICogICBkaXNwbGF5TmFtZTogXCJSZXF1aXJlIHRhZyBvbiByZXNvdXJjZXNcIixcbiAqICAgZGVzY3JpcHRpb246IFwiRW5mb3JjZXMgcmVxdWlyZWQgdGFncyBvbiByZXNvdXJjZXNcIlxuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFBvbGljeSBhc3NpZ25tZW50IHdpdGggcGFyYW1ldGVyczpcbiAqIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudCh0aGlzLCBcImFzc2lnbm1lbnRcIiwge1xuICogICBuYW1lOiBcInJlcXVpcmUtdGFnLWFzc2lnbm1lbnRcIixcbiAqICAgcG9saWN5RGVmaW5pdGlvbklkOiBwb2xpY3lEZWZpbml0aW9uLmlkLFxuICogICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAqICAgcGFyYW1ldGVyczoge1xuICogICAgIHRhZ05hbWU6IHtcbiAqICAgICAgIHZhbHVlOiBcIkVudmlyb25tZW50XCJcbiAqICAgICB9LFxuICogICAgIHRhZ1ZhbHVlOiB7XG4gKiAgICAgICB2YWx1ZTogXCJQcm9kdWN0aW9uXCJcbiAqICAgICB9XG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBQb2xpY3kgYXNzaWdubWVudCB3aXRoIG1hbmFnZWQgaWRlbnRpdHk6XG4gKiBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQodGhpcywgXCJhc3NpZ25tZW50XCIsIHtcbiAqICAgbmFtZTogXCJkZXBsb3ktbW9uaXRvcmluZy1hc3NpZ25tZW50XCIsXG4gKiAgIHBvbGljeURlZmluaXRpb25JZDogXCIvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3BvbGljeS1pZFwiLFxuICogICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAqICAgaWRlbnRpdHk6IHtcbiAqICAgICB0eXBlOiBcIlN5c3RlbUFzc2lnbmVkXCJcbiAqICAgfVxuICogfSk7XG4gKlxuICogQHN0YWJpbGl0eSBzdGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIFBvbGljeUFzc2lnbm1lbnQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIFBPTElDWV9BU1NJR05NRU5UX1RZUEUsXG4gICAgICBBTExfUE9MSUNZX0FTU0lHTk1FTlRfVkVSU0lPTlMsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgcHJvcGVydGllcyBmb3IgdGhpcyBQb2xpY3kgQXNzaWdubWVudCBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBQb2xpY3lBc3NpZ25tZW50UHJvcHM7XG5cbiAgLy8gT3V0cHV0IHByb3BlcnRpZXMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZ1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICAvLyBQdWJsaWMgcHJvcGVydGllc1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEF6dXJlIFBvbGljeSBBc3NpZ25tZW50IHVzaW5nIHRoZSBWZXJzaW9uZWRBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICAgKlxuICAgKiBUaGUgY29uc3RydWN0b3IgYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gcmVzb2x1dGlvbiwgc2NoZW1hIHJlZ2lzdHJhdGlvbixcbiAgICogdmFsaWRhdGlvbiwgYW5kIHJlc291cmNlIGNyZWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBpbnN0YW5jZVxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBQb2xpY3kgQXNzaWdubWVudFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFBvbGljeUFzc2lnbm1lbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhhdCBsb2NhdGlvbiBpcyBwcm92aWRlZCB3aGVuIGlkZW50aXR5IGlzIHNwZWNpZmllZFxuICAgIGlmIChwcm9wcy5pZGVudGl0eSAmJiAhdGhpcy5sb2NhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTG9jYXRpb24gaXMgcmVxdWlyZWQgZm9yIFBvbGljeSBBc3NpZ25tZW50IFwiJHtwcm9wcy5uYW1lIHx8IGlkfVwiIHdoZW4gaWRlbnRpdHkgaXMgc3BlY2lmaWVkLiBgICtcbiAgICAgICAgICBgVGhlIG1hbmFnZWQgaWRlbnRpdHkgbXVzdCBiZSBwcm92aXNpb25lZCBpbiBhIHNwZWNpZmljIEF6dXJlIHJlZ2lvbi5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IHByb3BlcnRpZXMgZnJvbSB0aGUgQVpBUEkgcmVzb3VyY2Ugb3V0cHV0cyB1c2luZyBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvblxuXG4gICAgLy8gQ3JlYXRlIFRlcnJhZm9ybSBvdXRwdXRzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmcgZnJvbSBvdGhlciByZXNvdXJjZXNcbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBQb2xpY3kgQXNzaWdubWVudFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIFBvbGljeSBBc3NpZ25tZW50XCIsXG4gICAgfSk7XG5cbiAgICAvLyBPdmVycmlkZSBsb2dpY2FsIElEcyB0byBtYXRjaCBvcmlnaW5hbCBuYW1pbmcgY29udmVudGlvblxuICAgIHRoaXMuaWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuXG4gICAgLy8gQXBwbHkgaWdub3JlIGNoYW5nZXMgaWYgc3BlY2lmaWVkXG4gICAgdGhpcy5fYXBwbHlJZ25vcmVDaGFuZ2VzKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRVFVSVJFRCBBQlNUUkFDVCBNRVRIT0RTIEZST00gQXphcGlSZXNvdXJjZVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkZWZhdWx0IEFQSSB2ZXJzaW9uIHRvIHVzZSB3aGVuIG5vIGV4cGxpY2l0IHZlcnNpb24gaXMgc3BlY2lmaWVkXG4gICAqIFJldHVybnMgdGhlIG1vc3QgcmVjZW50IHN0YWJsZSB2ZXJzaW9uIGFzIHRoZSBkZWZhdWx0XG4gICAqL1xuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDIyLTA2LTAxXCI7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQXp1cmUgcmVzb3VyY2UgdHlwZSBmb3IgUG9saWN5IEFzc2lnbm1lbnRzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFBPTElDWV9BU1NJR05NRU5UX1RZUEU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQVBJIHNjaGVtYSBmb3IgdGhlIHJlc29sdmVkIHZlcnNpb25cbiAgICogVXNlcyB0aGUgZnJhbWV3b3JrJ3Mgc2NoZW1hIHJlc29sdXRpb24gdG8gZ2V0IHRoZSBhcHByb3ByaWF0ZSBzY2hlbWFcbiAgICovXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgcmVzb3VyY2UgYm9keSBmb3IgdGhlIEF6dXJlIEFQSSBjYWxsXG4gICAqIFRyYW5zZm9ybXMgdGhlIGlucHV0IHByb3BlcnRpZXMgaW50byB0aGUgSlNPTiBmb3JtYXQgZXhwZWN0ZWQgYnkgQXp1cmUgUkVTVCBBUElcbiAgICpcbiAgICogTm90ZTogUG9saWN5IGFzc2lnbm1lbnRzIGRvIG5vdCBoYXZlIGEgbG9jYXRpb24gcHJvcGVydHkgYXMgdGhleSBhcmVcbiAgICogc2NvcGVkIHJlc291cmNlcyAoc3Vic2NyaXB0aW9uLCByZXNvdXJjZSBncm91cCwgb3IgcmVzb3VyY2UgbGV2ZWwpLlxuICAgKiBUaGUgc2NvcGUgcHJvcGVydHkgaXMgTk9UIGluY2x1ZGVkIGluIHRoZSBib2R5IGFzIGl0J3MgcmVhZC1vbmx5IGFuZFxuICAgKiBhdXRvbWF0aWNhbGx5IGRlcml2ZWQgZnJvbSB0aGUgcGFyZW50SWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBQb2xpY3lBc3NpZ25tZW50UHJvcHM7XG5cbiAgICBjb25zdCBib2R5OiBhbnkgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDogdHlwZWRQcm9wcy5wb2xpY3lEZWZpbml0aW9uSWQsXG4gICAgICAgIC8vIE5vdGU6IHNjb3BlIGlzIE5PVCBpbmNsdWRlZCBoZXJlIC0gaXQncyByZWFkLW9ubHkgYW5kIGRlcml2ZWQgZnJvbSBwYXJlbnRJZFxuICAgICAgICBkaXNwbGF5TmFtZTogdHlwZWRQcm9wcy5kaXNwbGF5TmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHR5cGVkUHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAgIGVuZm9yY2VtZW50TW9kZTogdHlwZWRQcm9wcy5lbmZvcmNlbWVudE1vZGUgfHwgXCJEZWZhdWx0XCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHR5cGVkUHJvcHMucGFyYW1ldGVycyxcbiAgICAgICAgbWV0YWRhdGE6IHR5cGVkUHJvcHMubWV0YWRhdGEsXG4gICAgICAgIG5vdFNjb3BlczogdHlwZWRQcm9wcy5ub3RTY29wZXMsXG4gICAgICAgIG5vbkNvbXBsaWFuY2VNZXNzYWdlczogdHlwZWRQcm9wcy5ub25Db21wbGlhbmNlTWVzc2FnZXMsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBBZGQgaWRlbnRpdHkgaWYgcHJvdmlkZWRcbiAgICBpZiAodHlwZWRQcm9wcy5pZGVudGl0eSkge1xuICAgICAgYm9keS5pZGVudGl0eSA9IHR5cGVkUHJvcHMuaWRlbnRpdHk7XG4gICAgICAvLyBBenVyZSByZXF1aXJlcyBsb2NhdGlvbiB3aGVuIGlkZW50aXR5IGlzIHNwZWNpZmllZCBmb3IgbWFuYWdlZCBpZGVudGl0eSBwcm92aXNpb25pbmdcbiAgICAgIGJvZHkubG9jYXRpb24gPSB0eXBlZFByb3BzLmxvY2F0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyBwYXJlbnQgSUQgcmVzb2x1dGlvbiB0byB1c2UgdGhlIHNjb3BlIGZyb20gcHJvcHNcbiAgICogUG9saWN5IGFzc2lnbm1lbnRzIGFyZSBzY29wZWQgcmVzb3VyY2VzIHdoZXJlIHRoZSBzY29wZSBJUyB0aGUgcGFyZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBQb2xpY3lBc3NpZ25tZW50UHJvcHM7XG4gICAgcmV0dXJuIHR5cGVkUHJvcHMuc2NvcGU7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQVUJMSUMgTUVUSE9EUyBGT1IgUE9MSUNZIEFTU0lHTk1FTlQgT1BFUkFUSU9OU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZ1bGwgcmVzb3VyY2UgaWRlbnRpZmllciBmb3IgdXNlIGluIG90aGVyIEF6dXJlIHJlc291cmNlc1xuICAgKiBBbGlhcyBmb3IgdGhlIGlkIHByb3BlcnR5XG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlc291cmNlSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBvbGljeSBkZWZpbml0aW9uIElEIHRoaXMgYXNzaWdubWVudCByZWZlcmVuY2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBvbGljeURlZmluaXRpb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBvbGljeURlZmluaXRpb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNjb3BlIG9mIHRoaXMgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHB1YmxpYyBnZXQgYXNzaWdubWVudFNjb3BlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc2NvcGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBlbmZvcmNlbWVudCBtb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVuZm9yY2VtZW50TW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVuZm9yY2VtZW50TW9kZSB8fCBcIkRlZmF1bHRcIjtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgSEVMUEVSIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQXBwbGllcyBpZ25vcmUgY2hhbmdlcyBsaWZlY3ljbGUgcnVsZXMgaWYgc3BlY2lmaWVkIGluIHByb3BzXG4gICAqL1xuICBwcml2YXRlIF9hcHBseUlnbm9yZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyAmJiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5hZGRPdmVycmlkZShcImxpZmVjeWNsZVwiLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZ25vcmVfY2hhbmdlczogdGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration test for Azure Policy Assignment
|
|
3
|
+
*
|
|
4
|
+
* This test demonstrates basic usage of the PolicyAssignment construct
|
|
5
|
+
* and validates deployment, idempotency, and cleanup.
|
|
6
|
+
*
|
|
7
|
+
* Note: This test requires a policy definition to exist before assigning it.
|
|
8
|
+
* It creates a simple policy definition first, then creates assignments
|
|
9
|
+
* that reference it.
|
|
10
|
+
*
|
|
11
|
+
* Run with: npm run integration:nostream
|
|
12
|
+
*/
|
|
13
|
+
import "cdktf/lib/testing/adapters/jest";
|