@microsoft/terraform-cdk-constructs 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/.jsii +54846 -26661
  2. package/API.md +72091 -23784
  3. package/lib/azure-actiongroup/index.d.ts +0 -10
  4. package/lib/azure-actiongroup/index.js +1 -11
  5. package/lib/azure-actiongroup/lib/action-group.d.ts +0 -10
  6. package/lib/azure-actiongroup/lib/action-group.js +6 -32
  7. package/lib/azure-actiongroup/lib/index.d.ts +1 -4
  8. package/lib/azure-actiongroup/lib/index.js +2 -5
  9. package/lib/azure-activitylogalert/index.d.ts +0 -10
  10. package/lib/azure-activitylogalert/index.js +1 -11
  11. package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +0 -10
  12. package/lib/azure-activitylogalert/lib/activity-log-alert.js +6 -32
  13. package/lib/azure-activitylogalert/lib/index.d.ts +1 -4
  14. package/lib/azure-activitylogalert/lib/index.js +2 -5
  15. package/lib/azure-aks/index.d.ts +0 -8
  16. package/lib/azure-aks/index.js +1 -11
  17. package/lib/azure-aks/lib/aks-cluster.d.ts +4 -13
  18. package/lib/azure-aks/lib/aks-cluster.js +13 -36
  19. package/lib/azure-aks/lib/index.d.ts +1 -10
  20. package/lib/azure-aks/lib/index.js +2 -21
  21. package/lib/azure-diagnosticsettings/index.d.ts +0 -6
  22. package/lib/azure-diagnosticsettings/index.js +1 -7
  23. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +0 -10
  24. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +6 -32
  25. package/lib/azure-diagnosticsettings/lib/index.d.ts +1 -7
  26. package/lib/azure-diagnosticsettings/lib/index.js +2 -8
  27. package/lib/azure-dnsforwardingruleset/index.d.ts +1 -0
  28. package/lib/azure-dnsforwardingruleset/index.js +18 -0
  29. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.d.ts +24 -0
  30. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.js +206 -0
  31. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.d.ts +174 -0
  32. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +214 -0
  33. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.d.ts +24 -0
  34. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.js +242 -0
  35. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.d.ts +193 -0
  36. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +193 -0
  37. package/lib/azure-dnsforwardingruleset/lib/index.d.ts +6 -0
  38. package/lib/azure-dnsforwardingruleset/lib/index.js +23 -0
  39. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.d.ts +24 -0
  40. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.js +199 -0
  41. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.d.ts +160 -0
  42. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +178 -0
  43. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.d.ts +9 -0
  44. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.js +133 -0
  45. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.d.ts +9 -0
  46. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.js +350 -0
  47. package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.d.ts +9 -0
  48. package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.js +397 -0
  49. package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.d.ts +9 -0
  50. package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.js +285 -0
  51. package/lib/azure-dnsresolver/index.d.ts +1 -0
  52. package/lib/azure-dnsresolver/index.js +18 -0
  53. package/lib/azure-dnsresolver/lib/dns-resolver-schemas.d.ts +24 -0
  54. package/lib/azure-dnsresolver/lib/dns-resolver-schemas.js +218 -0
  55. package/lib/azure-dnsresolver/lib/dns-resolver.d.ts +170 -0
  56. package/lib/azure-dnsresolver/lib/dns-resolver.js +236 -0
  57. package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.d.ts +24 -0
  58. package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.js +261 -0
  59. package/lib/azure-dnsresolver/lib/inbound-endpoint.d.ts +189 -0
  60. package/lib/azure-dnsresolver/lib/inbound-endpoint.js +243 -0
  61. package/lib/azure-dnsresolver/lib/index.d.ts +6 -0
  62. package/lib/azure-dnsresolver/lib/index.js +23 -0
  63. package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.d.ts +24 -0
  64. package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.js +231 -0
  65. package/lib/azure-dnsresolver/lib/outbound-endpoint.d.ts +175 -0
  66. package/lib/azure-dnsresolver/lib/outbound-endpoint.js +234 -0
  67. package/lib/azure-dnsresolver/test/dns-resolver.integ.d.ts +14 -0
  68. package/lib/azure-dnsresolver/test/dns-resolver.integ.js +117 -0
  69. package/lib/azure-dnsresolver/test/dns-resolver.spec.d.ts +9 -0
  70. package/lib/azure-dnsresolver/test/dns-resolver.spec.js +353 -0
  71. package/lib/azure-dnsresolver/test/inbound-endpoint.integ.d.ts +9 -0
  72. package/lib/azure-dnsresolver/test/inbound-endpoint.integ.js +151 -0
  73. package/lib/azure-dnsresolver/test/inbound-endpoint.spec.d.ts +9 -0
  74. package/lib/azure-dnsresolver/test/inbound-endpoint.spec.js +441 -0
  75. package/lib/azure-dnsresolver/test/outbound-endpoint.integ.d.ts +9 -0
  76. package/lib/azure-dnsresolver/test/outbound-endpoint.integ.js +149 -0
  77. package/lib/azure-dnsresolver/test/outbound-endpoint.spec.d.ts +9 -0
  78. package/lib/azure-dnsresolver/test/outbound-endpoint.spec.js +301 -0
  79. package/lib/azure-dnszone/index.d.ts +1 -0
  80. package/lib/azure-dnszone/index.js +18 -0
  81. package/lib/azure-dnszone/lib/dns-zone-schemas.d.ts +24 -0
  82. package/lib/azure-dnszone/lib/dns-zone-schemas.js +191 -0
  83. package/lib/azure-dnszone/lib/dns-zone.d.ts +182 -0
  84. package/lib/azure-dnszone/lib/dns-zone.js +228 -0
  85. package/lib/azure-dnszone/lib/index.d.ts +2 -0
  86. package/lib/azure-dnszone/lib/index.js +19 -0
  87. package/lib/azure-dnszone/test/dns-zone.integ.d.ts +9 -0
  88. package/lib/azure-dnszone/test/dns-zone.integ.js +85 -0
  89. package/lib/azure-dnszone/test/dns-zone.spec.d.ts +9 -0
  90. package/lib/azure-dnszone/test/dns-zone.spec.js +285 -0
  91. package/lib/azure-metricalert/index.d.ts +0 -10
  92. package/lib/azure-metricalert/index.js +1 -11
  93. package/lib/azure-metricalert/lib/index.d.ts +1 -4
  94. package/lib/azure-metricalert/lib/index.js +2 -5
  95. package/lib/azure-metricalert/lib/metric-alert.d.ts +0 -10
  96. package/lib/azure-metricalert/lib/metric-alert.js +6 -32
  97. package/lib/azure-networkinterface/index.d.ts +0 -3
  98. package/lib/azure-networkinterface/index.js +1 -4
  99. package/lib/azure-networkinterface/lib/index.d.ts +1 -5
  100. package/lib/azure-networkinterface/lib/index.js +2 -5
  101. package/lib/azure-networkinterface/lib/network-interface.d.ts +4 -9
  102. package/lib/azure-networkinterface/lib/network-interface.js +14 -29
  103. package/lib/azure-networkinterface/test/network-interface.integ.js +20 -6
  104. package/lib/azure-networksecuritygroup/index.d.ts +0 -5
  105. package/lib/azure-networksecuritygroup/index.js +1 -6
  106. package/lib/azure-networksecuritygroup/lib/index.d.ts +2 -5
  107. package/lib/azure-networksecuritygroup/lib/index.js +17 -14
  108. package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +4 -13
  109. package/lib/azure-networksecuritygroup/lib/network-security-group.js +14 -36
  110. package/lib/azure-policyassignment/index.d.ts +1 -0
  111. package/lib/azure-policyassignment/index.js +18 -0
  112. package/lib/azure-policyassignment/lib/index.d.ts +2 -0
  113. package/lib/azure-policyassignment/lib/index.js +19 -0
  114. package/lib/azure-policyassignment/lib/policy-assignment-schemas.d.ts +25 -0
  115. package/lib/azure-policyassignment/lib/policy-assignment-schemas.js +260 -0
  116. package/lib/azure-policyassignment/lib/policy-assignment.d.ts +342 -0
  117. package/lib/azure-policyassignment/lib/policy-assignment.js +228 -0
  118. package/lib/azure-policyassignment/test/policy-assignment.integ.d.ts +13 -0
  119. package/lib/azure-policyassignment/test/policy-assignment.integ.js +153 -0
  120. package/lib/azure-policyassignment/test/policy-assignment.spec.d.ts +9 -0
  121. package/lib/azure-policyassignment/test/policy-assignment.spec.js +651 -0
  122. package/lib/azure-policydefinition/index.d.ts +1 -0
  123. package/lib/azure-policydefinition/index.js +18 -0
  124. package/lib/azure-policydefinition/lib/index.d.ts +2 -0
  125. package/lib/azure-policydefinition/lib/index.js +19 -0
  126. package/lib/azure-policydefinition/lib/policy-definition-schemas.d.ts +25 -0
  127. package/lib/azure-policydefinition/lib/policy-definition-schemas.js +210 -0
  128. package/lib/azure-policydefinition/lib/policy-definition.d.ts +260 -0
  129. package/lib/azure-policydefinition/lib/policy-definition.js +199 -0
  130. package/lib/azure-policydefinition/test/policy-definition.integ.d.ts +9 -0
  131. package/lib/azure-policydefinition/test/policy-definition.integ.js +137 -0
  132. package/lib/azure-policydefinition/test/policy-definition.spec.d.ts +9 -0
  133. package/lib/azure-policydefinition/test/policy-definition.spec.js +596 -0
  134. package/lib/azure-privatednszone/index.d.ts +1 -0
  135. package/lib/azure-privatednszone/index.js +18 -0
  136. package/lib/azure-privatednszone/lib/index.d.ts +2 -0
  137. package/lib/azure-privatednszone/lib/index.js +19 -0
  138. package/lib/azure-privatednszone/lib/private-dns-zone-schemas.d.ts +24 -0
  139. package/lib/azure-privatednszone/lib/private-dns-zone-schemas.js +254 -0
  140. package/lib/azure-privatednszone/lib/private-dns-zone.d.ts +178 -0
  141. package/lib/azure-privatednszone/lib/private-dns-zone.js +272 -0
  142. package/lib/azure-privatednszone/test/private-dns-zone.integ.d.ts +9 -0
  143. package/lib/azure-privatednszone/test/private-dns-zone.integ.js +84 -0
  144. package/lib/azure-privatednszone/test/private-dns-zone.spec.d.ts +9 -0
  145. package/lib/azure-privatednszone/test/private-dns-zone.spec.js +341 -0
  146. package/lib/azure-privatednszonelink/index.d.ts +1 -0
  147. package/lib/azure-privatednszonelink/index.js +18 -0
  148. package/lib/azure-privatednszonelink/lib/index.d.ts +2 -0
  149. package/lib/azure-privatednszonelink/lib/index.js +19 -0
  150. package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.d.ts +24 -0
  151. package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.js +262 -0
  152. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.d.ts +202 -0
  153. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +250 -0
  154. package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.d.ts +9 -0
  155. package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.js +110 -0
  156. package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.d.ts +9 -0
  157. package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.js +465 -0
  158. package/lib/azure-publicipaddress/index.d.ts +0 -5
  159. package/lib/azure-publicipaddress/index.js +1 -6
  160. package/lib/azure-publicipaddress/lib/index.d.ts +2 -9
  161. package/lib/azure-publicipaddress/lib/index.js +17 -17
  162. package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +4 -13
  163. package/lib/azure-publicipaddress/lib/public-ip-address.js +14 -36
  164. package/lib/azure-resourcegroup/index.d.ts +0 -37
  165. package/lib/azure-resourcegroup/index.js +1 -39
  166. package/lib/azure-resourcegroup/lib/index.d.ts +1 -44
  167. package/lib/azure-resourcegroup/lib/index.js +2 -43
  168. package/lib/azure-resourcegroup/lib/resource-group.d.ts +9 -23
  169. package/lib/azure-resourcegroup/lib/resource-group.js +23 -56
  170. package/lib/azure-resourcegroup/test/resource-group.spec.js +13 -19
  171. package/lib/azure-roleassignment/index.d.ts +1 -0
  172. package/lib/azure-roleassignment/index.js +18 -0
  173. package/lib/azure-roleassignment/lib/index.d.ts +2 -0
  174. package/lib/azure-roleassignment/lib/index.js +19 -0
  175. package/lib/azure-roleassignment/lib/role-assignment-schemas.d.ts +25 -0
  176. package/lib/azure-roleassignment/lib/role-assignment-schemas.js +238 -0
  177. package/lib/azure-roleassignment/lib/role-assignment.d.ts +294 -0
  178. package/lib/azure-roleassignment/lib/role-assignment.js +257 -0
  179. package/lib/azure-roleassignment/test/role-assignment.integ.d.ts +12 -0
  180. package/lib/azure-roleassignment/test/role-assignment.integ.js +101 -0
  181. package/lib/azure-roleassignment/test/role-assignment.spec.d.ts +9 -0
  182. package/lib/azure-roleassignment/test/role-assignment.spec.js +633 -0
  183. package/lib/azure-roledefinition/index.d.ts +1 -0
  184. package/lib/azure-roledefinition/index.js +18 -0
  185. package/lib/azure-roledefinition/lib/index.d.ts +2 -0
  186. package/lib/azure-roledefinition/lib/index.js +19 -0
  187. package/lib/azure-roledefinition/lib/role-definition-schemas.d.ts +25 -0
  188. package/lib/azure-roledefinition/lib/role-definition-schemas.js +195 -0
  189. package/lib/azure-roledefinition/lib/role-definition.d.ts +236 -0
  190. package/lib/azure-roledefinition/lib/role-definition.js +192 -0
  191. package/lib/azure-roledefinition/test/role-definition.integ.d.ts +12 -0
  192. package/lib/azure-roledefinition/test/role-definition.integ.js +142 -0
  193. package/lib/azure-roledefinition/test/role-definition.spec.d.ts +9 -0
  194. package/lib/azure-roledefinition/test/role-definition.spec.js +946 -0
  195. package/lib/azure-storageaccount/index.d.ts +0 -19
  196. package/lib/azure-storageaccount/index.js +1 -20
  197. package/lib/azure-storageaccount/lib/index.d.ts +1 -7
  198. package/lib/azure-storageaccount/lib/index.js +2 -8
  199. package/lib/azure-storageaccount/lib/storage-account.d.ts +4 -9
  200. package/lib/azure-storageaccount/lib/storage-account.js +15 -29
  201. package/lib/azure-subnet/index.d.ts +0 -3
  202. package/lib/azure-subnet/index.js +1 -4
  203. package/lib/azure-subnet/lib/index.d.ts +1 -4
  204. package/lib/azure-subnet/lib/index.js +2 -5
  205. package/lib/azure-subnet/lib/subnet.d.ts +3 -14
  206. package/lib/azure-subnet/lib/subnet.js +28 -47
  207. package/lib/azure-subnet/test/subnet.integ.js +19 -7
  208. package/lib/azure-subnet/test/subnet.spec.js +1 -2
  209. package/lib/azure-virtualmachine/index.d.ts +0 -6
  210. package/lib/azure-virtualmachine/index.js +1 -7
  211. package/lib/azure-virtualmachine/lib/index.d.ts +1 -10
  212. package/lib/azure-virtualmachine/lib/index.js +2 -21
  213. package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +4 -13
  214. package/lib/azure-virtualmachine/lib/virtual-machine.js +15 -36
  215. package/lib/azure-virtualnetwork/index.d.ts +0 -9
  216. package/lib/azure-virtualnetwork/index.js +1 -11
  217. package/lib/azure-virtualnetwork/lib/index.d.ts +2 -9
  218. package/lib/azure-virtualnetwork/lib/index.js +17 -20
  219. package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +4 -13
  220. package/lib/azure-virtualnetwork/lib/virtual-network.js +15 -36
  221. package/lib/azure-virtualnetworkmanager/index.d.ts +1 -0
  222. package/lib/azure-virtualnetworkmanager/index.js +18 -0
  223. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.d.ts +48 -0
  224. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.js +265 -0
  225. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.d.ts +185 -0
  226. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +206 -0
  227. package/lib/azure-virtualnetworkmanager/lib/index.d.ts +14 -0
  228. package/lib/azure-virtualnetworkmanager/lib/index.js +31 -0
  229. package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.d.ts +32 -0
  230. package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.js +189 -0
  231. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.d.ts +32 -0
  232. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.js +201 -0
  233. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.d.ts +135 -0
  234. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +163 -0
  235. package/lib/azure-virtualnetworkmanager/lib/network-group.d.ts +139 -0
  236. package/lib/azure-virtualnetworkmanager/lib/network-group.js +158 -0
  237. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.d.ts +32 -0
  238. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.js +182 -0
  239. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.d.ts +144 -0
  240. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +164 -0
  241. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.d.ts +38 -0
  242. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.js +206 -0
  243. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.d.ts +142 -0
  244. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +162 -0
  245. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.d.ts +39 -0
  246. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.js +359 -0
  247. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.d.ts +221 -0
  248. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +204 -0
  249. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.d.ts +32 -0
  250. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.js +236 -0
  251. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.d.ts +337 -0
  252. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +283 -0
  253. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.d.ts +25 -0
  254. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.js +402 -0
  255. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.d.ts +9 -0
  256. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.js +1652 -0
  257. package/lib/azure-vmss/index.d.ts +0 -5
  258. package/lib/azure-vmss/index.js +1 -6
  259. package/lib/azure-vmss/lib/index.d.ts +0 -7
  260. package/lib/azure-vmss/lib/index.js +1 -21
  261. package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +5 -13
  262. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +29 -53
  263. package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.d.ts +10 -0
  264. package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.js +218 -0
  265. package/lib/core-azure/lib/azapi/azapi-resource.d.ts +178 -26
  266. package/lib/core-azure/lib/azapi/azapi-resource.js +328 -90
  267. package/lib/core-azure/lib/azapi/azapi-resource.spec.js +2 -2
  268. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
  269. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
  270. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +5 -3
  271. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
  272. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
  273. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
  274. package/lib/core-azure/lib/azapi/resource-schema-validator.d.ts +118 -0
  275. package/lib/core-azure/lib/azapi/resource-schema-validator.js +236 -0
  276. package/lib/core-azure/lib/azapi/resource-version-manager.d.ts +103 -0
  277. package/lib/core-azure/lib/azapi/resource-version-manager.js +168 -0
  278. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +11 -6
  279. package/lib/core-azure/lib/index.d.ts +2 -2
  280. package/lib/core-azure/lib/index.js +5 -5
  281. package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
  282. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
  283. package/lib/index.d.ts +19 -0
  284. package/lib/index.js +21 -2
  285. package/lib/testing/index.js +2 -2
  286. package/lib/testing/lib/cleanup.d.ts +1 -0
  287. package/lib/testing/lib/cleanup.js +19 -12
  288. package/lib/testing/lib/metadata.js +19 -16
  289. package/package.json +1 -1
  290. package/scripts/cleanup-test-resources.ts +22 -4
  291. 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 {};