@microsoft/terraform-cdk-constructs 1.0.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 +89270 -15866
- package/API.md +103201 -10557
- package/README.md +72 -36
- package/docs/monitoring-guide.md +206 -0
- package/docs/testing.md +84 -1
- package/lib/azure-actiongroup/index.d.ts +1 -0
- package/lib/azure-actiongroup/index.js +18 -0
- package/lib/azure-actiongroup/lib/action-group-schemas.d.ts +24 -0
- package/lib/azure-actiongroup/lib/action-group-schemas.js +201 -0
- package/lib/azure-actiongroup/lib/action-group.d.ts +302 -0
- package/lib/azure-actiongroup/lib/action-group.js +175 -0
- package/lib/azure-actiongroup/lib/index.d.ts +2 -0
- package/lib/azure-actiongroup/lib/index.js +19 -0
- package/lib/azure-actiongroup/test/action-group.integ.d.ts +9 -0
- package/lib/azure-actiongroup/test/action-group.integ.js +79 -0
- package/lib/azure-actiongroup/test/action-group.spec.d.ts +8 -0
- package/lib/azure-actiongroup/test/action-group.spec.js +602 -0
- package/lib/azure-activitylogalert/index.d.ts +1 -0
- package/lib/azure-activitylogalert/index.js +18 -0
- package/lib/azure-activitylogalert/lib/activity-log-alert-schemas.d.ts +24 -0
- package/lib/azure-activitylogalert/lib/activity-log-alert-schemas.js +182 -0
- package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +226 -0
- package/lib/azure-activitylogalert/lib/activity-log-alert.js +186 -0
- package/lib/azure-activitylogalert/lib/index.d.ts +2 -0
- package/lib/azure-activitylogalert/lib/index.js +19 -0
- package/lib/azure-activitylogalert/test/activity-log-alert.integ.d.ts +9 -0
- package/lib/azure-activitylogalert/test/activity-log-alert.integ.js +98 -0
- package/lib/azure-activitylogalert/test/activity-log-alert.spec.d.ts +9 -0
- package/lib/azure-activitylogalert/test/activity-log-alert.spec.js +1101 -0
- package/lib/azure-aks/index.d.ts +1 -0
- package/lib/azure-aks/index.js +18 -0
- package/lib/azure-aks/lib/aks-cluster-schemas.d.ts +505 -0
- package/lib/azure-aks/lib/aks-cluster-schemas.js +572 -0
- package/lib/azure-aks/lib/aks-cluster.d.ts +386 -0
- package/lib/azure-aks/lib/aks-cluster.js +466 -0
- package/lib/azure-aks/lib/index.d.ts +2 -0
- package/lib/azure-aks/lib/index.js +19 -0
- package/lib/azure-aks/test/aks-cluster.integ.d.ts +9 -0
- package/lib/azure-aks/test/aks-cluster.integ.js +260 -0
- package/lib/azure-aks/test/aks-cluster.spec.d.ts +8 -0
- package/lib/azure-aks/test/aks-cluster.spec.js +1396 -0
- package/lib/azure-diagnosticsettings/index.d.ts +1 -0
- package/lib/azure-diagnosticsettings/index.js +18 -0
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings-schemas.d.ts +50 -0
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings-schemas.js +207 -0
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +183 -0
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +174 -0
- package/lib/azure-diagnosticsettings/lib/index.d.ts +2 -0
- package/lib/azure-diagnosticsettings/lib/index.js +19 -0
- package/lib/azure-diagnosticsettings/test/diagnostic-settings.spec.d.ts +8 -0
- package/lib/azure-diagnosticsettings/test/diagnostic-settings.spec.js +432 -0
- 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 +1 -0
- package/lib/azure-metricalert/index.js +18 -0
- package/lib/azure-metricalert/lib/index.d.ts +2 -0
- package/lib/azure-metricalert/lib/index.js +19 -0
- package/lib/azure-metricalert/lib/metric-alert-schemas.d.ts +24 -0
- package/lib/azure-metricalert/lib/metric-alert-schemas.js +242 -0
- package/lib/azure-metricalert/lib/metric-alert.d.ts +334 -0
- package/lib/azure-metricalert/lib/metric-alert.js +226 -0
- package/lib/azure-metricalert/test/metric-alert.integ.d.ts +9 -0
- package/lib/azure-metricalert/test/metric-alert.integ.js +123 -0
- package/lib/azure-metricalert/test/metric-alert.spec.d.ts +9 -0
- package/lib/azure-metricalert/test/metric-alert.spec.js +1266 -0
- package/lib/azure-networkinterface/index.d.ts +1 -0
- package/lib/azure-networkinterface/index.js +18 -0
- package/lib/azure-networkinterface/lib/index.d.ts +2 -0
- package/lib/azure-networkinterface/lib/index.js +19 -0
- package/lib/azure-networkinterface/lib/network-interface-schemas.d.ts +32 -0
- package/lib/azure-networkinterface/lib/network-interface-schemas.js +222 -0
- package/lib/azure-networkinterface/lib/network-interface.d.ts +260 -0
- package/lib/azure-networkinterface/lib/network-interface.js +213 -0
- package/lib/azure-networkinterface/test/network-interface.integ.d.ts +9 -0
- package/lib/azure-networkinterface/test/network-interface.integ.js +116 -0
- package/lib/azure-networkinterface/test/network-interface.spec.d.ts +8 -0
- package/lib/azure-networkinterface/test/network-interface.spec.js +655 -0
- package/lib/azure-networksecuritygroup/index.d.ts +1 -0
- package/lib/azure-networksecuritygroup/index.js +18 -0
- package/lib/azure-networksecuritygroup/lib/index.d.ts +2 -0
- package/lib/azure-networksecuritygroup/lib/index.js +19 -0
- package/lib/azure-networksecuritygroup/lib/network-security-group-schemas.d.ts +32 -0
- package/lib/azure-networksecuritygroup/lib/network-security-group-schemas.js +198 -0
- package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +259 -0
- package/lib/azure-networksecuritygroup/lib/network-security-group.js +226 -0
- package/lib/azure-networksecuritygroup/test/network-security-group.integ.d.ts +9 -0
- package/lib/azure-networksecuritygroup/test/network-security-group.integ.js +151 -0
- package/lib/azure-networksecuritygroup/test/network-security-group.spec.d.ts +8 -0
- package/lib/azure-networksecuritygroup/test/network-security-group.spec.js +652 -0
- 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 +1 -0
- package/lib/azure-publicipaddress/index.js +18 -0
- package/lib/azure-publicipaddress/lib/index.d.ts +2 -0
- package/lib/azure-publicipaddress/lib/index.js +19 -0
- package/lib/azure-publicipaddress/lib/public-ip-address-schemas.d.ts +32 -0
- package/lib/azure-publicipaddress/lib/public-ip-address-schemas.js +227 -0
- package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +247 -0
- package/lib/azure-publicipaddress/lib/public-ip-address.js +245 -0
- package/lib/azure-publicipaddress/test/public-ip-address.integ.d.ts +9 -0
- package/lib/azure-publicipaddress/test/public-ip-address.integ.js +75 -0
- package/lib/azure-publicipaddress/test/public-ip-address.spec.d.ts +15 -0
- package/lib/azure-publicipaddress/test/public-ip-address.spec.js +498 -0
- 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.integ.js +23 -11
- 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-schemas.d.ts +98 -0
- package/lib/azure-storageaccount/lib/storage-account-schemas.js +1 -1
- package/lib/azure-storageaccount/lib/storage-account.d.ts +40 -8
- package/lib/azure-storageaccount/lib/storage-account.js +145 -23
- package/lib/azure-storageaccount/test/storage-account.integ.js +91 -12
- package/lib/azure-subnet/index.d.ts +1 -0
- package/lib/azure-subnet/index.js +18 -0
- package/lib/azure-subnet/lib/index.d.ts +2 -0
- package/lib/azure-subnet/lib/index.js +19 -0
- package/lib/azure-subnet/lib/subnet-schemas.d.ts +32 -0
- package/lib/azure-subnet/lib/subnet-schemas.js +237 -0
- package/lib/azure-subnet/lib/subnet.d.ts +274 -0
- package/lib/azure-subnet/lib/subnet.js +235 -0
- package/lib/azure-subnet/test/subnet.integ.d.ts +11 -0
- package/lib/azure-subnet/test/subnet.integ.js +92 -0
- package/lib/azure-subnet/test/subnet.spec.d.ts +8 -0
- package/lib/azure-subnet/test/subnet.spec.js +395 -0
- package/lib/azure-virtualmachine/index.d.ts +1 -0
- package/lib/azure-virtualmachine/index.js +18 -0
- package/lib/azure-virtualmachine/lib/index.d.ts +2 -0
- package/lib/azure-virtualmachine/lib/index.js +19 -0
- package/lib/azure-virtualmachine/lib/virtual-machine-schemas.d.ts +327 -0
- package/lib/azure-virtualmachine/lib/virtual-machine-schemas.js +544 -0
- package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +368 -0
- package/lib/azure-virtualmachine/lib/virtual-machine.js +441 -0
- package/lib/azure-virtualmachine/test/virtual-machine.integ.d.ts +9 -0
- package/lib/azure-virtualmachine/test/virtual-machine.integ.js +220 -0
- package/lib/azure-virtualmachine/test/virtual-machine.spec.d.ts +9 -0
- package/lib/azure-virtualmachine/test/virtual-machine.spec.js +1032 -0
- package/lib/azure-virtualnetwork/index.d.ts +1 -0
- package/lib/azure-virtualnetwork/index.js +18 -0
- package/lib/azure-virtualnetwork/lib/index.d.ts +2 -0
- package/lib/azure-virtualnetwork/lib/index.js +19 -0
- package/lib/azure-virtualnetwork/lib/virtual-network-schemas.d.ts +32 -0
- package/lib/azure-virtualnetwork/lib/virtual-network-schemas.js +236 -0
- package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +204 -0
- package/lib/azure-virtualnetwork/lib/virtual-network.js +224 -0
- package/lib/azure-virtualnetwork/test/virtual-network.integ.d.ts +9 -0
- package/lib/azure-virtualnetwork/test/virtual-network.integ.js +91 -0
- package/lib/azure-virtualnetwork/test/virtual-network.spec.d.ts +8 -0
- package/lib/azure-virtualnetwork/test/virtual-network.spec.js +398 -0
- 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 +1 -0
- package/lib/azure-vmss/index.js +18 -0
- package/lib/azure-vmss/lib/index.d.ts +2 -0
- package/lib/azure-vmss/lib/index.js +19 -0
- package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +250 -0
- package/lib/azure-vmss/lib/virtual-machine-scale-set.js +479 -0
- package/lib/azure-vmss/lib/vmss-schemas.d.ts +472 -0
- package/lib/azure-vmss/lib/vmss-schemas.js +444 -0
- package/lib/azure-vmss/test/virtual-machine-scale-set.integ.d.ts +15 -0
- package/lib/azure-vmss/test/virtual-machine-scale-set.integ.js +261 -0
- package/lib/azure-vmss/test/virtual-machine-scale-set.spec.d.ts +8 -0
- package/lib/azure-vmss/test/virtual-machine-scale-set.spec.js +997 -0
- 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 +268 -48
- package/lib/core-azure/lib/azapi/azapi-resource.js +411 -136
- 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.d.ts +33 -21
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +69 -27
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.d.ts +134 -120
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +209 -59
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.d.ts +141 -128
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.js +183 -36
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.d.ts +55 -43
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.js +94 -26
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.d.ts +129 -116
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.js +155 -32
- package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.d.ts +187 -174
- package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.js +267 -48
- package/lib/core-azure/lib/azapi/providers-azapi/index.d.ts +10 -10
- package/lib/core-azure/lib/azapi/providers-azapi/index.js +1 -1
- package/lib/core-azure/lib/azapi/providers-azapi/lazy-index.d.ts +0 -0
- package/lib/core-azure/lib/azapi/providers-azapi/lazy-index.js +13 -0
- package/lib/core-azure/lib/azapi/providers-azapi/provider/index.d.ts +174 -162
- package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +278 -16
- package/lib/core-azure/lib/azapi/providers-azapi/resource/index.d.ts +239 -225
- package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +360 -76
- package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.d.ts +163 -150
- package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +221 -46
- package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.d.ts +162 -149
- package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +249 -50
- 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 +13 -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 +56 -0
- package/lib/index.js +59 -2
- package/lib/testing/index.d.ts +92 -2
- package/lib/testing/index.js +258 -18
- package/lib/testing/lib/cleanup.d.ts +230 -0
- package/lib/testing/lib/cleanup.js +338 -0
- package/lib/testing/lib/metadata.d.ts +151 -0
- package/lib/testing/lib/metadata.js +183 -0
- package/lib/testing/lib/naming.d.ts +96 -0
- package/lib/testing/lib/naming.js +336 -0
- package/node_modules/uuid/LICENSE.md +9 -0
- package/node_modules/uuid/README.md +510 -0
- package/node_modules/uuid/dist/cjs/index.d.ts +15 -0
- package/node_modules/uuid/dist/cjs/index.js +31 -0
- package/node_modules/uuid/dist/cjs/max.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/max.js +3 -0
- package/node_modules/uuid/dist/cjs/md5.d.ts +4 -0
- package/node_modules/uuid/dist/cjs/md5.js +13 -0
- package/node_modules/uuid/dist/cjs/native.d.ts +6 -0
- package/node_modules/uuid/dist/cjs/native.js +4 -0
- package/node_modules/uuid/dist/cjs/nil.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/nil.js +3 -0
- package/node_modules/uuid/dist/cjs/package.json +1 -0
- package/node_modules/uuid/dist/cjs/parse.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/parse.js +11 -0
- package/node_modules/uuid/dist/cjs/regex.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/regex.js +3 -0
- package/node_modules/uuid/dist/cjs/rng.d.ts +1 -0
- package/node_modules/uuid/dist/cjs/rng.js +13 -0
- package/node_modules/uuid/dist/cjs/sha1.d.ts +4 -0
- package/node_modules/uuid/dist/cjs/sha1.js +13 -0
- package/node_modules/uuid/dist/cjs/stringify.d.ts +3 -0
- package/node_modules/uuid/dist/cjs/stringify.js +39 -0
- package/node_modules/uuid/dist/cjs/types.d.ts +21 -0
- package/node_modules/uuid/dist/cjs/types.js +2 -0
- package/node_modules/uuid/dist/cjs/uuid-bin.d.ts +1 -0
- package/node_modules/uuid/dist/cjs/uuid-bin.js +72 -0
- package/node_modules/uuid/dist/cjs/v1.d.ts +11 -0
- package/node_modules/uuid/dist/cjs/v1.js +87 -0
- package/node_modules/uuid/dist/cjs/v1ToV6.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/v1ToV6.js +13 -0
- package/node_modules/uuid/dist/cjs/v3.d.ts +9 -0
- package/node_modules/uuid/dist/cjs/v3.js +14 -0
- package/node_modules/uuid/dist/cjs/v35.d.ts +7 -0
- package/node_modules/uuid/dist/cjs/v35.js +41 -0
- package/node_modules/uuid/dist/cjs/v4.d.ts +4 -0
- package/node_modules/uuid/dist/cjs/v4.js +29 -0
- package/node_modules/uuid/dist/cjs/v5.d.ts +9 -0
- package/node_modules/uuid/dist/cjs/v5.js +14 -0
- package/node_modules/uuid/dist/cjs/v6.d.ts +4 -0
- package/node_modules/uuid/dist/cjs/v6.js +19 -0
- package/node_modules/uuid/dist/cjs/v6ToV1.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/v6ToV1.js +13 -0
- package/node_modules/uuid/dist/cjs/v7.d.ts +9 -0
- package/node_modules/uuid/dist/cjs/v7.js +69 -0
- package/node_modules/uuid/dist/cjs/validate.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/validate.js +7 -0
- package/node_modules/uuid/dist/cjs/version.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/version.js +10 -0
- package/node_modules/uuid/dist/cjs-browser/index.d.ts +15 -0
- package/node_modules/uuid/dist/cjs-browser/index.js +31 -0
- package/node_modules/uuid/dist/cjs-browser/max.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/max.js +3 -0
- package/node_modules/uuid/dist/cjs-browser/md5.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/md5.js +137 -0
- package/node_modules/uuid/dist/cjs-browser/native.d.ts +4 -0
- package/node_modules/uuid/dist/cjs-browser/native.js +4 -0
- package/node_modules/uuid/dist/cjs-browser/nil.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/nil.js +3 -0
- package/node_modules/uuid/dist/cjs-browser/package.json +1 -0
- package/node_modules/uuid/dist/cjs-browser/parse.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/parse.js +11 -0
- package/node_modules/uuid/dist/cjs-browser/regex.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/regex.js +3 -0
- package/node_modules/uuid/dist/cjs-browser/rng.d.ts +1 -0
- package/node_modules/uuid/dist/cjs-browser/rng.js +14 -0
- package/node_modules/uuid/dist/cjs-browser/sha1.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/sha1.js +72 -0
- package/node_modules/uuid/dist/cjs-browser/stringify.d.ts +3 -0
- package/node_modules/uuid/dist/cjs-browser/stringify.js +39 -0
- package/node_modules/uuid/dist/cjs-browser/types.d.ts +21 -0
- package/node_modules/uuid/dist/cjs-browser/types.js +2 -0
- package/node_modules/uuid/dist/cjs-browser/uuid-bin.d.ts +1 -0
- package/node_modules/uuid/dist/cjs-browser/uuid-bin.js +72 -0
- package/node_modules/uuid/dist/cjs-browser/v1.d.ts +11 -0
- package/node_modules/uuid/dist/cjs-browser/v1.js +87 -0
- package/node_modules/uuid/dist/cjs-browser/v1ToV6.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/v1ToV6.js +13 -0
- package/node_modules/uuid/dist/cjs-browser/v3.d.ts +9 -0
- package/node_modules/uuid/dist/cjs-browser/v3.js +14 -0
- package/node_modules/uuid/dist/cjs-browser/v35.d.ts +7 -0
- package/node_modules/uuid/dist/cjs-browser/v35.js +41 -0
- package/node_modules/uuid/dist/cjs-browser/v4.d.ts +4 -0
- package/node_modules/uuid/dist/cjs-browser/v4.js +29 -0
- package/node_modules/uuid/dist/cjs-browser/v5.d.ts +9 -0
- package/node_modules/uuid/dist/cjs-browser/v5.js +14 -0
- package/node_modules/uuid/dist/cjs-browser/v6.d.ts +4 -0
- package/node_modules/uuid/dist/cjs-browser/v6.js +19 -0
- package/node_modules/uuid/dist/cjs-browser/v6ToV1.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/v6ToV1.js +13 -0
- package/node_modules/uuid/dist/cjs-browser/v7.d.ts +9 -0
- package/node_modules/uuid/dist/cjs-browser/v7.js +69 -0
- package/node_modules/uuid/dist/cjs-browser/validate.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/validate.js +7 -0
- package/node_modules/uuid/dist/cjs-browser/version.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/version.js +10 -0
- package/node_modules/uuid/dist/esm/bin/uuid +2 -0
- package/node_modules/uuid/dist/esm/index.d.ts +15 -0
- package/node_modules/uuid/dist/esm/index.js +14 -0
- package/node_modules/uuid/dist/esm/max.d.ts +2 -0
- package/node_modules/uuid/dist/esm/max.js +1 -0
- package/node_modules/uuid/dist/esm/md5.d.ts +4 -0
- package/node_modules/uuid/dist/esm/md5.js +11 -0
- package/node_modules/uuid/dist/esm/native.d.ts +6 -0
- package/node_modules/uuid/dist/esm/native.js +2 -0
- package/node_modules/uuid/dist/esm/nil.d.ts +2 -0
- package/node_modules/uuid/dist/esm/nil.js +1 -0
- package/node_modules/uuid/dist/esm/parse.d.ts +2 -0
- package/node_modules/uuid/dist/esm/parse.js +9 -0
- package/node_modules/uuid/dist/esm/regex.d.ts +2 -0
- package/node_modules/uuid/dist/esm/regex.js +1 -0
- package/node_modules/uuid/dist/esm/rng.d.ts +1 -0
- package/node_modules/uuid/dist/esm/rng.js +10 -0
- package/node_modules/uuid/dist/esm/sha1.d.ts +4 -0
- package/node_modules/uuid/dist/esm/sha1.js +11 -0
- package/node_modules/uuid/dist/esm/stringify.d.ts +3 -0
- package/node_modules/uuid/dist/esm/stringify.js +35 -0
- package/node_modules/uuid/dist/esm/types.d.ts +21 -0
- package/node_modules/uuid/dist/esm/types.js +1 -0
- package/node_modules/uuid/dist/esm/uuid-bin.d.ts +1 -0
- package/node_modules/uuid/dist/esm/uuid-bin.js +70 -0
- package/node_modules/uuid/dist/esm/v1.d.ts +11 -0
- package/node_modules/uuid/dist/esm/v1.js +83 -0
- package/node_modules/uuid/dist/esm/v1ToV6.d.ts +2 -0
- package/node_modules/uuid/dist/esm/v1ToV6.js +10 -0
- package/node_modules/uuid/dist/esm/v3.d.ts +9 -0
- package/node_modules/uuid/dist/esm/v3.js +9 -0
- package/node_modules/uuid/dist/esm/v35.d.ts +7 -0
- package/node_modules/uuid/dist/esm/v35.js +36 -0
- package/node_modules/uuid/dist/esm/v4.d.ts +4 -0
- package/node_modules/uuid/dist/esm/v4.js +27 -0
- package/node_modules/uuid/dist/esm/v5.d.ts +9 -0
- package/node_modules/uuid/dist/esm/v5.js +9 -0
- package/node_modules/uuid/dist/esm/v6.d.ts +4 -0
- package/node_modules/uuid/dist/esm/v6.js +17 -0
- package/node_modules/uuid/dist/esm/v6ToV1.d.ts +2 -0
- package/node_modules/uuid/dist/esm/v6ToV1.js +10 -0
- package/node_modules/uuid/dist/esm/v7.d.ts +9 -0
- package/node_modules/uuid/dist/esm/v7.js +65 -0
- package/node_modules/uuid/dist/esm/validate.d.ts +2 -0
- package/node_modules/uuid/dist/esm/validate.js +5 -0
- package/node_modules/uuid/dist/esm/version.d.ts +2 -0
- package/node_modules/uuid/dist/esm/version.js +8 -0
- package/node_modules/uuid/dist/esm-browser/index.d.ts +15 -0
- package/node_modules/uuid/dist/esm-browser/index.js +14 -0
- package/node_modules/uuid/dist/esm-browser/max.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/max.js +1 -0
- package/node_modules/uuid/dist/esm-browser/md5.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/md5.js +135 -0
- package/node_modules/uuid/dist/esm-browser/native.d.ts +4 -0
- package/node_modules/uuid/dist/esm-browser/native.js +2 -0
- package/node_modules/uuid/dist/esm-browser/nil.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/nil.js +1 -0
- package/node_modules/uuid/dist/esm-browser/parse.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/parse.js +9 -0
- package/node_modules/uuid/dist/esm-browser/regex.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/regex.js +1 -0
- package/node_modules/uuid/dist/esm-browser/rng.d.ts +1 -0
- package/node_modules/uuid/dist/esm-browser/rng.js +11 -0
- package/node_modules/uuid/dist/esm-browser/sha1.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/sha1.js +70 -0
- package/node_modules/uuid/dist/esm-browser/stringify.d.ts +3 -0
- package/node_modules/uuid/dist/esm-browser/stringify.js +35 -0
- package/node_modules/uuid/dist/esm-browser/types.d.ts +21 -0
- package/node_modules/uuid/dist/esm-browser/types.js +1 -0
- package/node_modules/uuid/dist/esm-browser/uuid-bin.d.ts +1 -0
- package/node_modules/uuid/dist/esm-browser/uuid-bin.js +70 -0
- package/node_modules/uuid/dist/esm-browser/v1.d.ts +11 -0
- package/node_modules/uuid/dist/esm-browser/v1.js +83 -0
- package/node_modules/uuid/dist/esm-browser/v1ToV6.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/v1ToV6.js +10 -0
- package/node_modules/uuid/dist/esm-browser/v3.d.ts +9 -0
- package/node_modules/uuid/dist/esm-browser/v3.js +9 -0
- package/node_modules/uuid/dist/esm-browser/v35.d.ts +7 -0
- package/node_modules/uuid/dist/esm-browser/v35.js +36 -0
- package/node_modules/uuid/dist/esm-browser/v4.d.ts +4 -0
- package/node_modules/uuid/dist/esm-browser/v4.js +27 -0
- package/node_modules/uuid/dist/esm-browser/v5.d.ts +9 -0
- package/node_modules/uuid/dist/esm-browser/v5.js +9 -0
- package/node_modules/uuid/dist/esm-browser/v6.d.ts +4 -0
- package/node_modules/uuid/dist/esm-browser/v6.js +17 -0
- package/node_modules/uuid/dist/esm-browser/v6ToV1.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/v6ToV1.js +10 -0
- package/node_modules/uuid/dist/esm-browser/v7.d.ts +9 -0
- package/node_modules/uuid/dist/esm-browser/v7.js +65 -0
- package/node_modules/uuid/dist/esm-browser/validate.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/validate.js +5 -0
- package/node_modules/uuid/dist/esm-browser/version.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/version.js +8 -0
- package/node_modules/uuid/package.json +132 -0
- package/package.json +17 -12
- package/scripts/cleanup-test-resources.ts +387 -0
- package/scripts/generate-index.js +25 -8
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.RoleAssignment = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
/**
|
|
7
|
+
* Unified Azure Role Assignment implementation using VersionedAzapiResource framework
|
|
8
|
+
*
|
|
9
|
+
* This class provides a version-aware implementation for managing Azure Role Assignments
|
|
10
|
+
* using the AZAPI provider. Role assignments grant specific permissions (roles) to security
|
|
11
|
+
* principals (users, groups, service principals, managed identities) at a particular scope.
|
|
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 all principal types (User, Group, ServicePrincipal, ForeignGroup, Device)
|
|
21
|
+
* - Conditional role assignments using ABAC (Attribute-Based Access Control)
|
|
22
|
+
* - Delegated managed identity support for group assignments
|
|
23
|
+
* - Assignment at subscription, resource group, or resource scope
|
|
24
|
+
* - JSII compliance for multi-language support
|
|
25
|
+
*/
|
|
26
|
+
const crypto_1 = require("crypto");
|
|
27
|
+
const cdktf = require("cdktf");
|
|
28
|
+
const role_assignment_schemas_1 = require("./role-assignment-schemas");
|
|
29
|
+
const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
|
|
30
|
+
/**
|
|
31
|
+
* Unified Azure Role Assignment implementation
|
|
32
|
+
*
|
|
33
|
+
* This class provides a single, version-aware implementation for managing Azure
|
|
34
|
+
* Role Assignments. It automatically handles version resolution, schema validation,
|
|
35
|
+
* and property transformation.
|
|
36
|
+
*
|
|
37
|
+
* **Important Notes:**
|
|
38
|
+
* - Role assignments are scoped resources deployed at subscription, resource group,
|
|
39
|
+
* or resource level. They do not have a location property as they are not region-specific.
|
|
40
|
+
* - The `name` property (inherited from AzapiResourceProps) is not used. Azure automatically
|
|
41
|
+
* generates a deterministic GUID for role assignment names based on the deployment context.
|
|
42
|
+
* This ensures idempotent deployments without duplicate role assignments.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* Basic role assignment - Assign Reader role to a user at subscription scope
|
|
46
|
+
*
|
|
47
|
+
* const assignment = new RoleAssignment(this, "reader-assignment", {
|
|
48
|
+
* roleDefinitionId: "/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7",
|
|
49
|
+
* principalId: "00000000-0000-0000-0000-000000000000",
|
|
50
|
+
* scope: "/subscriptions/00000000-0000-0000-0000-000000000000",
|
|
51
|
+
* principalType: "User",
|
|
52
|
+
* });
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* Resource group scoped assignment - Assign Contributor to a service principal
|
|
56
|
+
*
|
|
57
|
+
* const assignment = new RoleAssignment(this, "contributor-assignment", {
|
|
58
|
+
* roleDefinitionId: "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
|
|
59
|
+
* principalId: servicePrincipal.objectId,
|
|
60
|
+
* scope: resourceGroup.id,
|
|
61
|
+
* principalType: "ServicePrincipal",
|
|
62
|
+
* description: "Grants contributor access to the deployment service principal",
|
|
63
|
+
* });
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* Conditional assignment with ABAC - Limit access to specific storage containers
|
|
67
|
+
*
|
|
68
|
+
* const assignment = new RoleAssignment(this, "conditional-assignment", {
|
|
69
|
+
* roleDefinitionId: storageRole.id,
|
|
70
|
+
* principalId: user.objectId,
|
|
71
|
+
* scope: storageAccount.id,
|
|
72
|
+
* principalType: "User",
|
|
73
|
+
* condition: "@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'logs'",
|
|
74
|
+
* conditionVersion: "2.0",
|
|
75
|
+
* description: "Grants access only to the logs container",
|
|
76
|
+
* });
|
|
77
|
+
*
|
|
78
|
+
* @stability stable
|
|
79
|
+
*/
|
|
80
|
+
class RoleAssignment extends azapi_resource_1.AzapiResource {
|
|
81
|
+
// Public properties
|
|
82
|
+
/**
|
|
83
|
+
* Creates a new Azure Role Assignment using the VersionedAzapiResource framework
|
|
84
|
+
*
|
|
85
|
+
* The constructor automatically handles version resolution, schema registration,
|
|
86
|
+
* validation, and resource creation.
|
|
87
|
+
*
|
|
88
|
+
* @param scope - The scope in which to define this construct
|
|
89
|
+
* @param id - The unique identifier for this instance
|
|
90
|
+
* @param props - Configuration properties for the Role Assignment
|
|
91
|
+
*/
|
|
92
|
+
constructor(scope, id, props) {
|
|
93
|
+
// Azure Role Assignments do not support tags at the resource level.
|
|
94
|
+
// We must strip tags from props before passing to the parent constructor
|
|
95
|
+
// to prevent the AZAPI provider from including tags in the resource.
|
|
96
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
97
|
+
const { tags: _unusedTags, ...propsWithoutTags } = props;
|
|
98
|
+
super(scope, id, propsWithoutTags);
|
|
99
|
+
this.props = props;
|
|
100
|
+
// Extract properties from the AZAPI resource outputs using Terraform interpolation
|
|
101
|
+
// Create Terraform outputs for easy access and referencing from other resources
|
|
102
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
103
|
+
value: this.id,
|
|
104
|
+
description: "The ID of the Role Assignment",
|
|
105
|
+
});
|
|
106
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
107
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
108
|
+
description: "The name of the Role Assignment",
|
|
109
|
+
});
|
|
110
|
+
// Override logical IDs to match original naming convention
|
|
111
|
+
this.idOutput.overrideLogicalId("id");
|
|
112
|
+
this.nameOutput.overrideLogicalId("name");
|
|
113
|
+
// Apply ignore changes if specified
|
|
114
|
+
this._applyIgnoreChanges();
|
|
115
|
+
}
|
|
116
|
+
// =============================================================================
|
|
117
|
+
// REQUIRED ABSTRACT METHODS FROM AzapiResource
|
|
118
|
+
// =============================================================================
|
|
119
|
+
/**
|
|
120
|
+
* Gets the default API version to use when no explicit version is specified
|
|
121
|
+
* Returns the most recent stable version as the default
|
|
122
|
+
*/
|
|
123
|
+
defaultVersion() {
|
|
124
|
+
return "2022-04-01";
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Gets the Azure resource type for Role Assignments
|
|
128
|
+
*/
|
|
129
|
+
resourceType() {
|
|
130
|
+
return role_assignment_schemas_1.ROLE_ASSIGNMENT_TYPE;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Gets the API schema for the resolved version
|
|
134
|
+
* Uses the framework's schema resolution to get the appropriate schema
|
|
135
|
+
*/
|
|
136
|
+
apiSchema() {
|
|
137
|
+
return this.resolveSchema();
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Creates the resource body for the Azure API call
|
|
141
|
+
* Transforms the input properties into the JSON format expected by Azure REST API
|
|
142
|
+
*
|
|
143
|
+
* Note: Role assignments do not have a location property as they are
|
|
144
|
+
* scoped resources (subscription, resource group, or resource level).
|
|
145
|
+
* The scope property is NOT included in the body as it's read-only and
|
|
146
|
+
* automatically derived from the parentId.
|
|
147
|
+
*/
|
|
148
|
+
createResourceBody(props) {
|
|
149
|
+
const typedProps = props;
|
|
150
|
+
return {
|
|
151
|
+
properties: {
|
|
152
|
+
roleDefinitionId: typedProps.roleDefinitionId,
|
|
153
|
+
principalId: typedProps.principalId,
|
|
154
|
+
// Note: scope is NOT included here - it's read-only and derived from parentId
|
|
155
|
+
principalType: typedProps.principalType,
|
|
156
|
+
description: typedProps.description,
|
|
157
|
+
condition: typedProps.condition,
|
|
158
|
+
conditionVersion: typedProps.conditionVersion,
|
|
159
|
+
delegatedManagedIdentityResourceId: typedProps.delegatedManagedIdentityResourceId,
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Overrides the name resolution to generate deterministic GUIDs for role assignments
|
|
165
|
+
*
|
|
166
|
+
* Role assignments require GUID format IDs. This implementation generates a deterministic
|
|
167
|
+
* UUID based on the role assignment's key properties to ensure:
|
|
168
|
+
* - Same GUID is generated on re-deployments with same parameters
|
|
169
|
+
* - Idempotent deployments (no duplicate role assignments)
|
|
170
|
+
* - Consistent behavior across deployment runs
|
|
171
|
+
*/
|
|
172
|
+
resolveName(props) {
|
|
173
|
+
const typedProps = props;
|
|
174
|
+
// Create a deterministic hash from key role assignment properties
|
|
175
|
+
const hashInput = [
|
|
176
|
+
typedProps.scope,
|
|
177
|
+
typedProps.roleDefinitionId,
|
|
178
|
+
typedProps.principalId,
|
|
179
|
+
].join("|");
|
|
180
|
+
const hash = (0, crypto_1.createHash)("sha256").update(hashInput).digest("hex");
|
|
181
|
+
// Convert hash to UUID format (8-4-4-4-12)
|
|
182
|
+
return [
|
|
183
|
+
hash.substring(0, 8),
|
|
184
|
+
hash.substring(8, 12),
|
|
185
|
+
hash.substring(12, 16),
|
|
186
|
+
hash.substring(16, 20),
|
|
187
|
+
hash.substring(20, 32),
|
|
188
|
+
].join("-");
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Overrides parent ID resolution to use the scope from props
|
|
192
|
+
* Role assignments are scoped resources where the scope IS the parent
|
|
193
|
+
*/
|
|
194
|
+
resolveParentId(props) {
|
|
195
|
+
const typedProps = props;
|
|
196
|
+
return typedProps.scope;
|
|
197
|
+
}
|
|
198
|
+
// =============================================================================
|
|
199
|
+
// PUBLIC METHODS FOR ROLE ASSIGNMENT OPERATIONS
|
|
200
|
+
// =============================================================================
|
|
201
|
+
/**
|
|
202
|
+
* Get the full resource identifier for use in other Azure resources
|
|
203
|
+
* Alias for the id property
|
|
204
|
+
*/
|
|
205
|
+
get resourceId() {
|
|
206
|
+
return this.id;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get the role definition ID this assignment references
|
|
210
|
+
*/
|
|
211
|
+
get roleDefinitionId() {
|
|
212
|
+
return this.props.roleDefinitionId;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get the principal ID that was granted this role
|
|
216
|
+
*/
|
|
217
|
+
get principalId() {
|
|
218
|
+
return this.props.principalId;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get the scope of this role assignment
|
|
222
|
+
*/
|
|
223
|
+
get assignmentScope() {
|
|
224
|
+
return this.props.scope;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Get the principal type
|
|
228
|
+
*/
|
|
229
|
+
get principalType() {
|
|
230
|
+
return this.props.principalType;
|
|
231
|
+
}
|
|
232
|
+
// =============================================================================
|
|
233
|
+
// PRIVATE HELPER METHODS
|
|
234
|
+
// =============================================================================
|
|
235
|
+
/**
|
|
236
|
+
* Applies ignore changes lifecycle rules if specified in props
|
|
237
|
+
* Always includes body.properties.roleDefinitionId to handle Azure API format normalization
|
|
238
|
+
*/
|
|
239
|
+
_applyIgnoreChanges() {
|
|
240
|
+
// Always ignore roleDefinitionId format changes due to Azure API normalization
|
|
241
|
+
// Azure returns subscription-qualified format but accepts non-qualified format
|
|
242
|
+
const ignoreChanges = [
|
|
243
|
+
"body.properties.roleDefinitionId",
|
|
244
|
+
...(this.props.ignoreChanges || []),
|
|
245
|
+
];
|
|
246
|
+
this.terraformResource.addOverride("lifecycle", {
|
|
247
|
+
ignore_changes: ignoreChanges,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
exports.RoleAssignment = RoleAssignment;
|
|
252
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
253
|
+
RoleAssignment[_a] = { fqn: "@microsoft/terraform-cdk-constructs.RoleAssignment", version: "1.3.0" };
|
|
254
|
+
(() => {
|
|
255
|
+
azapi_resource_1.AzapiResource.registerSchemas(role_assignment_schemas_1.ROLE_ASSIGNMENT_TYPE, role_assignment_schemas_1.ALL_ROLE_ASSIGNMENT_VERSIONS);
|
|
256
|
+
})();
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1hc3NpZ25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXJvbGVhc3NpZ25tZW50L2xpYi9yb2xlLWFzc2lnbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUVILG1DQUFvQztBQUNwQywrQkFBK0I7QUFFL0IsdUVBR21DO0FBQ25DLDhFQUdtRDtBQTZKbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpREc7QUFDSCxNQUFhLGNBQWUsU0FBUSw4QkFBYTtJQWlCL0Msb0JBQW9CO0lBRXBCOzs7Ozs7Ozs7T0FTRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsb0VBQW9FO1FBQ3BFLHlFQUF5RTtRQUN6RSxxRUFBcUU7UUFDckUsNkRBQTZEO1FBQzdELE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDekQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsZ0JBQXVDLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixtRkFBbUY7UUFFbkYsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLCtCQUErQjtTQUM3QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLGlDQUFpQztTQUMvQyxDQUFDLENBQUM7UUFFSCwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLCtDQUErQztJQUMvQyxnRkFBZ0Y7SUFFaEY7OztPQUdHO0lBQ08sY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxZQUFZO1FBQ3BCLE9BQU8sOENBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFNBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ08sa0JBQWtCLENBQUMsS0FBVTtRQUNyQyxNQUFNLFVBQVUsR0FBRyxLQUE0QixDQUFDO1FBQ2hELE9BQU87WUFDTCxVQUFVLEVBQUU7Z0JBQ1YsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLGdCQUFnQjtnQkFDN0MsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO2dCQUNuQyw4RUFBOEU7Z0JBQzlFLGFBQWEsRUFBRSxVQUFVLENBQUMsYUFBYTtnQkFDdkMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO2dCQUNuQyxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7Z0JBQy9CLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxnQkFBZ0I7Z0JBQzdDLGtDQUFrQyxFQUNoQyxVQUFVLENBQUMsa0NBQWtDO2FBQ2hEO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLFdBQVcsQ0FBQyxLQUF5QjtRQUM3QyxNQUFNLFVBQVUsR0FBRyxLQUE0QixDQUFDO1FBRWhELGtFQUFrRTtRQUNsRSxNQUFNLFNBQVMsR0FBRztZQUNoQixVQUFVLENBQUMsS0FBSztZQUNoQixVQUFVLENBQUMsZ0JBQWdCO1lBQzNCLFVBQVUsQ0FBQyxXQUFXO1NBQ3ZCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRVosTUFBTSxJQUFJLEdBQUcsSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEUsMkNBQTJDO1FBQzNDLE9BQU87WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ3ZCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGVBQWUsQ0FBQyxLQUFVO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLEtBQTRCLENBQUM7UUFDaEQsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYsZ0RBQWdEO0lBQ2hELGdGQUFnRjtJQUVoRjs7O09BR0c7SUFDSCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLHlCQUF5QjtJQUN6QixnRkFBZ0Y7SUFFaEY7OztPQUdHO0lBQ0ssbUJBQW1CO1FBQ3pCLCtFQUErRTtRQUMvRSwrRUFBK0U7UUFDL0UsTUFBTSxhQUFhLEdBQUc7WUFDcEIsa0NBQWtDO1lBQ2xDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7U0FDcEMsQ0FBQztRQUVGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQzlDLGNBQWMsRUFBRSxhQUFhO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBcE5ILHdDQXFOQzs7O0FBcE5DO0lBQ0UsOEJBQWEsQ0FBQyxlQUFlLENBQzNCLDhDQUFvQixFQUNwQixzREFBNEIsQ0FDN0IsQ0FBQztBQUNKLENBQUMsR0FBQSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVbmlmaWVkIEF6dXJlIFJvbGUgQXNzaWdubWVudCBpbXBsZW1lbnRhdGlvbiB1c2luZyBWZXJzaW9uZWRBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIGZvciBtYW5hZ2luZyBBenVyZSBSb2xlIEFzc2lnbm1lbnRzXG4gKiB1c2luZyB0aGUgQVpBUEkgcHJvdmlkZXIuIFJvbGUgYXNzaWdubWVudHMgZ3JhbnQgc3BlY2lmaWMgcGVybWlzc2lvbnMgKHJvbGVzKSB0byBzZWN1cml0eVxuICogcHJpbmNpcGFscyAodXNlcnMsIGdyb3Vwcywgc2VydmljZSBwcmluY2lwYWxzLCBtYW5hZ2VkIGlkZW50aXRpZXMpIGF0IGEgcGFydGljdWxhciBzY29wZS5cbiAqXG4gKiBTdXBwb3J0ZWQgQVBJIFZlcnNpb25zOlxuICogLSAyMDIyLTA0LTAxIChBY3RpdmUsIExhdGVzdClcbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gQXV0b21hdGljIGxhdGVzdCB2ZXJzaW9uIHJlc29sdXRpb24gd2hlbiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICogLSBFeHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmcgZm9yIHN0YWJpbGl0eSByZXF1aXJlbWVudHNcbiAqIC0gU2NoZW1hLWRyaXZlbiB2YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvblxuICogLSBTdXBwb3J0IGZvciBhbGwgcHJpbmNpcGFsIHR5cGVzIChVc2VyLCBHcm91cCwgU2VydmljZVByaW5jaXBhbCwgRm9yZWlnbkdyb3VwLCBEZXZpY2UpXG4gKiAtIENvbmRpdGlvbmFsIHJvbGUgYXNzaWdubWVudHMgdXNpbmcgQUJBQyAoQXR0cmlidXRlLUJhc2VkIEFjY2VzcyBDb250cm9sKVxuICogLSBEZWxlZ2F0ZWQgbWFuYWdlZCBpZGVudGl0eSBzdXBwb3J0IGZvciBncm91cCBhc3NpZ25tZW50c1xuICogLSBBc3NpZ25tZW50IGF0IHN1YnNjcmlwdGlvbiwgcmVzb3VyY2UgZ3JvdXAsIG9yIHJlc291cmNlIHNjb3BlXG4gKiAtIEpTSUkgY29tcGxpYW5jZSBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBBTExfUk9MRV9BU1NJR05NRU5UX1ZFUlNJT05TLFxuICBST0xFX0FTU0lHTk1FTlRfVFlQRSxcbn0gZnJvbSBcIi4vcm9sZS1hc3NpZ25tZW50LXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIHVuaWZpZWQgQXp1cmUgUm9sZSBBc3NpZ25tZW50XG4gKlxuICogRXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMgd2l0aCBSb2xlIEFzc2lnbm1lbnQgc3BlY2lmaWMgcHJvcGVydGllcy5cbiAqXG4gKiAqKk5vdGUgb24gdGhlIGBuYW1lYCBwcm9wZXJ0eToqKiBXaGlsZSB0aGlzIGludGVyZmFjZSBpbmhlcml0cyB0aGUgYG5hbWVgIHByb3BlcnR5XG4gKiBmcm9tIEF6YXBpUmVzb3VyY2VQcm9wcywgaXQgaXMgbm90IHVzZWQgZm9yIHJvbGUgYXNzaWdubWVudHMuIEF6dXJlIHJvbGUgYXNzaWdubWVudHNcbiAqIHJlcXVpcmUgR1VJRCBmb3JtYXQgbmFtZXMsIHdoaWNoIGFyZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSB0aGUgY29uc3RydWN0LlxuICogQW55IHVzZXItcHJvdmlkZWQgbmFtZSB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQgaW4gZmF2b3Igb2YgQXp1cmUncyBkZXRlcm1pbmlzdGljXG4gKiBHVUlEIGdlbmVyYXRpb24gYmFzZWQgb24gdGhlIGRlcGxveW1lbnQgY29udGV4dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb2xlQXNzaWdubWVudFByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSByb2xlIGRlZmluaXRpb24gSUQgdG8gYXNzaWduXG4gICAqIFRoaXMgY2FuIGJlIGEgYnVpbHQtaW4gb3IgY3VzdG9tIHJvbGUgZGVmaW5pdGlvblxuICAgKiBSZXF1aXJlZCBwcm9wZXJ0eVxuICAgKlxuICAgKiBAZXhhbXBsZSBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcm9sZURlZmluaXRpb25zL2FjZGQ3MmE3LTMzODUtNDhlZi1iZDQyLWY2MDZmYmE4MWFlN1wiIChSZWFkZXIpXG4gICAqIEBleGFtcGxlIFwiL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9yb2xlRGVmaW5pdGlvbnMvYjI0OTg4YWMtNjE4MC00MmEwLWFiODgtMjBmNzM4MmRkMjRjXCIgKENvbnRyaWJ1dG9yKVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZURlZmluaXRpb25JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbmNpcGFsIElEIChvYmplY3QgSUQpIHRvIHdoaWNoIHRoZSByb2xlIGlzIGFzc2lnbmVkXG4gICAqIFRoaXMgY2FuIGJlIGEgdXNlciwgZ3JvdXAsIHNlcnZpY2UgcHJpbmNpcGFsLCBvciBtYW5hZ2VkIGlkZW50aXR5XG4gICAqIFJlcXVpcmVkIHByb3BlcnR5XG4gICAqXG4gICAqIEBleGFtcGxlIFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCJcbiAgICovXG4gIHJlYWRvbmx5IHByaW5jaXBhbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzY29wZSBhdCB3aGljaCB0aGUgcm9sZSBhc3NpZ25tZW50IGlzIGFwcGxpZWRcbiAgICogQ2FuIGJlIGEgc3Vic2NyaXB0aW9uLCByZXNvdXJjZSBncm91cCwgb3IgcmVzb3VyY2VcbiAgICogUmVxdWlyZWQgcHJvcGVydHlcbiAgICpcbiAgICogQGV4YW1wbGUgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIlxuICAgKiBAZXhhbXBsZSBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy9yZy1uYW1lXCJcbiAgICogQGV4YW1wbGUgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvcmctbmFtZS9wcm92aWRlcnMvTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3N0b3JhZ2UtbmFtZVwiXG4gICAqL1xuICByZWFkb25seSBzY29wZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBwcmluY2lwYWxcbiAgICogU3BlY2lmaWVzIHdoYXQga2luZCBvZiBpZGVudGl0eSBpcyBiZWluZyBhc3NpZ25lZCB0aGUgcm9sZVxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgKEF6dXJlIHdpbGwgYXV0by1kZXRlY3QpXG4gICAqIEBleGFtcGxlIFwiVXNlclwiIC0gQW4gQXp1cmUgQUQgdXNlclxuICAgKiBAZXhhbXBsZSBcIkdyb3VwXCIgLSBBbiBBenVyZSBBRCBncm91cFxuICAgKiBAZXhhbXBsZSBcIlNlcnZpY2VQcmluY2lwYWxcIiAtIEEgc2VydmljZSBwcmluY2lwYWwgKGFwcGxpY2F0aW9uKVxuICAgKiBAZXhhbXBsZSBcIkZvcmVpZ25Hcm91cFwiIC0gQSBncm91cCBmcm9tIGV4dGVybmFsIGRpcmVjdG9yeVxuICAgKiBAZXhhbXBsZSBcIkRldmljZVwiIC0gQSBkZXZpY2UgaWRlbnRpdHlcbiAgICovXG4gIHJlYWRvbmx5IHByaW5jaXBhbFR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByb2xlIGFzc2lnbm1lbnQgZGVzY3JpcHRpb25cbiAgICogUHJvdmlkZXMgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgd2h5IHRoZSBhc3NpZ25tZW50IHdhcyBtYWRlXG4gICAqXG4gICAqIEBleGFtcGxlIFwiR3JhbnRzIHJlYWQgYWNjZXNzIHRvIG1vbml0b3JpbmcgdGVhbSBmb3IgcmVzb3VyY2UgZGlhZ25vc3RpY3NcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25kaXRpb25zIG9uIHRoZSByb2xlIGFzc2lnbm1lbnRcbiAgICogTGltaXRzIHRoZSByZXNvdXJjZXMgaXQgYXBwbGllcyB0byB1c2luZyBBQkFDIGV4cHJlc3Npb25zXG4gICAqIFJlcXVpcmVzIGNvbmRpdGlvblZlcnNpb24gdG8gYmUgc2V0IHdoZW4gdXNlZFxuICAgKlxuICAgKiBAZXhhbXBsZSBcIkBSZXNvdXJjZVtNaWNyb3NvZnQuU3RvcmFnZS9zdG9yYWdlQWNjb3VudHMvYmxvYlNlcnZpY2VzL2NvbnRhaW5lcnM6bmFtZV0gU3RyaW5nRXF1YWxzICdsb2dzJ1wiXG4gICAqL1xuICByZWFkb25seSBjb25kaXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdGhlIGNvbmRpdGlvbiBzeW50YXhcbiAgICogUmVxdWlyZWQgd2hlbiBjb25kaXRpb24gaXMgc3BlY2lmaWVkXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKiBAZXhhbXBsZSBcIjIuMFwiXG4gICAqL1xuICByZWFkb25seSBjb25kaXRpb25WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVsZWdhdGVkIEF6dXJlIFJlc291cmNlIElkIHdoaWNoIGNvbnRhaW5zIGEgTWFuYWdlZCBJZGVudGl0eVxuICAgKiBBcHBsaWNhYmxlIG9ubHkgd2hlbiB0aGUgcHJpbmNpcGFsVHlwZSBpcyBHcm91cFxuICAgKiBVc2VkIGZvciBzY2VuYXJpb3Mgd2hlcmUgYSBncm91cCBhc3NpZ25tZW50IHNob3VsZCB1c2UgYSBzcGVjaWZpYyBtYW5hZ2VkIGlkZW50aXR5XG4gICAqXG4gICAqIEBleGFtcGxlIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL3JnL3Byb3ZpZGVycy9NaWNyb3NvZnQuTWFuYWdlZElkZW50aXR5L3VzZXJBc3NpZ25lZElkZW50aXRpZXMvaWRlbnRpdHlcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZWdhdGVkTWFuYWdlZElkZW50aXR5UmVzb3VyY2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBydWxlcyB0byBpZ25vcmUgY2hhbmdlc1xuICAgKiBAZXhhbXBsZSBbXCJkZXNjcmlwdGlvblwiXVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlQ2hhbmdlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgaW50ZXJmYWNlIGZvciBBenVyZSBSb2xlIEFzc2lnbm1lbnRcbiAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIEpTSUkgY29tcGxpYW5jZSB0byBzdXBwb3J0IG11bHRpLWxhbmd1YWdlIGNvZGUgZ2VuZXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvbGVBc3NpZ25tZW50UHJvcGVydGllcyB7XG4gIC8qKlxuICAgKiBUaGUgcm9sZSBkZWZpbml0aW9uIElEXG4gICAqL1xuICByZWFkb25seSByb2xlRGVmaW5pdGlvbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgSURcbiAgICovXG4gIHJlYWRvbmx5IHByaW5jaXBhbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzY29wZSBvZiB0aGUgcm9sZSBhc3NpZ25tZW50XG4gICAqL1xuICByZWFkb25seSBzY29wZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBwcmluY2lwYWxcbiAgICovXG4gIHJlYWRvbmx5IHByaW5jaXBhbFR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByb2xlIGFzc2lnbm1lbnQgZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZGl0aW9ucyBvbiB0aGUgcm9sZSBhc3NpZ25tZW50XG4gICAqL1xuICByZWFkb25seSBjb25kaXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdGhlIGNvbmRpdGlvbiBzeW50YXhcbiAgICovXG4gIHJlYWRvbmx5IGNvbmRpdGlvblZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWxlZ2F0ZWQgbWFuYWdlZCBpZGVudGl0eSByZXNvdXJjZSBJRFxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZWdhdGVkTWFuYWdlZElkZW50aXR5UmVzb3VyY2VJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVzb3VyY2UgYm9keSBpbnRlcmZhY2UgZm9yIEF6dXJlIFJvbGUgQXNzaWdubWVudCBBUEkgY2FsbHNcbiAqIFRoaXMgbWF0Y2hlcyB0aGUgQXp1cmUgUkVTVCBBUEkgc2NoZW1hIGZvciByb2xlIGFzc2lnbm1lbnRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm9sZUFzc2lnbm1lbnRCb2R5IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSByb2xlIGFzc2lnbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IFJvbGVBc3NpZ25tZW50UHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBVbmlmaWVkIEF6dXJlIFJvbGUgQXNzaWdubWVudCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBzaW5nbGUsIHZlcnNpb24tYXdhcmUgaW1wbGVtZW50YXRpb24gZm9yIG1hbmFnaW5nIEF6dXJlXG4gKiBSb2xlIEFzc2lnbm1lbnRzLiBJdCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvbiByZXNvbHV0aW9uLCBzY2hlbWEgdmFsaWRhdGlvbixcbiAqIGFuZCBwcm9wZXJ0eSB0cmFuc2Zvcm1hdGlvbi5cbiAqXG4gKiAqKkltcG9ydGFudCBOb3RlczoqKlxuICogLSBSb2xlIGFzc2lnbm1lbnRzIGFyZSBzY29wZWQgcmVzb3VyY2VzIGRlcGxveWVkIGF0IHN1YnNjcmlwdGlvbiwgcmVzb3VyY2UgZ3JvdXAsXG4gKiAgIG9yIHJlc291cmNlIGxldmVsLiBUaGV5IGRvIG5vdCBoYXZlIGEgbG9jYXRpb24gcHJvcGVydHkgYXMgdGhleSBhcmUgbm90IHJlZ2lvbi1zcGVjaWZpYy5cbiAqIC0gVGhlIGBuYW1lYCBwcm9wZXJ0eSAoaW5oZXJpdGVkIGZyb20gQXphcGlSZXNvdXJjZVByb3BzKSBpcyBub3QgdXNlZC4gQXp1cmUgYXV0b21hdGljYWxseVxuICogICBnZW5lcmF0ZXMgYSBkZXRlcm1pbmlzdGljIEdVSUQgZm9yIHJvbGUgYXNzaWdubWVudCBuYW1lcyBiYXNlZCBvbiB0aGUgZGVwbG95bWVudCBjb250ZXh0LlxuICogICBUaGlzIGVuc3VyZXMgaWRlbXBvdGVudCBkZXBsb3ltZW50cyB3aXRob3V0IGR1cGxpY2F0ZSByb2xlIGFzc2lnbm1lbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyByb2xlIGFzc2lnbm1lbnQgLSBBc3NpZ24gUmVhZGVyIHJvbGUgdG8gYSB1c2VyIGF0IHN1YnNjcmlwdGlvbiBzY29wZVxuICpcbiAqIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUm9sZUFzc2lnbm1lbnQodGhpcywgXCJyZWFkZXItYXNzaWdubWVudFwiLCB7XG4gKiAgIHJvbGVEZWZpbml0aW9uSWQ6IFwiL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9yb2xlRGVmaW5pdGlvbnMvYWNkZDcyYTctMzM4NS00OGVmLWJkNDItZjYwNmZiYTgxYWU3XCIsXG4gKiAgIHByaW5jaXBhbElkOiBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICogICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAqICAgcHJpbmNpcGFsVHlwZTogXCJVc2VyXCIsXG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogUmVzb3VyY2UgZ3JvdXAgc2NvcGVkIGFzc2lnbm1lbnQgLSBBc3NpZ24gQ29udHJpYnV0b3IgdG8gYSBzZXJ2aWNlIHByaW5jaXBhbFxuICpcbiAqIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUm9sZUFzc2lnbm1lbnQodGhpcywgXCJjb250cmlidXRvci1hc3NpZ25tZW50XCIsIHtcbiAqICAgcm9sZURlZmluaXRpb25JZDogXCIvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3JvbGVEZWZpbml0aW9ucy9iMjQ5ODhhYy02MTgwLTQyYTAtYWI4OC0yMGY3MzgyZGQyNGNcIixcbiAqICAgcHJpbmNpcGFsSWQ6IHNlcnZpY2VQcmluY2lwYWwub2JqZWN0SWQsXG4gKiAgIHNjb3BlOiByZXNvdXJjZUdyb3VwLmlkLFxuICogICBwcmluY2lwYWxUeXBlOiBcIlNlcnZpY2VQcmluY2lwYWxcIixcbiAqICAgZGVzY3JpcHRpb246IFwiR3JhbnRzIGNvbnRyaWJ1dG9yIGFjY2VzcyB0byB0aGUgZGVwbG95bWVudCBzZXJ2aWNlIHByaW5jaXBhbFwiLFxuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIENvbmRpdGlvbmFsIGFzc2lnbm1lbnQgd2l0aCBBQkFDIC0gTGltaXQgYWNjZXNzIHRvIHNwZWNpZmljIHN0b3JhZ2UgY29udGFpbmVyc1xuICpcbiAqIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUm9sZUFzc2lnbm1lbnQodGhpcywgXCJjb25kaXRpb25hbC1hc3NpZ25tZW50XCIsIHtcbiAqICAgcm9sZURlZmluaXRpb25JZDogc3RvcmFnZVJvbGUuaWQsXG4gKiAgIHByaW5jaXBhbElkOiB1c2VyLm9iamVjdElkLFxuICogICBzY29wZTogc3RvcmFnZUFjY291bnQuaWQsXG4gKiAgIHByaW5jaXBhbFR5cGU6IFwiVXNlclwiLFxuICogICBjb25kaXRpb246IFwiQFJlc291cmNlW01pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy9ibG9iU2VydmljZXMvY29udGFpbmVyczpuYW1lXSBTdHJpbmdFcXVhbHMgJ2xvZ3MnXCIsXG4gKiAgIGNvbmRpdGlvblZlcnNpb246IFwiMi4wXCIsXG4gKiAgIGRlc2NyaXB0aW9uOiBcIkdyYW50cyBhY2Nlc3Mgb25seSB0byB0aGUgbG9ncyBjb250YWluZXJcIixcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBSb2xlQXNzaWdubWVudCBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgUk9MRV9BU1NJR05NRU5UX1RZUEUsXG4gICAgICBBTExfUk9MRV9BU1NJR05NRU5UX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoaXMgUm9sZSBBc3NpZ25tZW50IGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IFJvbGVBc3NpZ25tZW50UHJvcHM7XG5cbiAgLy8gT3V0cHV0IHByb3BlcnRpZXMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZ1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICAvLyBQdWJsaWMgcHJvcGVydGllc1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEF6dXJlIFJvbGUgQXNzaWdubWVudCB1c2luZyB0aGUgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAgICpcbiAgICogVGhlIGNvbnN0cnVjdG9yIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uIHJlc29sdXRpb24sIHNjaGVtYSByZWdpc3RyYXRpb24sXG4gICAqIHZhbGlkYXRpb24sIGFuZCByZXNvdXJjZSBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgUm9sZSBBc3NpZ25tZW50XG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUm9sZUFzc2lnbm1lbnRQcm9wcykge1xuICAgIC8vIEF6dXJlIFJvbGUgQXNzaWdubWVudHMgZG8gbm90IHN1cHBvcnQgdGFncyBhdCB0aGUgcmVzb3VyY2UgbGV2ZWwuXG4gICAgLy8gV2UgbXVzdCBzdHJpcCB0YWdzIGZyb20gcHJvcHMgYmVmb3JlIHBhc3NpbmcgdG8gdGhlIHBhcmVudCBjb25zdHJ1Y3RvclxuICAgIC8vIHRvIHByZXZlbnQgdGhlIEFaQVBJIHByb3ZpZGVyIGZyb20gaW5jbHVkaW5nIHRhZ3MgaW4gdGhlIHJlc291cmNlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7IHRhZ3M6IF91bnVzZWRUYWdzLCAuLi5wcm9wc1dpdGhvdXRUYWdzIH0gPSBwcm9wcztcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzV2l0aG91dFRhZ3MgYXMgUm9sZUFzc2lnbm1lbnRQcm9wcyk7XG5cbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICAvLyBFeHRyYWN0IHByb3BlcnRpZXMgZnJvbSB0aGUgQVpBUEkgcmVzb3VyY2Ugb3V0cHV0cyB1c2luZyBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvblxuXG4gICAgLy8gQ3JlYXRlIFRlcnJhZm9ybSBvdXRwdXRzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmcgZnJvbSBvdGhlciByZXNvdXJjZXNcbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBSb2xlIEFzc2lnbm1lbnRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBSb2xlIEFzc2lnbm1lbnRcIixcbiAgICB9KTtcblxuICAgIC8vIE92ZXJyaWRlIGxvZ2ljYWwgSURzIHRvIG1hdGNoIG9yaWdpbmFsIG5hbWluZyBjb252ZW50aW9uXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG5cbiAgICAvLyBBcHBseSBpZ25vcmUgY2hhbmdlcyBpZiBzcGVjaWZpZWRcbiAgICB0aGlzLl9hcHBseUlnbm9yZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFUVVJUkVEIEFCU1RSQUNUIE1FVEhPRFMgRlJPTSBBemFwaVJlc291cmNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgQVBJIHZlcnNpb24gdG8gdXNlIHdoZW4gbm8gZXhwbGljaXQgdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAgICogUmV0dXJucyB0aGUgbW9zdCByZWNlbnQgc3RhYmxlIHZlcnNpb24gYXMgdGhlIGRlZmF1bHRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjItMDQtMDFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciBSb2xlIEFzc2lnbm1lbnRzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFJPTEVfQVNTSUdOTUVOVF9UWVBFO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIEFQSSBzY2hlbWEgZm9yIHRoZSByZXNvbHZlZCB2ZXJzaW9uXG4gICAqIFVzZXMgdGhlIGZyYW1ld29yaydzIHNjaGVtYSByZXNvbHV0aW9uIHRvIGdldCB0aGUgYXBwcm9wcmlhdGUgc2NoZW1hXG4gICAqL1xuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHJlc291cmNlIGJvZHkgZm9yIHRoZSBBenVyZSBBUEkgY2FsbFxuICAgKiBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBwcm9wZXJ0aWVzIGludG8gdGhlIEpTT04gZm9ybWF0IGV4cGVjdGVkIGJ5IEF6dXJlIFJFU1QgQVBJXG4gICAqXG4gICAqIE5vdGU6IFJvbGUgYXNzaWdubWVudHMgZG8gbm90IGhhdmUgYSBsb2NhdGlvbiBwcm9wZXJ0eSBhcyB0aGV5IGFyZVxuICAgKiBzY29wZWQgcmVzb3VyY2VzIChzdWJzY3JpcHRpb24sIHJlc291cmNlIGdyb3VwLCBvciByZXNvdXJjZSBsZXZlbCkuXG4gICAqIFRoZSBzY29wZSBwcm9wZXJ0eSBpcyBOT1QgaW5jbHVkZWQgaW4gdGhlIGJvZHkgYXMgaXQncyByZWFkLW9ubHkgYW5kXG4gICAqIGF1dG9tYXRpY2FsbHkgZGVyaXZlZCBmcm9tIHRoZSBwYXJlbnRJZC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIFJvbGVBc3NpZ25tZW50UHJvcHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgcm9sZURlZmluaXRpb25JZDogdHlwZWRQcm9wcy5yb2xlRGVmaW5pdGlvbklkLFxuICAgICAgICBwcmluY2lwYWxJZDogdHlwZWRQcm9wcy5wcmluY2lwYWxJZCxcbiAgICAgICAgLy8gTm90ZTogc2NvcGUgaXMgTk9UIGluY2x1ZGVkIGhlcmUgLSBpdCdzIHJlYWQtb25seSBhbmQgZGVyaXZlZCBmcm9tIHBhcmVudElkXG4gICAgICAgIHByaW5jaXBhbFR5cGU6IHR5cGVkUHJvcHMucHJpbmNpcGFsVHlwZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHR5cGVkUHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAgIGNvbmRpdGlvbjogdHlwZWRQcm9wcy5jb25kaXRpb24sXG4gICAgICAgIGNvbmRpdGlvblZlcnNpb246IHR5cGVkUHJvcHMuY29uZGl0aW9uVmVyc2lvbixcbiAgICAgICAgZGVsZWdhdGVkTWFuYWdlZElkZW50aXR5UmVzb3VyY2VJZDpcbiAgICAgICAgICB0eXBlZFByb3BzLmRlbGVnYXRlZE1hbmFnZWRJZGVudGl0eVJlc291cmNlSWQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHRoZSBuYW1lIHJlc29sdXRpb24gdG8gZ2VuZXJhdGUgZGV0ZXJtaW5pc3RpYyBHVUlEcyBmb3Igcm9sZSBhc3NpZ25tZW50c1xuICAgKlxuICAgKiBSb2xlIGFzc2lnbm1lbnRzIHJlcXVpcmUgR1VJRCBmb3JtYXQgSURzLiBUaGlzIGltcGxlbWVudGF0aW9uIGdlbmVyYXRlcyBhIGRldGVybWluaXN0aWNcbiAgICogVVVJRCBiYXNlZCBvbiB0aGUgcm9sZSBhc3NpZ25tZW50J3Mga2V5IHByb3BlcnRpZXMgdG8gZW5zdXJlOlxuICAgKiAtIFNhbWUgR1VJRCBpcyBnZW5lcmF0ZWQgb24gcmUtZGVwbG95bWVudHMgd2l0aCBzYW1lIHBhcmFtZXRlcnNcbiAgICogLSBJZGVtcG90ZW50IGRlcGxveW1lbnRzIChubyBkdXBsaWNhdGUgcm9sZSBhc3NpZ25tZW50cylcbiAgICogLSBDb25zaXN0ZW50IGJlaGF2aW9yIGFjcm9zcyBkZXBsb3ltZW50IHJ1bnNcbiAgICovXG4gIHByb3RlY3RlZCByZXNvbHZlTmFtZShwcm9wczogQXphcGlSZXNvdXJjZVByb3BzKTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgUm9sZUFzc2lnbm1lbnRQcm9wcztcblxuICAgIC8vIENyZWF0ZSBhIGRldGVybWluaXN0aWMgaGFzaCBmcm9tIGtleSByb2xlIGFzc2lnbm1lbnQgcHJvcGVydGllc1xuICAgIGNvbnN0IGhhc2hJbnB1dCA9IFtcbiAgICAgIHR5cGVkUHJvcHMuc2NvcGUsXG4gICAgICB0eXBlZFByb3BzLnJvbGVEZWZpbml0aW9uSWQsXG4gICAgICB0eXBlZFByb3BzLnByaW5jaXBhbElkLFxuICAgIF0uam9pbihcInxcIik7XG5cbiAgICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaGFzaElucHV0KS5kaWdlc3QoXCJoZXhcIik7XG5cbiAgICAvLyBDb252ZXJ0IGhhc2ggdG8gVVVJRCBmb3JtYXQgKDgtNC00LTQtMTIpXG4gICAgcmV0dXJuIFtcbiAgICAgIGhhc2guc3Vic3RyaW5nKDAsIDgpLFxuICAgICAgaGFzaC5zdWJzdHJpbmcoOCwgMTIpLFxuICAgICAgaGFzaC5zdWJzdHJpbmcoMTIsIDE2KSxcbiAgICAgIGhhc2guc3Vic3RyaW5nKDE2LCAyMCksXG4gICAgICBoYXNoLnN1YnN0cmluZygyMCwgMzIpLFxuICAgIF0uam9pbihcIi1cIik7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHBhcmVudCBJRCByZXNvbHV0aW9uIHRvIHVzZSB0aGUgc2NvcGUgZnJvbSBwcm9wc1xuICAgKiBSb2xlIGFzc2lnbm1lbnRzIGFyZSBzY29wZWQgcmVzb3VyY2VzIHdoZXJlIHRoZSBzY29wZSBJUyB0aGUgcGFyZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBSb2xlQXNzaWdubWVudFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLnNjb3BlO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFVCTElDIE1FVEhPRFMgRk9SIFJPTEUgQVNTSUdOTUVOVCBPUEVSQVRJT05TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnVsbCByZXNvdXJjZSBpZGVudGlmaWVyIGZvciB1c2UgaW4gb3RoZXIgQXp1cmUgcmVzb3VyY2VzXG4gICAqIEFsaWFzIGZvciB0aGUgaWQgcHJvcGVydHlcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2VJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcm9sZSBkZWZpbml0aW9uIElEIHRoaXMgYXNzaWdubWVudCByZWZlcmVuY2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvbGVEZWZpbml0aW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yb2xlRGVmaW5pdGlvbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJpbmNpcGFsIElEIHRoYXQgd2FzIGdyYW50ZWQgdGhpcyByb2xlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByaW5jaXBhbElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucHJpbmNpcGFsSWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzY29wZSBvZiB0aGlzIHJvbGUgYXNzaWdubWVudFxuICAgKi9cbiAgcHVibGljIGdldCBhc3NpZ25tZW50U2NvcGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zY29wZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByaW5jaXBhbCB0eXBlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByaW5jaXBhbFR5cGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmluY2lwYWxUeXBlO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJJVkFURSBIRUxQRVIgTUVUSE9EU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGlnbm9yZSBjaGFuZ2VzIGxpZmVjeWNsZSBydWxlcyBpZiBzcGVjaWZpZWQgaW4gcHJvcHNcbiAgICogQWx3YXlzIGluY2x1ZGVzIGJvZHkucHJvcGVydGllcy5yb2xlRGVmaW5pdGlvbklkIHRvIGhhbmRsZSBBenVyZSBBUEkgZm9ybWF0IG5vcm1hbGl6YXRpb25cbiAgICovXG4gIHByaXZhdGUgX2FwcGx5SWdub3JlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAvLyBBbHdheXMgaWdub3JlIHJvbGVEZWZpbml0aW9uSWQgZm9ybWF0IGNoYW5nZXMgZHVlIHRvIEF6dXJlIEFQSSBub3JtYWxpemF0aW9uXG4gICAgLy8gQXp1cmUgcmV0dXJucyBzdWJzY3JpcHRpb24tcXVhbGlmaWVkIGZvcm1hdCBidXQgYWNjZXB0cyBub24tcXVhbGlmaWVkIGZvcm1hdFxuICAgIGNvbnN0IGlnbm9yZUNoYW5nZXMgPSBbXG4gICAgICBcImJvZHkucHJvcGVydGllcy5yb2xlRGVmaW5pdGlvbklkXCIsXG4gICAgICAuLi4odGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzIHx8IFtdKSxcbiAgICBdO1xuXG4gICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5hZGRPdmVycmlkZShcImxpZmVjeWNsZVwiLCB7XG4gICAgICBpZ25vcmVfY2hhbmdlczogaWdub3JlQ2hhbmdlcyxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration test for Azure Role Assignment
|
|
3
|
+
*
|
|
4
|
+
* This test demonstrates basic usage of the RoleAssignment construct
|
|
5
|
+
* and validates deployment, idempotency, and cleanup.
|
|
6
|
+
*
|
|
7
|
+
* The test assigns built-in Reader role to a test principal
|
|
8
|
+
* at subscription scope.
|
|
9
|
+
*
|
|
10
|
+
* Run with: npm run integration:nostream
|
|
11
|
+
*/
|
|
12
|
+
import "cdktf/lib/testing/adapters/jest";
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Integration test for Azure Role Assignment
|
|
4
|
+
*
|
|
5
|
+
* This test demonstrates basic usage of the RoleAssignment construct
|
|
6
|
+
* and validates deployment, idempotency, and cleanup.
|
|
7
|
+
*
|
|
8
|
+
* The test assigns built-in Reader role to a test principal
|
|
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_assignment_1 = require("../lib/role-assignment");
|
|
21
|
+
// Generate unique test run metadata for this test suite
|
|
22
|
+
const testMetadata = new metadata_1.TestRunMetadata("role-assignment-integration", {
|
|
23
|
+
maxAgeHours: 4,
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* Example stack demonstrating Role Assignment usage
|
|
27
|
+
*/
|
|
28
|
+
class RoleAssignmentExampleStack 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
|
+
// Get test principal ID from environment (required for integration tests)
|
|
53
|
+
// This should be the Object ID of a user, group, or service principal
|
|
54
|
+
const principalId = process.env.ARM_TEST_PRINCIPAL_ID ||
|
|
55
|
+
"00000000-0000-0000-0000-000000000001";
|
|
56
|
+
// Built-in Azure role definition IDs
|
|
57
|
+
const readerRoleId = "/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7";
|
|
58
|
+
const contributorRoleId = "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c";
|
|
59
|
+
// Example 1: Assign Reader role at subscription scope
|
|
60
|
+
// Note: name is not needed - Azure generates a deterministic GUID automatically
|
|
61
|
+
new role_assignment_1.RoleAssignment(this, "reader-assignment", {
|
|
62
|
+
roleDefinitionId: readerRoleId,
|
|
63
|
+
principalId: principalId,
|
|
64
|
+
scope: subscriptionScope,
|
|
65
|
+
principalType: "ServicePrincipal",
|
|
66
|
+
description: "Reader role assignment for integration testing",
|
|
67
|
+
tags: {
|
|
68
|
+
...this.systemTags(),
|
|
69
|
+
example: "basic",
|
|
70
|
+
role: "reader",
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
// Example 2: Assign Contributor role at subscription scope with description
|
|
74
|
+
// Note: name is not needed - Azure generates a deterministic GUID automatically
|
|
75
|
+
new role_assignment_1.RoleAssignment(this, "contributor-assignment", {
|
|
76
|
+
roleDefinitionId: contributorRoleId,
|
|
77
|
+
principalId: principalId,
|
|
78
|
+
scope: subscriptionScope,
|
|
79
|
+
principalType: "ServicePrincipal",
|
|
80
|
+
description: "Contributor role assignment for integration testing - allows resource management but not role assignments",
|
|
81
|
+
tags: {
|
|
82
|
+
...this.systemTags(),
|
|
83
|
+
example: "advanced",
|
|
84
|
+
role: "contributor",
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
describe("Role Assignment Integration Test", () => {
|
|
90
|
+
it("should deploy, validate idempotency, and cleanup role assignment resources", () => {
|
|
91
|
+
const app = cdktf_1.Testing.app();
|
|
92
|
+
const stack = new RoleAssignmentExampleStack(app, "test-role-assignment");
|
|
93
|
+
const synthesized = cdktf_1.Testing.fullSynth(stack);
|
|
94
|
+
// This will:
|
|
95
|
+
// 1. Run terraform apply to deploy resources (role assignments)
|
|
96
|
+
// 2. Run terraform plan to check idempotency (no changes expected)
|
|
97
|
+
// 3. Run terraform destroy to cleanup resources
|
|
98
|
+
(0, testing_1.TerraformApplyCheckAndDestroy)(synthesized, { verifyCleanup: true });
|
|
99
|
+
}, 600000); // 10 minute timeout for deployment and cleanup
|
|
100
|
+
});
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1hc3NpZ25tZW50LmludGVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXJvbGVhc3NpZ25tZW50L3Rlc3Qvcm9sZS1hc3NpZ25tZW50LmludGVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7OztHQVVHOztBQUVILGlDQUFnQztBQUVoQywyQ0FBeUM7QUFDekMsaURBQXlDO0FBQ3pDLGtGQUFvRjtBQUNwRiwyQ0FBNkU7QUFDN0UseURBQTZEO0FBQzdELDREQUF3RDtBQUV4RCx3REFBd0Q7QUFDeEQsTUFBTSxZQUFZLEdBQUcsSUFBSSwwQkFBZSxDQUFDLDZCQUE2QixFQUFFO0lBQ3RFLFdBQVcsRUFBRSxDQUFDO0NBQ2YsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDSCxNQUFNLDBCQUEyQixTQUFRLHVCQUFhO0lBQ3BELFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsY0FBYyxFQUFFO2dCQUNkLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVztnQkFDckMsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXO2dCQUNyQyxhQUFhLEVBQUUsWUFBWSxDQUFDLGFBQWE7YUFDMUM7U0FDRixDQUFDLENBQUM7UUFFSCwyQkFBMkI7UUFDM0IsSUFBSSx3QkFBYSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFckMsNkVBQTZFO1FBQzdFLElBQUksY0FBc0IsQ0FBQztRQUMzQixJQUFJLENBQUM7WUFDSCxjQUFjO2dCQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CO29CQUMvQixJQUFBLHdCQUFRLEVBQUMsbUNBQW1DLEVBQUU7d0JBQzVDLFFBQVEsRUFBRSxPQUFPO3FCQUNsQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUlBQXVJLENBQ3hJLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxpQkFBaUIsR0FBRyxrQkFBa0IsY0FBYyxFQUFFLENBQUM7UUFFN0QsMEVBQTBFO1FBQzFFLHNFQUFzRTtRQUN0RSxNQUFNLFdBQVcsR0FDZixPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQjtZQUNqQyxzQ0FBc0MsQ0FBQztRQUV6QyxxQ0FBcUM7UUFDckMsTUFBTSxZQUFZLEdBQ2hCLHlGQUF5RixDQUFDO1FBQzVGLE1BQU0saUJBQWlCLEdBQ3JCLHlGQUF5RixDQUFDO1FBRTVGLHNEQUFzRDtRQUN0RCxnRkFBZ0Y7UUFDaEYsSUFBSSxnQ0FBYyxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUM1QyxnQkFBZ0IsRUFBRSxZQUFZO1lBQzlCLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsYUFBYSxFQUFFLGtCQUFrQjtZQUNqQyxXQUFXLEVBQUUsZ0RBQWdEO1lBQzdELElBQUksRUFBRTtnQkFDSixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BCLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixJQUFJLEVBQUUsUUFBUTthQUNmO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsNEVBQTRFO1FBQzVFLGdGQUFnRjtRQUNoRixJQUFJLGdDQUFjLENBQUMsSUFBSSxFQUFFLHdCQUF3QixFQUFFO1lBQ2pELGdCQUFnQixFQUFFLGlCQUFpQjtZQUNuQyxXQUFXLEVBQUUsV0FBVztZQUN4QixLQUFLLEVBQUUsaUJBQWlCO1lBQ3hCLGFBQWEsRUFBRSxrQkFBa0I7WUFDakMsV0FBVyxFQUNULDJHQUEyRztZQUM3RyxJQUFJLEVBQUU7Z0JBQ0osR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNwQixPQUFPLEVBQUUsVUFBVTtnQkFDbkIsSUFBSSxFQUFFLGFBQWE7YUFDcEI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxRQUFRLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO0lBQ2hELEVBQUUsQ0FBQyw0RUFBNEUsRUFBRSxHQUFHLEVBQUU7UUFDcEYsTUFBTSxHQUFHLEdBQUcsZUFBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksMEJBQTBCLENBQUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDMUUsTUFBTSxXQUFXLEdBQUcsZUFBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QyxhQUFhO1FBQ2IsZ0VBQWdFO1FBQ2hFLG1FQUFtRTtRQUNuRSxnREFBZ0Q7UUFDaEQsSUFBQSx1Q0FBNkIsRUFBQyxXQUFXLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQywrQ0FBK0M7QUFDN0QsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVncmF0aW9uIHRlc3QgZm9yIEF6dXJlIFJvbGUgQXNzaWdubWVudFxuICpcbiAqIFRoaXMgdGVzdCBkZW1vbnN0cmF0ZXMgYmFzaWMgdXNhZ2Ugb2YgdGhlIFJvbGVBc3NpZ25tZW50IGNvbnN0cnVjdFxuICogYW5kIHZhbGlkYXRlcyBkZXBsb3ltZW50LCBpZGVtcG90ZW5jeSwgYW5kIGNsZWFudXAuXG4gKlxuICogVGhlIHRlc3QgYXNzaWducyBidWlsdC1pbiBSZWFkZXIgcm9sZSB0byBhIHRlc3QgcHJpbmNpcGFsXG4gKiBhdCBzdWJzY3JpcHRpb24gc2NvcGUuXG4gKlxuICogUnVuIHdpdGg6IG5wbSBydW4gaW50ZWdyYXRpb246bm9zdHJlYW1cbiAqL1xuXG5pbXBvcnQgeyBUZXN0aW5nIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IFwiY2RrdGYvbGliL3Rlc3RpbmcvYWRhcHRlcnMvamVzdFwiO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgQXphcGlQcm92aWRlciB9IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi9hemFwaS9wcm92aWRlcnMtYXphcGkvcHJvdmlkZXJcIjtcbmltcG9ydCB7IEJhc2VUZXN0U3RhY2ssIFRlcnJhZm9ybUFwcGx5Q2hlY2tBbmREZXN0cm95IH0gZnJvbSBcIi4uLy4uL3Rlc3RpbmdcIjtcbmltcG9ydCB7IFRlc3RSdW5NZXRhZGF0YSB9IGZyb20gXCIuLi8uLi90ZXN0aW5nL2xpYi9tZXRhZGF0YVwiO1xuaW1wb3J0IHsgUm9sZUFzc2lnbm1lbnQgfSBmcm9tIFwiLi4vbGliL3JvbGUtYXNzaWdubWVudFwiO1xuXG4vLyBHZW5lcmF0ZSB1bmlxdWUgdGVzdCBydW4gbWV0YWRhdGEgZm9yIHRoaXMgdGVzdCBzdWl0ZVxuY29uc3QgdGVzdE1ldGFkYXRhID0gbmV3IFRlc3RSdW5NZXRhZGF0YShcInJvbGUtYXNzaWdubWVudC1pbnRlZ3JhdGlvblwiLCB7XG4gIG1heEFnZUhvdXJzOiA0LFxufSk7XG5cbi8qKlxuICogRXhhbXBsZSBzdGFjayBkZW1vbnN0cmF0aW5nIFJvbGUgQXNzaWdubWVudCB1c2FnZVxuICovXG5jbGFzcyBSb2xlQXNzaWdubWVudEV4YW1wbGVTdGFjayBleHRlbmRzIEJhc2VUZXN0U3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICB0ZXN0UnVuT3B0aW9uczoge1xuICAgICAgICBtYXhBZ2VIb3VyczogdGVzdE1ldGFkYXRhLm1heEFnZUhvdXJzLFxuICAgICAgICBhdXRvQ2xlYW51cDogdGVzdE1ldGFkYXRhLmF1dG9DbGVhbnVwLFxuICAgICAgICBjbGVhbnVwUG9saWN5OiB0ZXN0TWV0YWRhdGEuY2xlYW51cFBvbGljeSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBDb25maWd1cmUgQVpBUEkgcHJvdmlkZXJcbiAgICBuZXcgQXphcGlQcm92aWRlcih0aGlzLCBcImF6YXBpXCIsIHt9KTtcblxuICAgIC8vIEdldCB0aGUgc3Vic2NyaXB0aW9uIElEIGR5bmFtaWNhbGx5IGZyb20gQXp1cmUgQ0xJIG9yIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAgbGV0IHN1YnNjcmlwdGlvbklkOiBzdHJpbmc7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmlwdGlvbklkID1cbiAgICAgICAgcHJvY2Vzcy5lbnYuQVJNX1NVQlNDUklQVElPTl9JRCB8fFxuICAgICAgICBleGVjU3luYyhcImF6IGFjY291bnQgc2hvdyAtLXF1ZXJ5IGlkIC1vIHRzdlwiLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgfSkudHJpbSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGdldCBBenVyZSBzdWJzY3JpcHRpb24gSUQuIFBsZWFzZSBlbnN1cmUgeW91IGFyZSBsb2dnZWQgaW4gd2l0aCAnYXogbG9naW4nIG9yIHNldCBBUk1fU1VCU0NSSVBUSU9OX0lEIGVudmlyb25tZW50IHZhcmlhYmxlLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uU2NvcGUgPSBgL3N1YnNjcmlwdGlvbnMvJHtzdWJzY3JpcHRpb25JZH1gO1xuXG4gICAgLy8gR2V0IHRlc3QgcHJpbmNpcGFsIElEIGZyb20gZW52aXJvbm1lbnQgKHJlcXVpcmVkIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cylcbiAgICAvLyBUaGlzIHNob3VsZCBiZSB0aGUgT2JqZWN0IElEIG9mIGEgdXNlciwgZ3JvdXAsIG9yIHNlcnZpY2UgcHJpbmNpcGFsXG4gICAgY29uc3QgcHJpbmNpcGFsSWQgPVxuICAgICAgcHJvY2Vzcy5lbnYuQVJNX1RFU1RfUFJJTkNJUEFMX0lEIHx8XG4gICAgICBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMVwiO1xuXG4gICAgLy8gQnVpbHQtaW4gQXp1cmUgcm9sZSBkZWZpbml0aW9uIElEc1xuICAgIGNvbnN0IHJlYWRlclJvbGVJZCA9XG4gICAgICBcIi9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcm9sZURlZmluaXRpb25zL2FjZGQ3MmE3LTMzODUtNDhlZi1iZDQyLWY2MDZmYmE4MWFlN1wiO1xuICAgIGNvbnN0IGNvbnRyaWJ1dG9yUm9sZUlkID1cbiAgICAgIFwiL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9yb2xlRGVmaW5pdGlvbnMvYjI0OTg4YWMtNjE4MC00MmEwLWFiODgtMjBmNzM4MmRkMjRjXCI7XG5cbiAgICAvLyBFeGFtcGxlIDE6IEFzc2lnbiBSZWFkZXIgcm9sZSBhdCBzdWJzY3JpcHRpb24gc2NvcGVcbiAgICAvLyBOb3RlOiBuYW1lIGlzIG5vdCBuZWVkZWQgLSBBenVyZSBnZW5lcmF0ZXMgYSBkZXRlcm1pbmlzdGljIEdVSUQgYXV0b21hdGljYWxseVxuICAgIG5ldyBSb2xlQXNzaWdubWVudCh0aGlzLCBcInJlYWRlci1hc3NpZ25tZW50XCIsIHtcbiAgICAgIHJvbGVEZWZpbml0aW9uSWQ6IHJlYWRlclJvbGVJZCxcbiAgICAgIHByaW5jaXBhbElkOiBwcmluY2lwYWxJZCxcbiAgICAgIHNjb3BlOiBzdWJzY3JpcHRpb25TY29wZSxcbiAgICAgIHByaW5jaXBhbFR5cGU6IFwiU2VydmljZVByaW5jaXBhbFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiUmVhZGVyIHJvbGUgYXNzaWdubWVudCBmb3IgaW50ZWdyYXRpb24gdGVzdGluZ1wiLFxuICAgICAgdGFnczoge1xuICAgICAgICAuLi50aGlzLnN5c3RlbVRhZ3MoKSxcbiAgICAgICAgZXhhbXBsZTogXCJiYXNpY1wiLFxuICAgICAgICByb2xlOiBcInJlYWRlclwiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEV4YW1wbGUgMjogQXNzaWduIENvbnRyaWJ1dG9yIHJvbGUgYXQgc3Vic2NyaXB0aW9uIHNjb3BlIHdpdGggZGVzY3JpcHRpb25cbiAgICAvLyBOb3RlOiBuYW1lIGlzIG5vdCBuZWVkZWQgLSBBenVyZSBnZW5lcmF0ZXMgYSBkZXRlcm1pbmlzdGljIEdVSUQgYXV0b21hdGljYWxseVxuICAgIG5ldyBSb2xlQXNzaWdubWVudCh0aGlzLCBcImNvbnRyaWJ1dG9yLWFzc2lnbm1lbnRcIiwge1xuICAgICAgcm9sZURlZmluaXRpb25JZDogY29udHJpYnV0b3JSb2xlSWQsXG4gICAgICBwcmluY2lwYWxJZDogcHJpbmNpcGFsSWQsXG4gICAgICBzY29wZTogc3Vic2NyaXB0aW9uU2NvcGUsXG4gICAgICBwcmluY2lwYWxUeXBlOiBcIlNlcnZpY2VQcmluY2lwYWxcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkNvbnRyaWJ1dG9yIHJvbGUgYXNzaWdubWVudCBmb3IgaW50ZWdyYXRpb24gdGVzdGluZyAtIGFsbG93cyByZXNvdXJjZSBtYW5hZ2VtZW50IGJ1dCBub3Qgcm9sZSBhc3NpZ25tZW50c1wiLFxuICAgICAgdGFnczoge1xuICAgICAgICAuLi50aGlzLnN5c3RlbVRhZ3MoKSxcbiAgICAgICAgZXhhbXBsZTogXCJhZHZhbmNlZFwiLFxuICAgICAgICByb2xlOiBcImNvbnRyaWJ1dG9yXCIsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmRlc2NyaWJlKFwiUm9sZSBBc3NpZ25tZW50IEludGVncmF0aW9uIFRlc3RcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCBkZXBsb3ksIHZhbGlkYXRlIGlkZW1wb3RlbmN5LCBhbmQgY2xlYW51cCByb2xlIGFzc2lnbm1lbnQgcmVzb3VyY2VzXCIsICgpID0+IHtcbiAgICBjb25zdCBhcHAgPSBUZXN0aW5nLmFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFJvbGVBc3NpZ25tZW50RXhhbXBsZVN0YWNrKGFwcCwgXCJ0ZXN0LXJvbGUtYXNzaWdubWVudFwiKTtcbiAgICBjb25zdCBzeW50aGVzaXplZCA9IFRlc3RpbmcuZnVsbFN5bnRoKHN0YWNrKTtcblxuICAgIC8vIFRoaXMgd2lsbDpcbiAgICAvLyAxLiBSdW4gdGVycmFmb3JtIGFwcGx5IHRvIGRlcGxveSByZXNvdXJjZXMgKHJvbGUgYXNzaWdubWVudHMpXG4gICAgLy8gMi4gUnVuIHRlcnJhZm9ybSBwbGFuIHRvIGNoZWNrIGlkZW1wb3RlbmN5IChubyBjaGFuZ2VzIGV4cGVjdGVkKVxuICAgIC8vIDMuIFJ1biB0ZXJyYWZvcm0gZGVzdHJveSB0byBjbGVhbnVwIHJlc291cmNlc1xuICAgIFRlcnJhZm9ybUFwcGx5Q2hlY2tBbmREZXN0cm95KHN5bnRoZXNpemVkLCB7IHZlcmlmeUNsZWFudXA6IHRydWUgfSk7XG4gIH0sIDYwMDAwMCk7IC8vIDEwIG1pbnV0ZSB0aW1lb3V0IGZvciBkZXBsb3ltZW50IGFuZCBjbGVhbnVwXG59KTtcbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive tests for the unified RoleAssignment implementation
|
|
3
|
+
*
|
|
4
|
+
* This test suite validates the unified RoleAssignment class that uses
|
|
5
|
+
* the VersionedAzapiResource framework. Tests cover automatic version resolution,
|
|
6
|
+
* explicit version pinning, schema validation, property transformation, and
|
|
7
|
+
* role assignment-specific functionality.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|