@microsoft/terraform-cdk-constructs 1.2.0 → 1.3.1
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 +54630 -26185
- 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 +349 -0
- package/lib/azure-policyassignment/lib/policy-assignment.js +237 -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 +281 -0
- package/lib/azure-policydefinition/lib/policy-definition.js +236 -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 +806 -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 +206 -26
- package/lib/core-azure/lib/azapi/azapi-resource.js +379 -91
- 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,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.RoleDefinition = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
/**
|
|
7
|
+
* Unified Azure Role Definition implementation using VersionedAzapiResource framework
|
|
8
|
+
*
|
|
9
|
+
* This class provides a version-aware implementation for managing Azure Role Definitions
|
|
10
|
+
* using the AZAPI provider. Role definitions define custom RBAC roles with specific
|
|
11
|
+
* permissions that can be assigned to users, groups, or service principals.
|
|
12
|
+
*
|
|
13
|
+
* Supported API Versions:
|
|
14
|
+
* - 2022-04-01 (Active, Latest)
|
|
15
|
+
*
|
|
16
|
+
* Features:
|
|
17
|
+
* - Automatic latest version resolution when no version is specified
|
|
18
|
+
* - Explicit version pinning for stability requirements
|
|
19
|
+
* - Schema-driven validation and transformation
|
|
20
|
+
* - Support for custom role permissions (actions, notActions, dataActions, notDataActions)
|
|
21
|
+
* - Assignable scopes configuration (subscription, resource group, management group)
|
|
22
|
+
* - JSII compliance for multi-language support
|
|
23
|
+
*/
|
|
24
|
+
const crypto_1 = require("crypto");
|
|
25
|
+
const cdktf = require("cdktf");
|
|
26
|
+
const role_definition_schemas_1 = require("./role-definition-schemas");
|
|
27
|
+
const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
|
|
28
|
+
/**
|
|
29
|
+
* Unified Azure Role Definition implementation
|
|
30
|
+
*
|
|
31
|
+
* This class provides a single, version-aware implementation for managing Azure
|
|
32
|
+
* Role Definitions. It automatically handles version resolution, schema validation,
|
|
33
|
+
* and property transformation.
|
|
34
|
+
*
|
|
35
|
+
* Note: Role definitions are tenant-specific resources deployed at subscription or
|
|
36
|
+
* management group scope. Unlike most Azure resources, they do not have a location
|
|
37
|
+
* property as they are not region-specific.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* Basic custom role definition for read-only access to compute resources
|
|
41
|
+
*
|
|
42
|
+
* Advanced features like data plane actions and complex permissions are supported
|
|
43
|
+
*
|
|
44
|
+
* @stability stable
|
|
45
|
+
*/
|
|
46
|
+
class RoleDefinition extends azapi_resource_1.AzapiResource {
|
|
47
|
+
// Public properties
|
|
48
|
+
/**
|
|
49
|
+
* Creates a new Azure Role Definition using the VersionedAzapiResource framework
|
|
50
|
+
*
|
|
51
|
+
* The constructor automatically handles version resolution, schema registration,
|
|
52
|
+
* validation, and resource creation.
|
|
53
|
+
*
|
|
54
|
+
* @param scope - The scope in which to define this construct
|
|
55
|
+
* @param id - The unique identifier for this instance
|
|
56
|
+
* @param props - Configuration properties for the Role Definition
|
|
57
|
+
*/
|
|
58
|
+
constructor(scope, id, props) {
|
|
59
|
+
super(scope, id, props);
|
|
60
|
+
this.props = props;
|
|
61
|
+
// Extract properties from the AZAPI resource outputs using Terraform interpolation
|
|
62
|
+
// Create Terraform outputs for easy access and referencing from other resources
|
|
63
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
64
|
+
value: this.id,
|
|
65
|
+
description: "The ID of the Role Definition",
|
|
66
|
+
});
|
|
67
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
68
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
69
|
+
description: "The name of the Role Definition",
|
|
70
|
+
});
|
|
71
|
+
// Override logical IDs to match original naming convention
|
|
72
|
+
this.idOutput.overrideLogicalId("id");
|
|
73
|
+
this.nameOutput.overrideLogicalId("name");
|
|
74
|
+
// Apply ignore changes if specified
|
|
75
|
+
this._applyIgnoreChanges();
|
|
76
|
+
}
|
|
77
|
+
// =============================================================================
|
|
78
|
+
// REQUIRED ABSTRACT METHODS FROM AzapiResource
|
|
79
|
+
// =============================================================================
|
|
80
|
+
/**
|
|
81
|
+
* Gets the default API version to use when no explicit version is specified
|
|
82
|
+
* Returns the most recent stable version as the default
|
|
83
|
+
*/
|
|
84
|
+
defaultVersion() {
|
|
85
|
+
return "2022-04-01";
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Gets the Azure resource type for Role Definitions
|
|
89
|
+
*/
|
|
90
|
+
resourceType() {
|
|
91
|
+
return role_definition_schemas_1.ROLE_DEFINITION_TYPE;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Gets the API schema for the resolved version
|
|
95
|
+
* Uses the framework's schema resolution to get the appropriate schema
|
|
96
|
+
*/
|
|
97
|
+
apiSchema() {
|
|
98
|
+
return this.resolveSchema();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Overrides the name resolution to generate deterministic GUIDs for role definitions
|
|
102
|
+
*
|
|
103
|
+
* Role definitions require GUID format IDs. This implementation generates a deterministic
|
|
104
|
+
* UUID based on the role definition's key properties to ensure:
|
|
105
|
+
* - Same GUID is generated on re-deployments with same parameters
|
|
106
|
+
* - Idempotent deployments (no duplicate role definitions)
|
|
107
|
+
* - Consistent behavior across deployment runs
|
|
108
|
+
*/
|
|
109
|
+
resolveName(props) {
|
|
110
|
+
const typedProps = props;
|
|
111
|
+
// Create a deterministic hash from key role definition properties
|
|
112
|
+
const hashInput = [
|
|
113
|
+
typedProps.roleName,
|
|
114
|
+
JSON.stringify(typedProps.assignableScopes),
|
|
115
|
+
].join("|");
|
|
116
|
+
const hash = (0, crypto_1.createHash)("sha256").update(hashInput).digest("hex");
|
|
117
|
+
// Convert hash to UUID format (8-4-4-4-12)
|
|
118
|
+
return [
|
|
119
|
+
hash.substring(0, 8),
|
|
120
|
+
hash.substring(8, 12),
|
|
121
|
+
hash.substring(12, 16),
|
|
122
|
+
hash.substring(16, 20),
|
|
123
|
+
hash.substring(20, 32),
|
|
124
|
+
].join("-");
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Creates the resource body for the Azure API call
|
|
128
|
+
* Transforms the input properties into the JSON format expected by Azure REST API
|
|
129
|
+
*
|
|
130
|
+
* Note: Role definitions do not have a location property as they are
|
|
131
|
+
* tenant-specific resources deployed at subscription or management group scope.
|
|
132
|
+
*/
|
|
133
|
+
createResourceBody(props) {
|
|
134
|
+
const typedProps = props;
|
|
135
|
+
return {
|
|
136
|
+
properties: {
|
|
137
|
+
roleName: typedProps.roleName,
|
|
138
|
+
description: typedProps.description,
|
|
139
|
+
type: typedProps.type || "CustomRole",
|
|
140
|
+
permissions: typedProps.permissions,
|
|
141
|
+
assignableScopes: typedProps.assignableScopes,
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
// =============================================================================
|
|
146
|
+
// PUBLIC METHODS FOR ROLE DEFINITION OPERATIONS
|
|
147
|
+
// =============================================================================
|
|
148
|
+
/**
|
|
149
|
+
* Get the full resource identifier for use in other Azure resources
|
|
150
|
+
* Alias for the id property
|
|
151
|
+
*/
|
|
152
|
+
get resourceId() {
|
|
153
|
+
return this.id;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get the role name
|
|
157
|
+
*/
|
|
158
|
+
get roleName() {
|
|
159
|
+
return this.props.roleName;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Get the role type
|
|
163
|
+
*/
|
|
164
|
+
get roleType() {
|
|
165
|
+
return this.props.type || "CustomRole";
|
|
166
|
+
}
|
|
167
|
+
// =============================================================================
|
|
168
|
+
// PRIVATE HELPER METHODS
|
|
169
|
+
// =============================================================================
|
|
170
|
+
/**
|
|
171
|
+
* Applies ignore changes lifecycle rules if specified in props
|
|
172
|
+
* Always includes body.properties.assignableScopes to handle Azure API format normalization
|
|
173
|
+
*/
|
|
174
|
+
_applyIgnoreChanges() {
|
|
175
|
+
// Always ignore assignableScopes format changes due to Azure API normalization
|
|
176
|
+
// Azure may return subscription-qualified format but accepts non-qualified format
|
|
177
|
+
const ignoreChanges = [
|
|
178
|
+
"body.properties.assignableScopes",
|
|
179
|
+
...(this.props.ignoreChanges || []),
|
|
180
|
+
];
|
|
181
|
+
this.terraformResource.addOverride("lifecycle", {
|
|
182
|
+
ignore_changes: ignoreChanges,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
exports.RoleDefinition = RoleDefinition;
|
|
187
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
188
|
+
RoleDefinition[_a] = { fqn: "@microsoft/terraform-cdk-constructs.RoleDefinition", version: "1.3.1" };
|
|
189
|
+
(() => {
|
|
190
|
+
azapi_resource_1.AzapiResource.registerSchemas(role_definition_schemas_1.ROLE_DEFINITION_TYPE, role_definition_schemas_1.ALL_ROLE_DEFINITION_VERSIONS);
|
|
191
|
+
})();
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1kZWZpbml0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXJvbGVkZWZpbml0aW9uL2xpYi9yb2xlLWRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxtQ0FBb0M7QUFDcEMsK0JBQStCO0FBRS9CLHVFQUdtQztBQUNuQyw4RUFHbUQ7QUFrSm5EOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQWEsY0FBZSxTQUFRLDhCQUFhO0lBaUIvQyxvQkFBb0I7SUFFcEI7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixtRkFBbUY7UUFFbkYsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLCtCQUErQjtTQUM3QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLGlDQUFpQztTQUMvQyxDQUFDLENBQUM7UUFFSCwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLCtDQUErQztJQUMvQyxnRkFBZ0Y7SUFFaEY7OztPQUdHO0lBQ08sY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxZQUFZO1FBQ3BCLE9BQU8sOENBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFNBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ08sV0FBVyxDQUFDLEtBQXlCO1FBQzdDLE1BQU0sVUFBVSxHQUFHLEtBQTRCLENBQUM7UUFFaEQsa0VBQWtFO1FBQ2xFLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLFVBQVUsQ0FBQyxRQUFRO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO1NBQzVDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRVosTUFBTSxJQUFJLEdBQUcsSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEUsMkNBQTJDO1FBQzNDLE9BQU87WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ3ZCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLGtCQUFrQixDQUFDLEtBQVU7UUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBNEIsQ0FBQztRQUNoRCxPQUFPO1lBQ0wsVUFBVSxFQUFFO2dCQUNWLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtnQkFDN0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO2dCQUNuQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksSUFBSSxZQUFZO2dCQUNyQyxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7Z0JBQ25DLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxnQkFBZ0I7YUFDOUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGdGQUFnRjtJQUNoRixnREFBZ0Q7SUFDaEQsZ0ZBQWdGO0lBRWhGOzs7T0FHRztJQUNILElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYseUJBQXlCO0lBQ3pCLGdGQUFnRjtJQUVoRjs7O09BR0c7SUFDSyxtQkFBbUI7UUFDekIsK0VBQStFO1FBQy9FLGtGQUFrRjtRQUNsRixNQUFNLGFBQWEsR0FBRztZQUNwQixrQ0FBa0M7WUFDbEMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztTQUNwQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7WUFDOUMsY0FBYyxFQUFFLGFBQWE7U0FDOUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFqTEgsd0NBa0xDOzs7QUFqTEM7SUFDRSw4QkFBYSxDQUFDLGVBQWUsQ0FDM0IsOENBQW9CLEVBQ3BCLHNEQUE0QixDQUM3QixDQUFDO0FBQ0osQ0FBQyxHQUFBLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaWZpZWQgQXp1cmUgUm9sZSBEZWZpbml0aW9uIGltcGxlbWVudGF0aW9uIHVzaW5nIFZlcnNpb25lZEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHZlcnNpb24tYXdhcmUgaW1wbGVtZW50YXRpb24gZm9yIG1hbmFnaW5nIEF6dXJlIFJvbGUgRGVmaW5pdGlvbnNcbiAqIHVzaW5nIHRoZSBBWkFQSSBwcm92aWRlci4gUm9sZSBkZWZpbml0aW9ucyBkZWZpbmUgY3VzdG9tIFJCQUMgcm9sZXMgd2l0aCBzcGVjaWZpY1xuICogcGVybWlzc2lvbnMgdGhhdCBjYW4gYmUgYXNzaWduZWQgdG8gdXNlcnMsIGdyb3Vwcywgb3Igc2VydmljZSBwcmluY2lwYWxzLlxuICpcbiAqIFN1cHBvcnRlZCBBUEkgVmVyc2lvbnM6XG4gKiAtIDIwMjItMDQtMDEgKEFjdGl2ZSwgTGF0ZXN0KVxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBBdXRvbWF0aWMgbGF0ZXN0IHZlcnNpb24gcmVzb2x1dGlvbiB3aGVuIG5vIHZlcnNpb24gaXMgc3BlY2lmaWVkXG4gKiAtIEV4cGxpY2l0IHZlcnNpb24gcGlubmluZyBmb3Igc3RhYmlsaXR5IHJlcXVpcmVtZW50c1xuICogLSBTY2hlbWEtZHJpdmVuIHZhbGlkYXRpb24gYW5kIHRyYW5zZm9ybWF0aW9uXG4gKiAtIFN1cHBvcnQgZm9yIGN1c3RvbSByb2xlIHBlcm1pc3Npb25zIChhY3Rpb25zLCBub3RBY3Rpb25zLCBkYXRhQWN0aW9ucywgbm90RGF0YUFjdGlvbnMpXG4gKiAtIEFzc2lnbmFibGUgc2NvcGVzIGNvbmZpZ3VyYXRpb24gKHN1YnNjcmlwdGlvbiwgcmVzb3VyY2UgZ3JvdXAsIG1hbmFnZW1lbnQgZ3JvdXApXG4gKiAtIEpTSUkgY29tcGxpYW5jZSBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBBTExfUk9MRV9ERUZJTklUSU9OX1ZFUlNJT05TLFxuICBST0xFX0RFRklOSVRJT05fVFlQRSxcbn0gZnJvbSBcIi4vcm9sZS1kZWZpbml0aW9uLXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogUGVybWlzc2lvbiBjb25maWd1cmF0aW9uIGZvciByb2xlIGRlZmluaXRpb25zXG4gKiBEZWZpbmVzIHdoYXQgYWN0aW9ucyB0aGUgcm9sZSBjYW4gcGVyZm9ybSBvbiBjb250cm9sIHBsYW5lIGFuZCBkYXRhIHBsYW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm9sZURlZmluaXRpb25QZXJtaXNzaW9uIHtcbiAgLyoqXG4gICAqIEFycmF5IG9mIGFsbG93ZWQgY29udHJvbCBwbGFuZSBhY3Rpb25zXG4gICAqIEFjdGlvbnMgYXJlIG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUgcGVyZm9ybWVkIG9uIEF6dXJlIHJlc291cmNlc1xuICAgKlxuICAgKiBAZXhhbXBsZSBbXCJNaWNyb3NvZnQuQ29tcHV0ZS92aXJ0dWFsTWFjaGluZXMvcmVhZFwiLCBcIk1pY3Jvc29mdC5Db21wdXRlL3ZpcnR1YWxNYWNoaW5lcy9zdGFydC9hY3Rpb25cIl1cbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQXJyYXkgb2YgZXhjbHVkZWQgY29udHJvbCBwbGFuZSBhY3Rpb25zXG4gICAqIEFjdGlvbnMgdGhhdCBhcmUgZXhwbGljaXRseSBkZW5pZWQgZXZlbiBpZiBpbmNsdWRlZCBpbiBhY3Rpb25zIGFycmF5XG4gICAqXG4gICAqIEBleGFtcGxlIFtcIk1pY3Jvc29mdC5Db21wdXRlL3ZpcnR1YWxNYWNoaW5lcy9kZWxldGVcIl1cbiAgICovXG4gIHJlYWRvbmx5IG5vdEFjdGlvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQXJyYXkgb2YgYWxsb3dlZCBkYXRhIHBsYW5lIGFjdGlvbnNcbiAgICogRGF0YSBhY3Rpb25zIGFyZSBvcGVyYXRpb25zIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBvbiBkYXRhIHdpdGhpbiByZXNvdXJjZXNcbiAgICpcbiAgICogQGV4YW1wbGUgW1wiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL2Jsb2JTZXJ2aWNlcy9jb250YWluZXJzL2Jsb2JzL3JlYWRcIl1cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFBY3Rpb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIGV4Y2x1ZGVkIGRhdGEgcGxhbmUgYWN0aW9uc1xuICAgKiBEYXRhIGFjdGlvbnMgdGhhdCBhcmUgZXhwbGljaXRseSBkZW5pZWRcbiAgICpcbiAgICogQGV4YW1wbGUgW1wiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL2Jsb2JTZXJ2aWNlcy9jb250YWluZXJzL2Jsb2JzL2RlbGV0ZVwiXVxuICAgKi9cbiAgcmVhZG9ubHkgbm90RGF0YUFjdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgdW5pZmllZCBBenVyZSBSb2xlIERlZmluaXRpb25cbiAqXG4gKiBFeHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB3aXRoIFJvbGUgRGVmaW5pdGlvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm9sZURlZmluaXRpb25Qcm9wcyBleHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcm9sZSBkZWZpbml0aW9uXG4gICAqIFRoaXMgaXMgdGhlIGRpc3BsYXkgbmFtZSBzaG93biBpbiB0aGUgQXp1cmUgcG9ydGFsXG4gICAqIFJlcXVpcmVkIHByb3BlcnR5XG4gICAqXG4gICAqIEBleGFtcGxlIFwiVmlydHVhbCBNYWNoaW5lIFJlYWRlclwiXG4gICAqL1xuICByZWFkb25seSByb2xlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSBkZWZpbml0aW9uIGRlc2NyaXB0aW9uXG4gICAqIFByb3ZpZGVzIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIHJvbGUgYWxsb3dzXG4gICAqXG4gICAqIEBleGFtcGxlIFwiQ2FuIHZpZXcgdmlydHVhbCBtYWNoaW5lcyBhbmQgdGhlaXIgcHJvcGVydGllc1wiXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm9sZSBkZWZpbml0aW9uXG4gICAqIEBkZWZhdWx0IFwiQ3VzdG9tUm9sZVwiXG4gICAqIEBleGFtcGxlIFwiQ3VzdG9tUm9sZVwiLCBcIkJ1aWx0SW5Sb2xlXCJcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIHBlcm1pc3Npb25zIG9iamVjdHMgdGhhdCBkZWZpbmUgd2hhdCBhY3Rpb25zIHRoZSByb2xlIGNhbiBwZXJmb3JtXG4gICAqIFJlcXVpcmVkIHByb3BlcnR5XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIFtcbiAgICogICB7XG4gICAqICAgICBhY3Rpb25zOiBbXCJNaWNyb3NvZnQuQ29tcHV0ZS92aXJ0dWFsTWFjaGluZXMvcmVhZFwiXSxcbiAgICogICAgIG5vdEFjdGlvbnM6IFtdLFxuICAgKiAgICAgZGF0YUFjdGlvbnM6IFtdLFxuICAgKiAgICAgbm90RGF0YUFjdGlvbnM6IFtdXG4gICAqICAgfVxuICAgKiBdXG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9uczogUm9sZURlZmluaXRpb25QZXJtaXNzaW9uW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIHNjb3BlcyB3aGVyZSB0aGlzIHJvbGUgY2FuIGJlIGFzc2lnbmVkXG4gICAqIENhbiBpbmNsdWRlIHN1YnNjcmlwdGlvbiwgcmVzb3VyY2UgZ3JvdXAsIG9yIG1hbmFnZW1lbnQgZ3JvdXAgc2NvcGVzXG4gICAqIFJlcXVpcmVkIHByb3BlcnR5XG4gICAqXG4gICAqIEBleGFtcGxlIFtcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiXVxuICAgKiBAZXhhbXBsZSBbXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvcmctbmFtZVwiXVxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaWduYWJsZVNjb3Blczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgcnVsZXMgdG8gaWdub3JlIGNoYW5nZXNcbiAgICogQGV4YW1wbGUgW1wiZGVzY3JpcHRpb25cIl1cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUNoYW5nZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGludGVyZmFjZSBmb3IgQXp1cmUgUm9sZSBEZWZpbml0aW9uXG4gKiBUaGlzIGlzIHJlcXVpcmVkIGZvciBKU0lJIGNvbXBsaWFuY2UgdG8gc3VwcG9ydCBtdWx0aS1sYW5ndWFnZSBjb2RlIGdlbmVyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb2xlRGVmaW5pdGlvblByb3BlcnRpZXMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJvbGUgZGVmaW5pdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvbGUgZGVmaW5pdGlvbiBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvbGUgZGVmaW5pdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgcGVybWlzc2lvbnMgb2JqZWN0c1xuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvbnM6IFJvbGVEZWZpbml0aW9uUGVybWlzc2lvbltdO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBhc3NpZ25hYmxlIHNjb3Blc1xuICAgKi9cbiAgcmVhZG9ubHkgYXNzaWduYWJsZVNjb3Blczogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIHJlc291cmNlIGJvZHkgaW50ZXJmYWNlIGZvciBBenVyZSBSb2xlIERlZmluaXRpb24gQVBJIGNhbGxzXG4gKiBUaGlzIG1hdGNoZXMgdGhlIEF6dXJlIFJFU1QgQVBJIHNjaGVtYSBmb3Igcm9sZSBkZWZpbml0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvbGVEZWZpbml0aW9uQm9keSB7XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydGllcyBvZiB0aGUgcm9sZSBkZWZpbml0aW9uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0aWVzOiBSb2xlRGVmaW5pdGlvblByb3BlcnRpZXM7XG59XG5cbi8qKlxuICogVW5pZmllZCBBenVyZSBSb2xlIERlZmluaXRpb24gaW1wbGVtZW50YXRpb25cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2luZ2xlLCB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIGZvciBtYW5hZ2luZyBBenVyZVxuICogUm9sZSBEZWZpbml0aW9ucy4gSXQgYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gcmVzb2x1dGlvbiwgc2NoZW1hIHZhbGlkYXRpb24sXG4gKiBhbmQgcHJvcGVydHkgdHJhbnNmb3JtYXRpb24uXG4gKlxuICogTm90ZTogUm9sZSBkZWZpbml0aW9ucyBhcmUgdGVuYW50LXNwZWNpZmljIHJlc291cmNlcyBkZXBsb3llZCBhdCBzdWJzY3JpcHRpb24gb3JcbiAqIG1hbmFnZW1lbnQgZ3JvdXAgc2NvcGUuIFVubGlrZSBtb3N0IEF6dXJlIHJlc291cmNlcywgdGhleSBkbyBub3QgaGF2ZSBhIGxvY2F0aW9uXG4gKiBwcm9wZXJ0eSBhcyB0aGV5IGFyZSBub3QgcmVnaW9uLXNwZWNpZmljLlxuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyBjdXN0b20gcm9sZSBkZWZpbml0aW9uIGZvciByZWFkLW9ubHkgYWNjZXNzIHRvIGNvbXB1dGUgcmVzb3VyY2VzXG4gKlxuICogQWR2YW5jZWQgZmVhdHVyZXMgbGlrZSBkYXRhIHBsYW5lIGFjdGlvbnMgYW5kIGNvbXBsZXggcGVybWlzc2lvbnMgYXJlIHN1cHBvcnRlZFxuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBSb2xlRGVmaW5pdGlvbiBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgUk9MRV9ERUZJTklUSU9OX1RZUEUsXG4gICAgICBBTExfUk9MRV9ERUZJTklUSU9OX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoaXMgUm9sZSBEZWZpbml0aW9uIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IFJvbGVEZWZpbml0aW9uUHJvcHM7XG5cbiAgLy8gT3V0cHV0IHByb3BlcnRpZXMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZ1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICAvLyBQdWJsaWMgcHJvcGVydGllc1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEF6dXJlIFJvbGUgRGVmaW5pdGlvbiB1c2luZyB0aGUgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAgICpcbiAgICogVGhlIGNvbnN0cnVjdG9yIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uIHJlc29sdXRpb24sIHNjaGVtYSByZWdpc3RyYXRpb24sXG4gICAqIHZhbGlkYXRpb24sIGFuZCByZXNvdXJjZSBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgUm9sZSBEZWZpbml0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUm9sZURlZmluaXRpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgLy8gRXh0cmFjdCBwcm9wZXJ0aWVzIGZyb20gdGhlIEFaQVBJIHJlc291cmNlIG91dHB1dHMgdXNpbmcgVGVycmFmb3JtIGludGVycG9sYXRpb25cblxuICAgIC8vIENyZWF0ZSBUZXJyYWZvcm0gb3V0cHV0cyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nIGZyb20gb3RoZXIgcmVzb3VyY2VzXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgUm9sZSBEZWZpbml0aW9uXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgUm9sZSBEZWZpbml0aW9uXCIsXG4gICAgfSk7XG5cbiAgICAvLyBPdmVycmlkZSBsb2dpY2FsIElEcyB0byBtYXRjaCBvcmlnaW5hbCBuYW1pbmcgY29udmVudGlvblxuICAgIHRoaXMuaWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuXG4gICAgLy8gQXBwbHkgaWdub3JlIGNoYW5nZXMgaWYgc3BlY2lmaWVkXG4gICAgdGhpcy5fYXBwbHlJZ25vcmVDaGFuZ2VzKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRVFVSVJFRCBBQlNUUkFDVCBNRVRIT0RTIEZST00gQXphcGlSZXNvdXJjZVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkZWZhdWx0IEFQSSB2ZXJzaW9uIHRvIHVzZSB3aGVuIG5vIGV4cGxpY2l0IHZlcnNpb24gaXMgc3BlY2lmaWVkXG4gICAqIFJldHVybnMgdGhlIG1vc3QgcmVjZW50IHN0YWJsZSB2ZXJzaW9uIGFzIHRoZSBkZWZhdWx0XG4gICAqL1xuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDIyLTA0LTAxXCI7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQXp1cmUgcmVzb3VyY2UgdHlwZSBmb3IgUm9sZSBEZWZpbml0aW9uc1xuICAgKi9cbiAgcHJvdGVjdGVkIHJlc291cmNlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBST0xFX0RFRklOSVRJT05fVFlQRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBUEkgc2NoZW1hIGZvciB0aGUgcmVzb2x2ZWQgdmVyc2lvblxuICAgKiBVc2VzIHRoZSBmcmFtZXdvcmsncyBzY2hlbWEgcmVzb2x1dGlvbiB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIHNjaGVtYVxuICAgKi9cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlIG5hbWUgcmVzb2x1dGlvbiB0byBnZW5lcmF0ZSBkZXRlcm1pbmlzdGljIEdVSURzIGZvciByb2xlIGRlZmluaXRpb25zXG4gICAqXG4gICAqIFJvbGUgZGVmaW5pdGlvbnMgcmVxdWlyZSBHVUlEIGZvcm1hdCBJRHMuIFRoaXMgaW1wbGVtZW50YXRpb24gZ2VuZXJhdGVzIGEgZGV0ZXJtaW5pc3RpY1xuICAgKiBVVUlEIGJhc2VkIG9uIHRoZSByb2xlIGRlZmluaXRpb24ncyBrZXkgcHJvcGVydGllcyB0byBlbnN1cmU6XG4gICAqIC0gU2FtZSBHVUlEIGlzIGdlbmVyYXRlZCBvbiByZS1kZXBsb3ltZW50cyB3aXRoIHNhbWUgcGFyYW1ldGVyc1xuICAgKiAtIElkZW1wb3RlbnQgZGVwbG95bWVudHMgKG5vIGR1cGxpY2F0ZSByb2xlIGRlZmluaXRpb25zKVxuICAgKiAtIENvbnNpc3RlbnQgYmVoYXZpb3IgYWNyb3NzIGRlcGxveW1lbnQgcnVuc1xuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVOYW1lKHByb3BzOiBBemFwaVJlc291cmNlUHJvcHMpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBSb2xlRGVmaW5pdGlvblByb3BzO1xuXG4gICAgLy8gQ3JlYXRlIGEgZGV0ZXJtaW5pc3RpYyBoYXNoIGZyb20ga2V5IHJvbGUgZGVmaW5pdGlvbiBwcm9wZXJ0aWVzXG4gICAgY29uc3QgaGFzaElucHV0ID0gW1xuICAgICAgdHlwZWRQcm9wcy5yb2xlTmFtZSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHR5cGVkUHJvcHMuYXNzaWduYWJsZVNjb3BlcyksXG4gICAgXS5qb2luKFwifFwiKTtcblxuICAgIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShoYXNoSW5wdXQpLmRpZ2VzdChcImhleFwiKTtcblxuICAgIC8vIENvbnZlcnQgaGFzaCB0byBVVUlEIGZvcm1hdCAoOC00LTQtNC0xMilcbiAgICByZXR1cm4gW1xuICAgICAgaGFzaC5zdWJzdHJpbmcoMCwgOCksXG4gICAgICBoYXNoLnN1YnN0cmluZyg4LCAxMiksXG4gICAgICBoYXNoLnN1YnN0cmluZygxMiwgMTYpLFxuICAgICAgaGFzaC5zdWJzdHJpbmcoMTYsIDIwKSxcbiAgICAgIGhhc2guc3Vic3RyaW5nKDIwLCAzMiksXG4gICAgXS5qb2luKFwiLVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICogVHJhbnNmb3JtcyB0aGUgaW5wdXQgcHJvcGVydGllcyBpbnRvIHRoZSBKU09OIGZvcm1hdCBleHBlY3RlZCBieSBBenVyZSBSRVNUIEFQSVxuICAgKlxuICAgKiBOb3RlOiBSb2xlIGRlZmluaXRpb25zIGRvIG5vdCBoYXZlIGEgbG9jYXRpb24gcHJvcGVydHkgYXMgdGhleSBhcmVcbiAgICogdGVuYW50LXNwZWNpZmljIHJlc291cmNlcyBkZXBsb3llZCBhdCBzdWJzY3JpcHRpb24gb3IgbWFuYWdlbWVudCBncm91cCBzY29wZS5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIFJvbGVEZWZpbml0aW9uUHJvcHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgcm9sZU5hbWU6IHR5cGVkUHJvcHMucm9sZU5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0eXBlZFByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgICB0eXBlOiB0eXBlZFByb3BzLnR5cGUgfHwgXCJDdXN0b21Sb2xlXCIsXG4gICAgICAgIHBlcm1pc3Npb25zOiB0eXBlZFByb3BzLnBlcm1pc3Npb25zLFxuICAgICAgICBhc3NpZ25hYmxlU2NvcGVzOiB0eXBlZFByb3BzLmFzc2lnbmFibGVTY29wZXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQVUJMSUMgTUVUSE9EUyBGT1IgUk9MRSBERUZJTklUSU9OIE9QRVJBVElPTlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIHJlc291cmNlIGlkZW50aWZpZXIgZm9yIHVzZSBpbiBvdGhlciBBenVyZSByZXNvdXJjZXNcbiAgICogQWxpYXMgZm9yIHRoZSBpZCBwcm9wZXJ0eVxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByb2xlIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXQgcm9sZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yb2xlTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJvbGUgdHlwZVxuICAgKi9cbiAgcHVibGljIGdldCByb2xlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnR5cGUgfHwgXCJDdXN0b21Sb2xlXCI7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIEhFTFBFUiBNRVRIT0RTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgaWdub3JlIGNoYW5nZXMgbGlmZWN5Y2xlIHJ1bGVzIGlmIHNwZWNpZmllZCBpbiBwcm9wc1xuICAgKiBBbHdheXMgaW5jbHVkZXMgYm9keS5wcm9wZXJ0aWVzLmFzc2lnbmFibGVTY29wZXMgdG8gaGFuZGxlIEF6dXJlIEFQSSBmb3JtYXQgbm9ybWFsaXphdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBfYXBwbHlJZ25vcmVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIC8vIEFsd2F5cyBpZ25vcmUgYXNzaWduYWJsZVNjb3BlcyBmb3JtYXQgY2hhbmdlcyBkdWUgdG8gQXp1cmUgQVBJIG5vcm1hbGl6YXRpb25cbiAgICAvLyBBenVyZSBtYXkgcmV0dXJuIHN1YnNjcmlwdGlvbi1xdWFsaWZpZWQgZm9ybWF0IGJ1dCBhY2NlcHRzIG5vbi1xdWFsaWZpZWQgZm9ybWF0XG4gICAgY29uc3QgaWdub3JlQ2hhbmdlcyA9IFtcbiAgICAgIFwiYm9keS5wcm9wZXJ0aWVzLmFzc2lnbmFibGVTY29wZXNcIixcbiAgICAgIC4uLih0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMgfHwgW10pLFxuICAgIF07XG5cbiAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmFkZE92ZXJyaWRlKFwibGlmZWN5Y2xlXCIsIHtcbiAgICAgIGlnbm9yZV9jaGFuZ2VzOiBpZ25vcmVDaGFuZ2VzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration test for Azure Role Definition
|
|
3
|
+
*
|
|
4
|
+
* This test demonstrates basic usage of the RoleDefinition construct
|
|
5
|
+
* and validates deployment, idempotency, and cleanup.
|
|
6
|
+
*
|
|
7
|
+
* The test creates custom RBAC roles with various permission configurations
|
|
8
|
+
* at subscription scope.
|
|
9
|
+
*
|
|
10
|
+
* Run with: npm run integration:nostream
|
|
11
|
+
*/
|
|
12
|
+
import "cdktf/lib/testing/adapters/jest";
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Integration test for Azure Role Definition
|
|
4
|
+
*
|
|
5
|
+
* This test demonstrates basic usage of the RoleDefinition construct
|
|
6
|
+
* and validates deployment, idempotency, and cleanup.
|
|
7
|
+
*
|
|
8
|
+
* The test creates custom RBAC roles with various permission configurations
|
|
9
|
+
* at subscription scope.
|
|
10
|
+
*
|
|
11
|
+
* Run with: npm run integration:nostream
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
const cdktf_1 = require("cdktf");
|
|
15
|
+
require("cdktf/lib/testing/adapters/jest");
|
|
16
|
+
const child_process_1 = require("child_process");
|
|
17
|
+
const provider_1 = require("../../core-azure/lib/azapi/providers-azapi/provider");
|
|
18
|
+
const testing_1 = require("../../testing");
|
|
19
|
+
const metadata_1 = require("../../testing/lib/metadata");
|
|
20
|
+
const role_definition_1 = require("../lib/role-definition");
|
|
21
|
+
// Generate unique test run metadata for this test suite
|
|
22
|
+
const testMetadata = new metadata_1.TestRunMetadata("role-definition-integration", {
|
|
23
|
+
maxAgeHours: 4,
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* Example stack demonstrating Role Definition usage
|
|
27
|
+
*/
|
|
28
|
+
class RoleDefinitionExampleStack extends testing_1.BaseTestStack {
|
|
29
|
+
constructor(scope, id) {
|
|
30
|
+
super(scope, id, {
|
|
31
|
+
testRunOptions: {
|
|
32
|
+
maxAgeHours: testMetadata.maxAgeHours,
|
|
33
|
+
autoCleanup: testMetadata.autoCleanup,
|
|
34
|
+
cleanupPolicy: testMetadata.cleanupPolicy,
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
// Configure AZAPI provider
|
|
38
|
+
new provider_1.AzapiProvider(this, "azapi", {});
|
|
39
|
+
// Get the subscription ID dynamically from Azure CLI or environment variable
|
|
40
|
+
let subscriptionId;
|
|
41
|
+
try {
|
|
42
|
+
subscriptionId =
|
|
43
|
+
process.env.ARM_SUBSCRIPTION_ID ||
|
|
44
|
+
(0, child_process_1.execSync)("az account show --query id -o tsv", {
|
|
45
|
+
encoding: "utf-8",
|
|
46
|
+
}).trim();
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
throw new Error("Failed to get Azure subscription ID. Please ensure you are logged in with 'az login' or set ARM_SUBSCRIPTION_ID environment variable.");
|
|
50
|
+
}
|
|
51
|
+
const subscriptionScope = `/subscriptions/${subscriptionId}`;
|
|
52
|
+
// Note: Role definition IDs are auto-generated as GUIDs by Azure.
|
|
53
|
+
// The 'name' parameter is not needed - Azure uses guid() to generate
|
|
54
|
+
// deterministic IDs based on deployment context for idempotency.
|
|
55
|
+
// Use 'roleName' for the human-readable display name and 'description'
|
|
56
|
+
// for additional context.
|
|
57
|
+
// Example 1: Basic read-only role for compute resources
|
|
58
|
+
new role_definition_1.RoleDefinition(this, "vm-reader-role", {
|
|
59
|
+
roleName: "Virtual Machine Reader",
|
|
60
|
+
description: "Can view virtual machines and their properties but cannot perform any actions",
|
|
61
|
+
type: "CustomRole",
|
|
62
|
+
permissions: [
|
|
63
|
+
{
|
|
64
|
+
actions: [
|
|
65
|
+
"Microsoft.Compute/virtualMachines/read",
|
|
66
|
+
"Microsoft.Compute/virtualMachines/instanceView/read",
|
|
67
|
+
"Microsoft.Compute/disks/read",
|
|
68
|
+
"Microsoft.Compute/snapshots/read",
|
|
69
|
+
"Microsoft.Network/networkInterfaces/read",
|
|
70
|
+
"Microsoft.Network/publicIPAddresses/read",
|
|
71
|
+
],
|
|
72
|
+
notActions: [],
|
|
73
|
+
dataActions: [],
|
|
74
|
+
notDataActions: [],
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
assignableScopes: [subscriptionScope],
|
|
78
|
+
tags: {
|
|
79
|
+
...this.systemTags(),
|
|
80
|
+
example: "basic",
|
|
81
|
+
purpose: "read-only-compute",
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
// Example 2: Advanced role with control plane and data plane permissions
|
|
85
|
+
new role_definition_1.RoleDefinition(this, "storage-operator-role", {
|
|
86
|
+
roleName: "Storage Operator",
|
|
87
|
+
description: "Can manage storage accounts and read/write blob data but cannot delete resources",
|
|
88
|
+
type: "CustomRole",
|
|
89
|
+
permissions: [
|
|
90
|
+
{
|
|
91
|
+
// Control plane actions - manage storage accounts
|
|
92
|
+
actions: [
|
|
93
|
+
"Microsoft.Storage/storageAccounts/read",
|
|
94
|
+
"Microsoft.Storage/storageAccounts/write",
|
|
95
|
+
"Microsoft.Storage/storageAccounts/listkeys/action",
|
|
96
|
+
"Microsoft.Storage/storageAccounts/regeneratekey/action",
|
|
97
|
+
"Microsoft.Storage/storageAccounts/blobServices/containers/read",
|
|
98
|
+
"Microsoft.Storage/storageAccounts/blobServices/containers/write",
|
|
99
|
+
],
|
|
100
|
+
// Explicitly deny delete operations
|
|
101
|
+
notActions: [
|
|
102
|
+
"Microsoft.Storage/storageAccounts/delete",
|
|
103
|
+
"Microsoft.Storage/storageAccounts/blobServices/containers/delete",
|
|
104
|
+
],
|
|
105
|
+
// Data plane actions - read and write blobs
|
|
106
|
+
dataActions: [
|
|
107
|
+
"Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read",
|
|
108
|
+
"Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write",
|
|
109
|
+
"Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action",
|
|
110
|
+
],
|
|
111
|
+
// Explicitly deny delete operations on data plane
|
|
112
|
+
notDataActions: [
|
|
113
|
+
"Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete",
|
|
114
|
+
],
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
assignableScopes: [
|
|
118
|
+
subscriptionScope,
|
|
119
|
+
// Can also be assigned at resource group level
|
|
120
|
+
`${subscriptionScope}/resourceGroups/storage-rg`,
|
|
121
|
+
],
|
|
122
|
+
tags: {
|
|
123
|
+
...this.systemTags(),
|
|
124
|
+
example: "advanced",
|
|
125
|
+
purpose: "storage-operations",
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
describe("Role Definition Integration Test", () => {
|
|
131
|
+
it("should deploy, validate idempotency, and cleanup role definition resources", () => {
|
|
132
|
+
const app = cdktf_1.Testing.app();
|
|
133
|
+
const stack = new RoleDefinitionExampleStack(app, "test-role-definition");
|
|
134
|
+
const synthesized = cdktf_1.Testing.fullSynth(stack);
|
|
135
|
+
// This will:
|
|
136
|
+
// 1. Run terraform apply to deploy resources (custom role definitions)
|
|
137
|
+
// 2. Run terraform plan to check idempotency (no changes expected)
|
|
138
|
+
// 3. Run terraform destroy to cleanup resources
|
|
139
|
+
(0, testing_1.TerraformApplyCheckAndDestroy)(synthesized, { verifyCleanup: true });
|
|
140
|
+
}, 600000); // 10 minute timeout for deployment and cleanup
|
|
141
|
+
});
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1kZWZpbml0aW9uLmludGVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXJvbGVkZWZpbml0aW9uL3Rlc3Qvcm9sZS1kZWZpbml0aW9uLmludGVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7OztHQVVHOztBQUVILGlDQUFnQztBQUVoQywyQ0FBeUM7QUFDekMsaURBQXlDO0FBQ3pDLGtGQUFvRjtBQUNwRiwyQ0FBNkU7QUFDN0UseURBQTZEO0FBQzdELDREQUF3RDtBQUV4RCx3REFBd0Q7QUFDeEQsTUFBTSxZQUFZLEdBQUcsSUFBSSwwQkFBZSxDQUFDLDZCQUE2QixFQUFFO0lBQ3RFLFdBQVcsRUFBRSxDQUFDO0NBQ2YsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDSCxNQUFNLDBCQUEyQixTQUFRLHVCQUFhO0lBQ3BELFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsY0FBYyxFQUFFO2dCQUNkLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVztnQkFDckMsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXO2dCQUNyQyxhQUFhLEVBQUUsWUFBWSxDQUFDLGFBQWE7YUFDMUM7U0FDRixDQUFDLENBQUM7UUFFSCwyQkFBMkI7UUFDM0IsSUFBSSx3QkFBYSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFckMsNkVBQTZFO1FBQzdFLElBQUksY0FBc0IsQ0FBQztRQUMzQixJQUFJLENBQUM7WUFDSCxjQUFjO2dCQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CO29CQUMvQixJQUFBLHdCQUFRLEVBQUMsbUNBQW1DLEVBQUU7d0JBQzVDLFFBQVEsRUFBRSxPQUFPO3FCQUNsQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUlBQXVJLENBQ3hJLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxpQkFBaUIsR0FBRyxrQkFBa0IsY0FBYyxFQUFFLENBQUM7UUFFN0Qsa0VBQWtFO1FBQ2xFLHFFQUFxRTtRQUNyRSxpRUFBaUU7UUFDakUsdUVBQXVFO1FBQ3ZFLDBCQUEwQjtRQUUxQix3REFBd0Q7UUFDeEQsSUFBSSxnQ0FBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUN6QyxRQUFRLEVBQUUsd0JBQXdCO1lBQ2xDLFdBQVcsRUFDVCwrRUFBK0U7WUFDakYsSUFBSSxFQUFFLFlBQVk7WUFDbEIsV0FBVyxFQUFFO2dCQUNYO29CQUNFLE9BQU8sRUFBRTt3QkFDUCx3Q0FBd0M7d0JBQ3hDLHFEQUFxRDt3QkFDckQsOEJBQThCO3dCQUM5QixrQ0FBa0M7d0JBQ2xDLDBDQUEwQzt3QkFDMUMsMENBQTBDO3FCQUMzQztvQkFDRCxVQUFVLEVBQUUsRUFBRTtvQkFDZCxXQUFXLEVBQUUsRUFBRTtvQkFDZixjQUFjLEVBQUUsRUFBRTtpQkFDbkI7YUFDRjtZQUNELGdCQUFnQixFQUFFLENBQUMsaUJBQWlCLENBQUM7WUFDckMsSUFBSSxFQUFFO2dCQUNKLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDcEIsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLE9BQU8sRUFBRSxtQkFBbUI7YUFDN0I7U0FDRixDQUFDLENBQUM7UUFFSCx5RUFBeUU7UUFDekUsSUFBSSxnQ0FBYyxDQUFDLElBQUksRUFBRSx1QkFBdUIsRUFBRTtZQUNoRCxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLFdBQVcsRUFDVCxrRkFBa0Y7WUFDcEYsSUFBSSxFQUFFLFlBQVk7WUFDbEIsV0FBVyxFQUFFO2dCQUNYO29CQUNFLGtEQUFrRDtvQkFDbEQsT0FBTyxFQUFFO3dCQUNQLHdDQUF3Qzt3QkFDeEMseUNBQXlDO3dCQUN6QyxtREFBbUQ7d0JBQ25ELHdEQUF3RDt3QkFDeEQsZ0VBQWdFO3dCQUNoRSxpRUFBaUU7cUJBQ2xFO29CQUNELG9DQUFvQztvQkFDcEMsVUFBVSxFQUFFO3dCQUNWLDBDQUEwQzt3QkFDMUMsa0VBQWtFO3FCQUNuRTtvQkFDRCw0Q0FBNEM7b0JBQzVDLFdBQVcsRUFBRTt3QkFDWCxzRUFBc0U7d0JBQ3RFLHVFQUF1RTt3QkFDdkUsNEVBQTRFO3FCQUM3RTtvQkFDRCxrREFBa0Q7b0JBQ2xELGNBQWMsRUFBRTt3QkFDZCx3RUFBd0U7cUJBQ3pFO2lCQUNGO2FBQ0Y7WUFDRCxnQkFBZ0IsRUFBRTtnQkFDaEIsaUJBQWlCO2dCQUNqQiwrQ0FBK0M7Z0JBQy9DLEdBQUcsaUJBQWlCLDRCQUE0QjthQUNqRDtZQUNELElBQUksRUFBRTtnQkFDSixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BCLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixPQUFPLEVBQUUsb0JBQW9CO2FBQzlCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsUUFBUSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsRUFBRTtJQUNoRCxFQUFFLENBQUMsNEVBQTRFLEVBQUUsR0FBRyxFQUFFO1FBQ3BGLE1BQU0sR0FBRyxHQUFHLGVBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sV0FBVyxHQUFHLGVBQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsYUFBYTtRQUNiLHVFQUF1RTtRQUN2RSxtRUFBbUU7UUFDbkUsZ0RBQWdEO1FBQ2hELElBQUEsdUNBQTZCLEVBQUMsV0FBVyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsK0NBQStDO0FBQzdELENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnRlZ3JhdGlvbiB0ZXN0IGZvciBBenVyZSBSb2xlIERlZmluaXRpb25cbiAqXG4gKiBUaGlzIHRlc3QgZGVtb25zdHJhdGVzIGJhc2ljIHVzYWdlIG9mIHRoZSBSb2xlRGVmaW5pdGlvbiBjb25zdHJ1Y3RcbiAqIGFuZCB2YWxpZGF0ZXMgZGVwbG95bWVudCwgaWRlbXBvdGVuY3ksIGFuZCBjbGVhbnVwLlxuICpcbiAqIFRoZSB0ZXN0IGNyZWF0ZXMgY3VzdG9tIFJCQUMgcm9sZXMgd2l0aCB2YXJpb3VzIHBlcm1pc3Npb24gY29uZmlndXJhdGlvbnNcbiAqIGF0IHN1YnNjcmlwdGlvbiBzY29wZS5cbiAqXG4gKiBSdW4gd2l0aDogbnBtIHJ1biBpbnRlZ3JhdGlvbjpub3N0cmVhbVxuICovXG5cbmltcG9ydCB7IFRlc3RpbmcgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgXCJjZGt0Zi9saWIvdGVzdGluZy9hZGFwdGVycy9qZXN0XCI7XG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBBemFwaVByb3ZpZGVyIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL3Byb3ZpZGVycy1hemFwaS9wcm92aWRlclwiO1xuaW1wb3J0IHsgQmFzZVRlc3RTdGFjaywgVGVycmFmb3JtQXBwbHlDaGVja0FuZERlc3Ryb3kgfSBmcm9tIFwiLi4vLi4vdGVzdGluZ1wiO1xuaW1wb3J0IHsgVGVzdFJ1bk1ldGFkYXRhIH0gZnJvbSBcIi4uLy4uL3Rlc3RpbmcvbGliL21ldGFkYXRhXCI7XG5pbXBvcnQgeyBSb2xlRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9saWIvcm9sZS1kZWZpbml0aW9uXCI7XG5cbi8vIEdlbmVyYXRlIHVuaXF1ZSB0ZXN0IHJ1biBtZXRhZGF0YSBmb3IgdGhpcyB0ZXN0IHN1aXRlXG5jb25zdCB0ZXN0TWV0YWRhdGEgPSBuZXcgVGVzdFJ1bk1ldGFkYXRhKFwicm9sZS1kZWZpbml0aW9uLWludGVncmF0aW9uXCIsIHtcbiAgbWF4QWdlSG91cnM6IDQsXG59KTtcblxuLyoqXG4gKiBFeGFtcGxlIHN0YWNrIGRlbW9uc3RyYXRpbmcgUm9sZSBEZWZpbml0aW9uIHVzYWdlXG4gKi9cbmNsYXNzIFJvbGVEZWZpbml0aW9uRXhhbXBsZVN0YWNrIGV4dGVuZHMgQmFzZVRlc3RTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHRlc3RSdW5PcHRpb25zOiB7XG4gICAgICAgIG1heEFnZUhvdXJzOiB0ZXN0TWV0YWRhdGEubWF4QWdlSG91cnMsXG4gICAgICAgIGF1dG9DbGVhbnVwOiB0ZXN0TWV0YWRhdGEuYXV0b0NsZWFudXAsXG4gICAgICAgIGNsZWFudXBQb2xpY3k6IHRlc3RNZXRhZGF0YS5jbGVhbnVwUG9saWN5LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENvbmZpZ3VyZSBBWkFQSSBwcm92aWRlclxuICAgIG5ldyBBemFwaVByb3ZpZGVyKHRoaXMsIFwiYXphcGlcIiwge30pO1xuXG4gICAgLy8gR2V0IHRoZSBzdWJzY3JpcHRpb24gSUQgZHluYW1pY2FsbHkgZnJvbSBBenVyZSBDTEkgb3IgZW52aXJvbm1lbnQgdmFyaWFibGVcbiAgICBsZXQgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZztcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaXB0aW9uSWQgPVxuICAgICAgICBwcm9jZXNzLmVudi5BUk1fU1VCU0NSSVBUSU9OX0lEIHx8XG4gICAgICAgIGV4ZWNTeW5jKFwiYXogYWNjb3VudCBzaG93IC0tcXVlcnkgaWQgLW8gdHN2XCIsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICB9KS50cmltKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZ2V0IEF6dXJlIHN1YnNjcmlwdGlvbiBJRC4gUGxlYXNlIGVuc3VyZSB5b3UgYXJlIGxvZ2dlZCBpbiB3aXRoICdheiBsb2dpbicgb3Igc2V0IEFSTV9TVUJTQ1JJUFRJT05fSUQgZW52aXJvbm1lbnQgdmFyaWFibGUuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzdWJzY3JpcHRpb25TY29wZSA9IGAvc3Vic2NyaXB0aW9ucy8ke3N1YnNjcmlwdGlvbklkfWA7XG5cbiAgICAvLyBOb3RlOiBSb2xlIGRlZmluaXRpb24gSURzIGFyZSBhdXRvLWdlbmVyYXRlZCBhcyBHVUlEcyBieSBBenVyZS5cbiAgICAvLyBUaGUgJ25hbWUnIHBhcmFtZXRlciBpcyBub3QgbmVlZGVkIC0gQXp1cmUgdXNlcyBndWlkKCkgdG8gZ2VuZXJhdGVcbiAgICAvLyBkZXRlcm1pbmlzdGljIElEcyBiYXNlZCBvbiBkZXBsb3ltZW50IGNvbnRleHQgZm9yIGlkZW1wb3RlbmN5LlxuICAgIC8vIFVzZSAncm9sZU5hbWUnIGZvciB0aGUgaHVtYW4tcmVhZGFibGUgZGlzcGxheSBuYW1lIGFuZCAnZGVzY3JpcHRpb24nXG4gICAgLy8gZm9yIGFkZGl0aW9uYWwgY29udGV4dC5cblxuICAgIC8vIEV4YW1wbGUgMTogQmFzaWMgcmVhZC1vbmx5IHJvbGUgZm9yIGNvbXB1dGUgcmVzb3VyY2VzXG4gICAgbmV3IFJvbGVEZWZpbml0aW9uKHRoaXMsIFwidm0tcmVhZGVyLXJvbGVcIiwge1xuICAgICAgcm9sZU5hbWU6IFwiVmlydHVhbCBNYWNoaW5lIFJlYWRlclwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQ2FuIHZpZXcgdmlydHVhbCBtYWNoaW5lcyBhbmQgdGhlaXIgcHJvcGVydGllcyBidXQgY2Fubm90IHBlcmZvcm0gYW55IGFjdGlvbnNcIixcbiAgICAgIHR5cGU6IFwiQ3VzdG9tUm9sZVwiLFxuICAgICAgcGVybWlzc2lvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LkNvbXB1dGUvdmlydHVhbE1hY2hpbmVzL3JlYWRcIixcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LkNvbXB1dGUvdmlydHVhbE1hY2hpbmVzL2luc3RhbmNlVmlldy9yZWFkXCIsXG4gICAgICAgICAgICBcIk1pY3Jvc29mdC5Db21wdXRlL2Rpc2tzL3JlYWRcIixcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LkNvbXB1dGUvc25hcHNob3RzL3JlYWRcIixcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0Lk5ldHdvcmsvbmV0d29ya0ludGVyZmFjZXMvcmVhZFwiLFxuICAgICAgICAgICAgXCJNaWNyb3NvZnQuTmV0d29yay9wdWJsaWNJUEFkZHJlc3Nlcy9yZWFkXCIsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBub3RBY3Rpb25zOiBbXSxcbiAgICAgICAgICBkYXRhQWN0aW9uczogW10sXG4gICAgICAgICAgbm90RGF0YUFjdGlvbnM6IFtdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFzc2lnbmFibGVTY29wZXM6IFtzdWJzY3JpcHRpb25TY29wZV0sXG4gICAgICB0YWdzOiB7XG4gICAgICAgIC4uLnRoaXMuc3lzdGVtVGFncygpLFxuICAgICAgICBleGFtcGxlOiBcImJhc2ljXCIsXG4gICAgICAgIHB1cnBvc2U6IFwicmVhZC1vbmx5LWNvbXB1dGVcIixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBFeGFtcGxlIDI6IEFkdmFuY2VkIHJvbGUgd2l0aCBjb250cm9sIHBsYW5lIGFuZCBkYXRhIHBsYW5lIHBlcm1pc3Npb25zXG4gICAgbmV3IFJvbGVEZWZpbml0aW9uKHRoaXMsIFwic3RvcmFnZS1vcGVyYXRvci1yb2xlXCIsIHtcbiAgICAgIHJvbGVOYW1lOiBcIlN0b3JhZ2UgT3BlcmF0b3JcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkNhbiBtYW5hZ2Ugc3RvcmFnZSBhY2NvdW50cyBhbmQgcmVhZC93cml0ZSBibG9iIGRhdGEgYnV0IGNhbm5vdCBkZWxldGUgcmVzb3VyY2VzXCIsXG4gICAgICB0eXBlOiBcIkN1c3RvbVJvbGVcIixcbiAgICAgIHBlcm1pc3Npb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBDb250cm9sIHBsYW5lIGFjdGlvbnMgLSBtYW5hZ2Ugc3RvcmFnZSBhY2NvdW50c1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3JlYWRcIixcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3dyaXRlXCIsXG4gICAgICAgICAgICBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy9saXN0a2V5cy9hY3Rpb25cIixcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3JlZ2VuZXJhdGVrZXkvYWN0aW9uXCIsXG4gICAgICAgICAgICBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy9ibG9iU2VydmljZXMvY29udGFpbmVycy9yZWFkXCIsXG4gICAgICAgICAgICBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy9ibG9iU2VydmljZXMvY29udGFpbmVycy93cml0ZVwiLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgLy8gRXhwbGljaXRseSBkZW55IGRlbGV0ZSBvcGVyYXRpb25zXG4gICAgICAgICAgbm90QWN0aW9uczogW1xuICAgICAgICAgICAgXCJNaWNyb3NvZnQuU3RvcmFnZS9zdG9yYWdlQWNjb3VudHMvZGVsZXRlXCIsXG4gICAgICAgICAgICBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy9ibG9iU2VydmljZXMvY29udGFpbmVycy9kZWxldGVcIixcbiAgICAgICAgICBdLFxuICAgICAgICAgIC8vIERhdGEgcGxhbmUgYWN0aW9ucyAtIHJlYWQgYW5kIHdyaXRlIGJsb2JzXG4gICAgICAgICAgZGF0YUFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL2Jsb2JTZXJ2aWNlcy9jb250YWluZXJzL2Jsb2JzL3JlYWRcIixcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL2Jsb2JTZXJ2aWNlcy9jb250YWluZXJzL2Jsb2JzL3dyaXRlXCIsXG4gICAgICAgICAgICBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy9ibG9iU2VydmljZXMvY29udGFpbmVycy9ibG9icy9hZGQvYWN0aW9uXCIsXG4gICAgICAgICAgXSxcbiAgICAgICAgICAvLyBFeHBsaWNpdGx5IGRlbnkgZGVsZXRlIG9wZXJhdGlvbnMgb24gZGF0YSBwbGFuZVxuICAgICAgICAgIG5vdERhdGFBY3Rpb25zOiBbXG4gICAgICAgICAgICBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy9ibG9iU2VydmljZXMvY29udGFpbmVycy9ibG9icy9kZWxldGVcIixcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFzc2lnbmFibGVTY29wZXM6IFtcbiAgICAgICAgc3Vic2NyaXB0aW9uU2NvcGUsXG4gICAgICAgIC8vIENhbiBhbHNvIGJlIGFzc2lnbmVkIGF0IHJlc291cmNlIGdyb3VwIGxldmVsXG4gICAgICAgIGAke3N1YnNjcmlwdGlvblNjb3BlfS9yZXNvdXJjZUdyb3Vwcy9zdG9yYWdlLXJnYCxcbiAgICAgIF0sXG4gICAgICB0YWdzOiB7XG4gICAgICAgIC4uLnRoaXMuc3lzdGVtVGFncygpLFxuICAgICAgICBleGFtcGxlOiBcImFkdmFuY2VkXCIsXG4gICAgICAgIHB1cnBvc2U6IFwic3RvcmFnZS1vcGVyYXRpb25zXCIsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmRlc2NyaWJlKFwiUm9sZSBEZWZpbml0aW9uIEludGVncmF0aW9uIFRlc3RcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCBkZXBsb3ksIHZhbGlkYXRlIGlkZW1wb3RlbmN5LCBhbmQgY2xlYW51cCByb2xlIGRlZmluaXRpb24gcmVzb3VyY2VzXCIsICgpID0+IHtcbiAgICBjb25zdCBhcHAgPSBUZXN0aW5nLmFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFJvbGVEZWZpbml0aW9uRXhhbXBsZVN0YWNrKGFwcCwgXCJ0ZXN0LXJvbGUtZGVmaW5pdGlvblwiKTtcbiAgICBjb25zdCBzeW50aGVzaXplZCA9IFRlc3RpbmcuZnVsbFN5bnRoKHN0YWNrKTtcblxuICAgIC8vIFRoaXMgd2lsbDpcbiAgICAvLyAxLiBSdW4gdGVycmFmb3JtIGFwcGx5IHRvIGRlcGxveSByZXNvdXJjZXMgKGN1c3RvbSByb2xlIGRlZmluaXRpb25zKVxuICAgIC8vIDIuIFJ1biB0ZXJyYWZvcm0gcGxhbiB0byBjaGVjayBpZGVtcG90ZW5jeSAobm8gY2hhbmdlcyBleHBlY3RlZClcbiAgICAvLyAzLiBSdW4gdGVycmFmb3JtIGRlc3Ryb3kgdG8gY2xlYW51cCByZXNvdXJjZXNcbiAgICBUZXJyYWZvcm1BcHBseUNoZWNrQW5kRGVzdHJveShzeW50aGVzaXplZCwgeyB2ZXJpZnlDbGVhbnVwOiB0cnVlIH0pO1xuICB9LCA2MDAwMDApOyAvLyAxMCBtaW51dGUgdGltZW91dCBmb3IgZGVwbG95bWVudCBhbmQgY2xlYW51cFxufSk7XG4iXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive tests for the unified RoleDefinition implementation
|
|
3
|
+
*
|
|
4
|
+
* This test suite validates the unified RoleDefinition class that uses
|
|
5
|
+
* the VersionedAzapiResource framework. Tests cover automatic version resolution,
|
|
6
|
+
* explicit version pinning, schema validation, property transformation, and
|
|
7
|
+
* role definition-specific functionality.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|