@microsoft/terraform-cdk-constructs 1.0.0 → 1.2.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 +60999 -15780
- package/API.md +54947 -10610
- 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 +11 -0
- package/lib/azure-actiongroup/index.js +28 -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 +312 -0
- package/lib/azure-actiongroup/lib/action-group.js +201 -0
- package/lib/azure-actiongroup/lib/index.d.ts +5 -0
- package/lib/azure-actiongroup/lib/index.js +22 -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 +11 -0
- package/lib/azure-activitylogalert/index.js +28 -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 +236 -0
- package/lib/azure-activitylogalert/lib/activity-log-alert.js +212 -0
- package/lib/azure-activitylogalert/lib/index.d.ts +5 -0
- package/lib/azure-activitylogalert/lib/index.js +22 -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 +9 -0
- package/lib/azure-aks/index.js +28 -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 +395 -0
- package/lib/azure-aks/lib/aks-cluster.js +489 -0
- package/lib/azure-aks/lib/index.d.ts +11 -0
- package/lib/azure-aks/lib/index.js +38 -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 +7 -0
- package/lib/azure-diagnosticsettings/index.js +24 -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 +193 -0
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +200 -0
- package/lib/azure-diagnosticsettings/lib/index.d.ts +8 -0
- package/lib/azure-diagnosticsettings/lib/index.js +25 -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-metricalert/index.d.ts +11 -0
- package/lib/azure-metricalert/index.js +28 -0
- package/lib/azure-metricalert/lib/index.d.ts +5 -0
- package/lib/azure-metricalert/lib/index.js +22 -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 +344 -0
- package/lib/azure-metricalert/lib/metric-alert.js +252 -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 +4 -0
- package/lib/azure-networkinterface/index.js +21 -0
- package/lib/azure-networkinterface/lib/index.d.ts +6 -0
- package/lib/azure-networkinterface/lib/index.js +22 -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 +265 -0
- package/lib/azure-networkinterface/lib/network-interface.js +228 -0
- package/lib/azure-networkinterface/test/network-interface.integ.d.ts +9 -0
- package/lib/azure-networkinterface/test/network-interface.integ.js +102 -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 +6 -0
- package/lib/azure-networksecuritygroup/index.js +23 -0
- package/lib/azure-networksecuritygroup/lib/index.d.ts +5 -0
- package/lib/azure-networksecuritygroup/lib/index.js +16 -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 +268 -0
- package/lib/azure-networksecuritygroup/lib/network-security-group.js +248 -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-publicipaddress/index.d.ts +6 -0
- package/lib/azure-publicipaddress/index.js +23 -0
- package/lib/azure-publicipaddress/lib/index.d.ts +9 -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 +256 -0
- package/lib/azure-publicipaddress/lib/public-ip-address.js +267 -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/lib/resource-group.js +1 -1
- package/lib/azure-resourcegroup/test/resource-group.integ.js +23 -11
- 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 +38 -1
- package/lib/azure-storageaccount/lib/storage-account.js +138 -2
- package/lib/azure-storageaccount/test/storage-account.integ.js +91 -12
- package/lib/azure-subnet/index.d.ts +4 -0
- package/lib/azure-subnet/index.js +21 -0
- package/lib/azure-subnet/lib/index.d.ts +5 -0
- package/lib/azure-subnet/lib/index.js +22 -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 +285 -0
- package/lib/azure-subnet/lib/subnet.js +254 -0
- package/lib/azure-subnet/test/subnet.integ.d.ts +11 -0
- package/lib/azure-subnet/test/subnet.integ.js +80 -0
- package/lib/azure-subnet/test/subnet.spec.d.ts +8 -0
- package/lib/azure-subnet/test/subnet.spec.js +396 -0
- package/lib/azure-virtualmachine/index.d.ts +7 -0
- package/lib/azure-virtualmachine/index.js +24 -0
- package/lib/azure-virtualmachine/lib/index.d.ts +11 -0
- package/lib/azure-virtualmachine/lib/index.js +38 -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 +377 -0
- package/lib/azure-virtualmachine/lib/virtual-machine.js +462 -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 +10 -0
- package/lib/azure-virtualnetwork/index.js +28 -0
- package/lib/azure-virtualnetwork/lib/index.d.ts +9 -0
- package/lib/azure-virtualnetwork/lib/index.js +22 -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 +213 -0
- package/lib/azure-virtualnetwork/lib/virtual-network.js +245 -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-vmss/index.d.ts +6 -0
- package/lib/azure-vmss/index.js +23 -0
- package/lib/azure-vmss/lib/index.d.ts +9 -0
- package/lib/azure-vmss/lib/index.js +39 -0
- package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +258 -0
- package/lib/azure-vmss/lib/virtual-machine-scale-set.js +503 -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.d.ts +95 -27
- package/lib/core-azure/lib/azapi/azapi-resource.js +95 -58
- 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 +274 -14
- 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/schema-mapper/schema-mapper.js +4 -2
- 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 +37 -0
- package/lib/index.js +40 -2
- package/lib/testing/index.d.ts +92 -2
- package/lib/testing/index.js +258 -18
- package/lib/testing/lib/cleanup.d.ts +229 -0
- package/lib/testing/lib/cleanup.js +331 -0
- package/lib/testing/lib/metadata.d.ts +151 -0
- package/lib/testing/lib/metadata.js +180 -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 +369 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Subnet = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
/**
|
|
7
|
+
* Azure Subnet implementation using AzapiResource framework
|
|
8
|
+
*
|
|
9
|
+
* This class provides a unified implementation for Azure Subnets that
|
|
10
|
+
* automatically handles version management, schema validation, and property
|
|
11
|
+
* transformation across all supported API versions.
|
|
12
|
+
*
|
|
13
|
+
* Supported API Versions:
|
|
14
|
+
* - 2024-07-01 (Active)
|
|
15
|
+
* - 2024-10-01 (Active)
|
|
16
|
+
* - 2025-01-01 (Active, Latest)
|
|
17
|
+
*
|
|
18
|
+
* Features:
|
|
19
|
+
* - Automatic latest version resolution when no version is specified
|
|
20
|
+
* - Explicit version pinning for stability requirements
|
|
21
|
+
* - Schema-driven validation and transformation
|
|
22
|
+
* - Full backward compatibility
|
|
23
|
+
* - JSII compliance for multi-language support
|
|
24
|
+
* - Child resource with proper parent ID construction
|
|
25
|
+
*/
|
|
26
|
+
const cdktf = require("cdktf");
|
|
27
|
+
const subnet_schemas_1 = require("./subnet-schemas");
|
|
28
|
+
const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
|
|
29
|
+
const api_version_manager_1 = require("../../core-azure/lib/version-manager/api-version-manager");
|
|
30
|
+
/**
|
|
31
|
+
* Azure Subnet implementation
|
|
32
|
+
*
|
|
33
|
+
* This class provides a single, version-aware implementation that replaces
|
|
34
|
+
* version-specific Subnet classes. It automatically handles version
|
|
35
|
+
* resolution, schema validation, and property transformation while maintaining
|
|
36
|
+
* full backward compatibility.
|
|
37
|
+
*
|
|
38
|
+
* **Child Resource Pattern**: Subnets are child resources of Virtual Networks.
|
|
39
|
+
* This implementation overrides the `resolveParentId()` method to properly
|
|
40
|
+
* construct the Virtual Network ID as the parent, following the enhanced base
|
|
41
|
+
* class pattern for child resources.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* // Basic usage with automatic version resolution:
|
|
45
|
+
* const subnet = new Subnet(this, "subnet", {
|
|
46
|
+
* name: "my-subnet",
|
|
47
|
+
* virtualNetworkName: "my-vnet",
|
|
48
|
+
* resourceGroupId: resourceGroup.id,
|
|
49
|
+
* addressPrefix: "10.0.1.0/24"
|
|
50
|
+
* });
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* // Usage with network security group:
|
|
54
|
+
* const subnet = new Subnet(this, "subnet", {
|
|
55
|
+
* name: "my-subnet",
|
|
56
|
+
* virtualNetworkName: "my-vnet",
|
|
57
|
+
* resourceGroupId: resourceGroup.id,
|
|
58
|
+
* addressPrefix: "10.0.1.0/24",
|
|
59
|
+
* networkSecurityGroup: { id: nsg.id }
|
|
60
|
+
* });
|
|
61
|
+
*
|
|
62
|
+
* @stability stable
|
|
63
|
+
*/
|
|
64
|
+
class Subnet extends azapi_resource_1.AzapiResource {
|
|
65
|
+
/**
|
|
66
|
+
* Ensures that Subnet schemas are registered with the ApiVersionManager
|
|
67
|
+
* This is called once during the first Subnet instantiation
|
|
68
|
+
*/
|
|
69
|
+
static ensureSchemasRegistered() {
|
|
70
|
+
if (Subnet.schemasRegistered) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const apiVersionManager = api_version_manager_1.ApiVersionManager.instance();
|
|
74
|
+
try {
|
|
75
|
+
// Register all Subnet versions
|
|
76
|
+
apiVersionManager.registerResourceType(subnet_schemas_1.SUBNET_TYPE, subnet_schemas_1.ALL_SUBNET_VERSIONS);
|
|
77
|
+
Subnet.schemasRegistered = true;
|
|
78
|
+
console.log(`Registered ${subnet_schemas_1.ALL_SUBNET_VERSIONS.length} API versions for ${subnet_schemas_1.SUBNET_TYPE}`);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.warn(`Failed to register Subnet schemas: ${error}. ` +
|
|
82
|
+
`This may indicate the schemas are already registered or there's a configuration issue.`);
|
|
83
|
+
// Don't throw here as the schemas might already be registered
|
|
84
|
+
Subnet.schemasRegistered = true;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Creates a new Azure Subnet using the AzapiResource framework
|
|
89
|
+
*
|
|
90
|
+
* The constructor automatically handles version resolution, schema registration,
|
|
91
|
+
* validation, and resource creation. It maintains full backward compatibility
|
|
92
|
+
* with existing Subnet implementations.
|
|
93
|
+
*
|
|
94
|
+
* **Parent ID Resolution**: Subnets are child resources of Virtual Networks.
|
|
95
|
+
* The resolveParentId() method is overridden to return the Virtual Network ID
|
|
96
|
+
* instead of the Resource Group ID, establishing the proper parent-child hierarchy.
|
|
97
|
+
*
|
|
98
|
+
* @param scope - The scope in which to define this construct
|
|
99
|
+
* @param id - The unique identifier for this instance
|
|
100
|
+
* @param props - Configuration properties for the Subnet
|
|
101
|
+
*/
|
|
102
|
+
constructor(scope, id, props) {
|
|
103
|
+
// Ensure schemas are registered before calling super
|
|
104
|
+
Subnet.ensureSchemasRegistered();
|
|
105
|
+
// Call the parent constructor with the original props
|
|
106
|
+
// Parent ID resolution is now handled by the overridden resolveParentId method
|
|
107
|
+
super(scope, id, props);
|
|
108
|
+
// Store the props
|
|
109
|
+
this.props = props;
|
|
110
|
+
// Extract properties from the AZAPI resource outputs using Terraform interpolation
|
|
111
|
+
this.id = `\${${this.terraformResource.fqn}.id}`;
|
|
112
|
+
// Create Terraform outputs for easy access and referencing from other resources
|
|
113
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
114
|
+
value: this.id,
|
|
115
|
+
description: "The ID of the Subnet",
|
|
116
|
+
});
|
|
117
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
118
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
119
|
+
description: "The name of the Subnet",
|
|
120
|
+
});
|
|
121
|
+
this.addressPrefixOutput = new cdktf.TerraformOutput(this, "addressPrefix", {
|
|
122
|
+
value: this.props.addressPrefix,
|
|
123
|
+
description: "The address prefix of the Subnet",
|
|
124
|
+
});
|
|
125
|
+
// Override logical IDs to match original naming convention
|
|
126
|
+
this.idOutput.overrideLogicalId("id");
|
|
127
|
+
this.nameOutput.overrideLogicalId("name");
|
|
128
|
+
this.addressPrefixOutput.overrideLogicalId("addressPrefix");
|
|
129
|
+
// Azure automatically expands service endpoint locations for high availability,
|
|
130
|
+
// adding paired regions for disaster recovery. Ignore these changes to prevent drift.
|
|
131
|
+
if (props.serviceEndpoints && props.serviceEndpoints.length > 0) {
|
|
132
|
+
this.terraformResource.addOverride("lifecycle", {
|
|
133
|
+
ignore_changes: ["body.properties.serviceEndpoints[0].locations"],
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// Apply additional ignore changes if specified
|
|
137
|
+
this._applyIgnoreChanges();
|
|
138
|
+
}
|
|
139
|
+
// =============================================================================
|
|
140
|
+
// REQUIRED ABSTRACT METHODS FROM AzapiResource
|
|
141
|
+
// =============================================================================
|
|
142
|
+
/**
|
|
143
|
+
* Gets the default API version to use when no explicit version is specified
|
|
144
|
+
* Returns the most recent stable version as the default
|
|
145
|
+
*/
|
|
146
|
+
defaultVersion() {
|
|
147
|
+
return "2024-10-01";
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Gets the Azure resource type for Subnets
|
|
151
|
+
*/
|
|
152
|
+
resourceType() {
|
|
153
|
+
return subnet_schemas_1.SUBNET_TYPE;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Gets the API schema for the resolved version
|
|
157
|
+
* Uses the framework's schema resolution to get the appropriate schema
|
|
158
|
+
*/
|
|
159
|
+
apiSchema() {
|
|
160
|
+
return this.resolveSchema();
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Creates the resource body for the Azure API call
|
|
164
|
+
* Transforms the input properties into the JSON format expected by Azure REST API
|
|
165
|
+
*/
|
|
166
|
+
createResourceBody(props) {
|
|
167
|
+
const typedProps = props;
|
|
168
|
+
return {
|
|
169
|
+
properties: {
|
|
170
|
+
addressPrefix: typedProps.addressPrefix,
|
|
171
|
+
networkSecurityGroup: typedProps.networkSecurityGroup,
|
|
172
|
+
routeTable: typedProps.routeTable,
|
|
173
|
+
serviceEndpoints: typedProps.serviceEndpoints,
|
|
174
|
+
delegations: typedProps.delegations,
|
|
175
|
+
privateEndpointNetworkPolicies: typedProps.privateEndpointNetworkPolicies || "Disabled",
|
|
176
|
+
privateLinkServiceNetworkPolicies: typedProps.privateLinkServiceNetworkPolicies || "Enabled",
|
|
177
|
+
natGateway: typedProps.natGateway,
|
|
178
|
+
ipAllocations: typedProps.ipAllocations,
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Resolves the parent ID for the Subnet resource.
|
|
184
|
+
*
|
|
185
|
+
* Subnets are child resources of Virtual Networks. This method overrides
|
|
186
|
+
* the default parent ID resolution to return the Virtual Network ID instead
|
|
187
|
+
* of the Resource Group ID.
|
|
188
|
+
*
|
|
189
|
+
* @param props - The resource properties
|
|
190
|
+
* @returns The Virtual Network ID (parent resource ID)
|
|
191
|
+
*/
|
|
192
|
+
resolveParentId(props) {
|
|
193
|
+
const typedProps = props;
|
|
194
|
+
// If virtualNetworkId is provided, use it (creates Terraform dependency)
|
|
195
|
+
// Otherwise construct it from resourceGroupId and virtualNetworkName (string concatenation)
|
|
196
|
+
return (typedProps.virtualNetworkId ||
|
|
197
|
+
`${typedProps.resourceGroupId}/providers/Microsoft.Network/virtualNetworks/${typedProps.virtualNetworkName}`);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Override createAzapiResource to explicitly prevent location from being added
|
|
201
|
+
* Subnets are child resources and inherit location from their parent VNet
|
|
202
|
+
*/
|
|
203
|
+
createAzapiResource(properties, parentId, name, _location) {
|
|
204
|
+
// Call parent implementation but pass undefined for location
|
|
205
|
+
// This prevents the base class from adding location to the config
|
|
206
|
+
return super.createAzapiResource(properties, parentId, name, undefined);
|
|
207
|
+
}
|
|
208
|
+
// =============================================================================
|
|
209
|
+
// PUBLIC METHODS FOR SUBNET OPERATIONS
|
|
210
|
+
// =============================================================================
|
|
211
|
+
/**
|
|
212
|
+
* Get the full resource identifier for use in other Azure resources
|
|
213
|
+
* Alias for the id property to match original interface
|
|
214
|
+
*/
|
|
215
|
+
get resourceId() {
|
|
216
|
+
return this.id;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get the address prefix value
|
|
220
|
+
* Returns the address prefix from the input props since Azure API doesn't return it in output
|
|
221
|
+
*/
|
|
222
|
+
get addressPrefix() {
|
|
223
|
+
return this.props.addressPrefix;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Get the parent Virtual Network ID
|
|
227
|
+
* Constructs the VNet resource ID from the subnet's parent reference
|
|
228
|
+
*/
|
|
229
|
+
get virtualNetworkId() {
|
|
230
|
+
const typedProps = this.props;
|
|
231
|
+
return `${typedProps.resourceGroupId}/providers/Microsoft.Network/virtualNetworks/${typedProps.virtualNetworkName}`;
|
|
232
|
+
}
|
|
233
|
+
// =============================================================================
|
|
234
|
+
// PRIVATE HELPER METHODS
|
|
235
|
+
// =============================================================================
|
|
236
|
+
/**
|
|
237
|
+
* Applies ignore changes lifecycle rules if specified in props
|
|
238
|
+
*/
|
|
239
|
+
_applyIgnoreChanges() {
|
|
240
|
+
if (this.props.ignoreChanges && this.props.ignoreChanges.length > 0) {
|
|
241
|
+
this.terraformResource.addOverride("lifecycle", {
|
|
242
|
+
ignore_changes: this.props.ignoreChanges,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
exports.Subnet = Subnet;
|
|
248
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
249
|
+
Subnet[_a] = { fqn: "@microsoft/terraform-cdk-constructs.Subnet", version: "1.2.0" };
|
|
250
|
+
/**
|
|
251
|
+
* Static initialization flag to ensure schemas are registered only once
|
|
252
|
+
*/
|
|
253
|
+
Subnet.schemasRegistered = false;
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXN1Ym5ldC9saWIvc3VibmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCwrQkFBK0I7QUFFL0IscURBQW9FO0FBQ3BFLDhFQUdtRDtBQUNuRCxrR0FBNkY7QUFrSzdGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFDSCxNQUFhLE1BQU8sU0FBUSw4QkFBYTtJQU12Qzs7O09BR0c7SUFDSyxNQUFNLENBQUMsdUJBQXVCO1FBQ3BDLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDN0IsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLHVDQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXZELElBQUksQ0FBQztZQUNILCtCQUErQjtZQUMvQixpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyw0QkFBVyxFQUFFLG9DQUFtQixDQUFDLENBQUM7WUFFekUsTUFBTSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUVoQyxPQUFPLENBQUMsR0FBRyxDQUNULGNBQWMsb0NBQW1CLENBQUMsTUFBTSxxQkFBcUIsNEJBQVcsRUFBRSxDQUMzRSxDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsSUFBSSxDQUNWLHNDQUFzQyxLQUFLLElBQUk7Z0JBQzdDLHdGQUF3RixDQUMzRixDQUFDO1lBQ0YsOERBQThEO1lBQzlELE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFlRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0I7UUFDMUQscURBQXFEO1FBQ3JELE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxD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V0FBVyxFQUFFO2dCQUM5QyxjQUFjLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO2FBQ3pDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQWxQSCx3QkFtUEM7OztBQWxQQzs7R0FFRztBQUNZLHdCQUFpQixHQUFHLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXp1cmUgU3VibmV0IGltcGxlbWVudGF0aW9uIHVzaW5nIEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHVuaWZpZWQgaW1wbGVtZW50YXRpb24gZm9yIEF6dXJlIFN1Ym5ldHMgdGhhdFxuICogYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gbWFuYWdlbWVudCwgc2NoZW1hIHZhbGlkYXRpb24sIGFuZCBwcm9wZXJ0eVxuICogdHJhbnNmb3JtYXRpb24gYWNyb3NzIGFsbCBzdXBwb3J0ZWQgQVBJIHZlcnNpb25zLlxuICpcbiAqIFN1cHBvcnRlZCBBUEkgVmVyc2lvbnM6XG4gKiAtIDIwMjQtMDctMDEgKEFjdGl2ZSlcbiAqIC0gMjAyNC0xMC0wMSAoQWN0aXZlKVxuICogLSAyMDI1LTAxLTAxIChBY3RpdmUsIExhdGVzdClcbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gQXV0b21hdGljIGxhdGVzdCB2ZXJzaW9uIHJlc29sdXRpb24gd2hlbiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICogLSBFeHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmcgZm9yIHN0YWJpbGl0eSByZXF1aXJlbWVudHNcbiAqIC0gU2NoZW1hLWRyaXZlbiB2YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvblxuICogLSBGdWxsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAqIC0gSlNJSSBjb21wbGlhbmNlIGZvciBtdWx0aS1sYW5ndWFnZSBzdXBwb3J0XG4gKiAtIENoaWxkIHJlc291cmNlIHdpdGggcHJvcGVyIHBhcmVudCBJRCBjb25zdHJ1Y3Rpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBBTExfU1VCTkVUX1ZFUlNJT05TLCBTVUJORVRfVFlQRSB9IGZyb20gXCIuL3N1Ym5ldC1zY2hlbWFzXCI7XG5pbXBvcnQge1xuICBBemFwaVJlc291cmNlLFxuICBBemFwaVJlc291cmNlUHJvcHMsXG59IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi9hemFwaS9hemFwaS1yZXNvdXJjZVwiO1xuaW1wb3J0IHsgQXBpVmVyc2lvbk1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2FwaS12ZXJzaW9uLW1hbmFnZXJcIjtcbmltcG9ydCB7IEFwaVNjaGVtYSB9IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi92ZXJzaW9uLW1hbmFnZXIvaW50ZXJmYWNlcy92ZXJzaW9uLWludGVyZmFjZXNcIjtcblxuLyoqXG4gKiBOZXR3b3JrIFNlY3VyaXR5IEdyb3VwIHJlZmVyZW5jZSBmb3IgU3VibmV0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3VibmV0TlNHUmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIE5ldHdvcmsgU2VjdXJpdHkgR3JvdXAgcmVzb3VyY2UgSURcbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUm91dGUgVGFibGUgcmVmZXJlbmNlIGZvciBTdWJuZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJuZXRSb3V0ZVRhYmxlUmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIFJvdXRlIFRhYmxlIHJlc291cmNlIElEXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE5BVCBHYXRld2F5IHJlZmVyZW5jZSBmb3IgU3VibmV0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3VibmV0TkFUR2F0ZXdheVJlZmVyZW5jZSB7XG4gIC8qKlxuICAgKiBOQVQgR2F0ZXdheSByZXNvdXJjZSBJRFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZXJ2aWNlIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gZm9yIFN1Ym5ldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1Ym5ldFNlcnZpY2VFbmRwb2ludCB7XG4gIC8qKlxuICAgKiBUaGUgc2VydmljZSBlbmRwb2ludCBpZGVudGlmaWVyXG4gICAqIEBleGFtcGxlIFwiTWljcm9zb2Z0LlN0b3JhZ2VcIlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBsb2NhdGlvbnMgd2hlcmUgdGhlIHNlcnZpY2UgZW5kcG9pbnQgaXMgYXZhaWxhYmxlXG4gICAqIEBleGFtcGxlIFtcImVhc3R1c1wiLCBcIndlc3R1c1wiXVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogRGVsZWdhdGlvbiBjb25maWd1cmF0aW9uIGZvciBTdWJuZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJuZXREZWxlZ2F0aW9uIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGRlbGVnYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNlcnZpY2UgbmFtZSB0byBkZWxlZ2F0ZSB0b1xuICAgKiBAZXhhbXBsZSBcIk1pY3Jvc29mdC5TcWwvbWFuYWdlZEluc3RhbmNlc1wiXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhY3Rpb25zIGFsbG93ZWQgZm9yIHRoZSBkZWxlZ2F0aW9uXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIEF6dXJlIFN1Ym5ldFxuICpcbiAqIEV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHdpdGggU3VibmV0IHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJuZXRQcm9wcyBleHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBBZGRyZXNzIHByZWZpeCBmb3IgdGhlIHN1Ym5ldCBpbiBDSURSIG5vdGF0aW9uXG4gICAqIE11c3QgYmUgd2l0aGluIHRoZSBwYXJlbnQgVk5ldCdzIGFkZHJlc3Mgc3BhY2VcbiAgICogQGV4YW1wbGUgXCIxMC4wLjEuMC8yNFwiXG4gICAqL1xuICByZWFkb25seSBhZGRyZXNzUHJlZml4OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHBhcmVudCB2aXJ0dWFsIG5ldHdvcmtcbiAgICogUmVxdWlyZWQgZm9yIGNvbnN0cnVjdGluZyB0aGUgcGFyZW50IElEXG4gICAqL1xuICByZWFkb25seSB2aXJ0dWFsTmV0d29ya05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWw6IEZ1bGwgcmVzb3VyY2UgSUQgb2YgdGhlIHBhcmVudCBWaXJ0dWFsIE5ldHdvcmtcbiAgICogV2hlbiBwcm92aWRlZCwgY3JlYXRlcyBhIHByb3BlciBUZXJyYWZvcm0gZGVwZW5kZW5jeSBvbiB0aGUgVk5ldFxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBwYXJlbnQgSUQgd2lsbCBiZSBjb25zdHJ1Y3RlZCBmcm9tIHJlc291cmNlR3JvdXBJZCBhbmQgdmlydHVhbE5ldHdvcmtOYW1lXG4gICAqL1xuICByZWFkb25seSB2aXJ0dWFsTmV0d29ya0lkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOZXR3b3JrIHNlY3VyaXR5IGdyb3VwIHJlZmVyZW5jZVxuICAgKiBPcHRpb25hbCAtIGNhbiBiZSBhdHRhY2hlZCBsYXRlclxuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29ya1NlY3VyaXR5R3JvdXA/OiBTdWJuZXROU0dSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIFJvdXRlIHRhYmxlIHJlZmVyZW5jZVxuICAgKiBPcHRpb25hbCAtIGNhbiBiZSBhdHRhY2hlZCBsYXRlclxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZT86IFN1Ym5ldFJvdXRlVGFibGVSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIFNlcnZpY2UgZW5kcG9pbnRzIGZvciB0aGUgc3VibmV0XG4gICAqIEVuYWJsZXMgcHJpdmF0ZSBhY2Nlc3MgdG8gQXp1cmUgc2VydmljZXNcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VFbmRwb2ludHM/OiBTdWJuZXRTZXJ2aWNlRW5kcG9pbnRbXTtcblxuICAvKipcbiAgICogU3VibmV0IGRlbGVnYXRpb25zXG4gICAqIERlbGVnYXRlcyBzdWJuZXQgdG8gc3BlY2lmaWMgQXp1cmUgc2VydmljZXNcbiAgICovXG4gIHJlYWRvbmx5IGRlbGVnYXRpb25zPzogU3VibmV0RGVsZWdhdGlvbltdO1xuXG4gIC8qKlxuICAgKiBQcml2YXRlIGVuZHBvaW50IG5ldHdvcmsgcG9saWNpZXNcbiAgICogQ29udHJvbHMgd2hldGhlciBuZXR3b3JrIHBvbGljaWVzIGFwcGx5IHRvIHByaXZhdGUgZW5kcG9pbnRzXG4gICAqIEBkZWZhdWx0VmFsdWUgXCJEaXNhYmxlZFwiXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlRW5kcG9pbnROZXR3b3JrUG9saWNpZXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgbGluayBzZXJ2aWNlIG5ldHdvcmsgcG9saWNpZXNcbiAgICogQ29udHJvbHMgd2hldGhlciBuZXR3b3JrIHBvbGljaWVzIGFwcGx5IHRvIHByaXZhdGUgbGluayBzZXJ2aWNlc1xuICAgKiBAZGVmYXVsdFZhbHVlIFwiRW5hYmxlZFwiXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlTGlua1NlcnZpY2VOZXR3b3JrUG9saWNpZXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5BVCBnYXRld2F5IHJlZmVyZW5jZVxuICAgKiBPcHRpb25hbCAtIGZvciBvdXRib3VuZCBpbnRlcm5ldCBjb25uZWN0aXZpdHlcbiAgICovXG4gIHJlYWRvbmx5IG5hdEdhdGV3YXk/OiBTdWJuZXROQVRHYXRld2F5UmVmZXJlbmNlO1xuXG4gIC8qKlxuICAgKiBJUCBhbGxvY2F0aW9ucyBmb3IgdGhlIHN1Ym5ldFxuICAgKiBPcHRpb25hbCAtIGZvciBjdXN0b20gSVAgYWxsb2NhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgaXBBbGxvY2F0aW9ucz86IGFueVtdO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBncm91cCBJRCB3aGVyZSB0aGUgcGFyZW50IFZOZXQgZXhpc3RzXG4gICAqIFJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgdGhlIHBhcmVudCBJRFxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VHcm91cElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgcnVsZXMgdG8gaWdub3JlIGNoYW5nZXNcbiAgICogVXNlZnVsIGZvciBwcm9wZXJ0aWVzIHRoYXQgYXJlIGV4dGVybmFsbHkgbWFuYWdlZFxuICAgKlxuICAgKiBAZXhhbXBsZSBbXCJuZXR3b3JrU2VjdXJpdHlHcm91cFwiLCBcInJvdXRlVGFibGVcIl1cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUNoYW5nZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBenVyZSBTdWJuZXQgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2luZ2xlLCB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIHRoYXQgcmVwbGFjZXNcbiAqIHZlcnNpb24tc3BlY2lmaWMgU3VibmV0IGNsYXNzZXMuIEl0IGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uXG4gKiByZXNvbHV0aW9uLCBzY2hlbWEgdmFsaWRhdGlvbiwgYW5kIHByb3BlcnR5IHRyYW5zZm9ybWF0aW9uIHdoaWxlIG1haW50YWluaW5nXG4gKiBmdWxsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKlxuICogKipDaGlsZCBSZXNvdXJjZSBQYXR0ZXJuKio6IFN1Ym5ldHMgYXJlIGNoaWxkIHJlc291cmNlcyBvZiBWaXJ0dWFsIE5ldHdvcmtzLlxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiBvdmVycmlkZXMgdGhlIGByZXNvbHZlUGFyZW50SWQoKWAgbWV0aG9kIHRvIHByb3Blcmx5XG4gKiBjb25zdHJ1Y3QgdGhlIFZpcnR1YWwgTmV0d29yayBJRCBhcyB0aGUgcGFyZW50LCBmb2xsb3dpbmcgdGhlIGVuaGFuY2VkIGJhc2VcbiAqIGNsYXNzIHBhdHRlcm4gZm9yIGNoaWxkIHJlc291cmNlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQmFzaWMgdXNhZ2Ugd2l0aCBhdXRvbWF0aWMgdmVyc2lvbiByZXNvbHV0aW9uOlxuICogY29uc3Qgc3VibmV0ID0gbmV3IFN1Ym5ldCh0aGlzLCBcInN1Ym5ldFwiLCB7XG4gKiAgIG5hbWU6IFwibXktc3VibmV0XCIsXG4gKiAgIHZpcnR1YWxOZXR3b3JrTmFtZTogXCJteS12bmV0XCIsXG4gKiAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAqICAgYWRkcmVzc1ByZWZpeDogXCIxMC4wLjEuMC8yNFwiXG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVXNhZ2Ugd2l0aCBuZXR3b3JrIHNlY3VyaXR5IGdyb3VwOlxuICogY29uc3Qgc3VibmV0ID0gbmV3IFN1Ym5ldCh0aGlzLCBcInN1Ym5ldFwiLCB7XG4gKiAgIG5hbWU6IFwibXktc3VibmV0XCIsXG4gKiAgIHZpcnR1YWxOZXR3b3JrTmFtZTogXCJteS12bmV0XCIsXG4gKiAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAqICAgYWRkcmVzc1ByZWZpeDogXCIxMC4wLjEuMC8yNFwiLFxuICogICBuZXR3b3JrU2VjdXJpdHlHcm91cDogeyBpZDogbnNnLmlkIH1cbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWJuZXQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFN0YXRpYyBpbml0aWFsaXphdGlvbiBmbGFnIHRvIGVuc3VyZSBzY2hlbWFzIGFyZSByZWdpc3RlcmVkIG9ubHkgb25jZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgc2NoZW1hc1JlZ2lzdGVyZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRW5zdXJlcyB0aGF0IFN1Ym5ldCBzY2hlbWFzIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIEFwaVZlcnNpb25NYW5hZ2VyXG4gICAqIFRoaXMgaXMgY2FsbGVkIG9uY2UgZHVyaW5nIHRoZSBmaXJzdCBTdWJuZXQgaW5zdGFudGlhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZW5zdXJlU2NoZW1hc1JlZ2lzdGVyZWQoKTogdm9pZCB7XG4gICAgaWYgKFN1Ym5ldC5zY2hlbWFzUmVnaXN0ZXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFwaVZlcnNpb25NYW5hZ2VyID0gQXBpVmVyc2lvbk1hbmFnZXIuaW5zdGFuY2UoKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBSZWdpc3RlciBhbGwgU3VibmV0IHZlcnNpb25zXG4gICAgICBhcGlWZXJzaW9uTWFuYWdlci5yZWdpc3RlclJlc291cmNlVHlwZShTVUJORVRfVFlQRSwgQUxMX1NVQk5FVF9WRVJTSU9OUyk7XG5cbiAgICAgIFN1Ym5ldC5zY2hlbWFzUmVnaXN0ZXJlZCA9IHRydWU7XG5cbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgUmVnaXN0ZXJlZCAke0FMTF9TVUJORVRfVkVSU0lPTlMubGVuZ3RofSBBUEkgdmVyc2lvbnMgZm9yICR7U1VCTkVUX1RZUEV9YCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEZhaWxlZCB0byByZWdpc3RlciBTdWJuZXQgc2NoZW1hczogJHtlcnJvcn0uIGAgK1xuICAgICAgICAgIGBUaGlzIG1heSBpbmRpY2F0ZSB0aGUgc2NoZW1hcyBhcmUgYWxyZWFkeSByZWdpc3RlcmVkIG9yIHRoZXJlJ3MgYSBjb25maWd1cmF0aW9uIGlzc3VlLmAsXG4gICAgICApO1xuICAgICAgLy8gRG9uJ3QgdGhyb3cgaGVyZSBhcyB0aGUgc2NoZW1hcyBtaWdodCBhbHJlYWR5IGJlIHJlZ2lzdGVyZWRcbiAgICAgIFN1Ym5ldC5zY2hlbWFzUmVnaXN0ZXJlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBwcm9wZXJ0aWVzIGZvciB0aGlzIFN1Ym5ldCBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBTdWJuZXRQcm9wcztcblxuICAvLyBPdXRwdXQgcHJvcGVydGllcyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nXG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZU91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgYWRkcmVzc1ByZWZpeE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIC8vIFB1YmxpYyBwcm9wZXJ0aWVzIHRoYXQgbWF0Y2ggdGhlIG9yaWdpbmFsIFN1Ym5ldCBpbnRlcmZhY2VcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQXp1cmUgU3VibmV0IHVzaW5nIHRoZSBBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICAgKlxuICAgKiBUaGUgY29uc3RydWN0b3IgYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gcmVzb2x1dGlvbiwgc2NoZW1hIHJlZ2lzdHJhdGlvbixcbiAgICogdmFsaWRhdGlvbiwgYW5kIHJlc291cmNlIGNyZWF0aW9uLiBJdCBtYWludGFpbnMgZnVsbCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAqIHdpdGggZXhpc3RpbmcgU3VibmV0IGltcGxlbWVudGF0aW9ucy5cbiAgICpcbiAgICogKipQYXJlbnQgSUQgUmVzb2x1dGlvbioqOiBTdWJuZXRzIGFyZSBjaGlsZCByZXNvdXJjZXMgb2YgVmlydHVhbCBOZXR3b3Jrcy5cbiAgICogVGhlIHJlc29sdmVQYXJlbnRJZCgpIG1ldGhvZCBpcyBvdmVycmlkZGVuIHRvIHJldHVybiB0aGUgVmlydHVhbCBOZXR3b3JrIElEXG4gICAqIGluc3RlYWQgb2YgdGhlIFJlc291cmNlIEdyb3VwIElELCBlc3RhYmxpc2hpbmcgdGhlIHByb3BlciBwYXJlbnQtY2hpbGQgaGllcmFyY2h5LlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBpbnN0YW5jZVxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBTdWJuZXRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdWJuZXRQcm9wcykge1xuICAgIC8vIEVuc3VyZSBzY2hlbWFzIGFyZSByZWdpc3RlcmVkIGJlZm9yZSBjYWxsaW5nIHN1cGVyXG4gICAgU3VibmV0LmVuc3VyZVNjaGVtYXNSZWdpc3RlcmVkKCk7XG5cbiAgICAvLyBDYWxsIHRoZSBwYXJlbnQgY29uc3RydWN0b3Igd2l0aCB0aGUgb3JpZ2luYWwgcHJvcHNcbiAgICAvLyBQYXJlbnQgSUQgcmVzb2x1dGlvbiBpcyBub3cgaGFuZGxlZCBieSB0aGUgb3ZlcnJpZGRlbiByZXNvbHZlUGFyZW50SWQgbWV0aG9kXG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyBTdG9yZSB0aGUgcHJvcHNcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICAvLyBFeHRyYWN0IHByb3BlcnRpZXMgZnJvbSB0aGUgQVpBUEkgcmVzb3VyY2Ugb3V0cHV0cyB1c2luZyBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvblxuICAgIHRoaXMuaWQgPSBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59LmlkfWA7XG5cbiAgICAvLyBDcmVhdGUgVGVycmFmb3JtIG91dHB1dHMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZyBmcm9tIG90aGVyIHJlc291cmNlc1xuICAgIHRoaXMuaWRPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiaWRcIiwge1xuICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgSUQgb2YgdGhlIFN1Ym5ldFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIFN1Ym5ldFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRyZXNzUHJlZml4T3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dChcbiAgICAgIHRoaXMsXG4gICAgICBcImFkZHJlc3NQcmVmaXhcIixcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHRoaXMucHJvcHMuYWRkcmVzc1ByZWZpeCxcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGFkZHJlc3MgcHJlZml4IG9mIHRoZSBTdWJuZXRcIixcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIE92ZXJyaWRlIGxvZ2ljYWwgSURzIHRvIG1hdGNoIG9yaWdpbmFsIG5hbWluZyBjb252ZW50aW9uXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG4gICAgdGhpcy5hZGRyZXNzUHJlZml4T3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiYWRkcmVzc1ByZWZpeFwiKTtcblxuICAgIC8vIEF6dXJlIGF1dG9tYXRpY2FsbHkgZXhwYW5kcyBzZXJ2aWNlIGVuZHBvaW50IGxvY2F0aW9ucyBmb3IgaGlnaCBhdmFpbGFiaWxpdHksXG4gICAgLy8gYWRkaW5nIHBhaXJlZCByZWdpb25zIGZvciBkaXNhc3RlciByZWNvdmVyeS4gSWdub3JlIHRoZXNlIGNoYW5nZXMgdG8gcHJldmVudCBkcmlmdC5cbiAgICBpZiAocHJvcHMuc2VydmljZUVuZHBvaW50cyAmJiBwcm9wcy5zZXJ2aWNlRW5kcG9pbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuYWRkT3ZlcnJpZGUoXCJsaWZlY3ljbGVcIiwge1xuICAgICAgICBpZ25vcmVfY2hhbmdlczogW1wiYm9keS5wcm9wZXJ0aWVzLnNlcnZpY2VFbmRwb2ludHNbMF0ubG9jYXRpb25zXCJdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgYWRkaXRpb25hbCBpZ25vcmUgY2hhbmdlcyBpZiBzcGVjaWZpZWRcbiAgICB0aGlzLl9hcHBseUlnbm9yZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFUVVJUkVEIEFCU1RSQUNUIE1FVEhPRFMgRlJPTSBBemFwaVJlc291cmNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgQVBJIHZlcnNpb24gdG8gdXNlIHdoZW4gbm8gZXhwbGljaXQgdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAgICogUmV0dXJucyB0aGUgbW9zdCByZWNlbnQgc3RhYmxlIHZlcnNpb24gYXMgdGhlIGRlZmF1bHRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjQtMTAtMDFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciBTdWJuZXRzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNVQk5FVF9UWVBFO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIEFQSSBzY2hlbWEgZm9yIHRoZSByZXNvbHZlZCB2ZXJzaW9uXG4gICAqIFVzZXMgdGhlIGZyYW1ld29yaydzIHNjaGVtYSByZXNvbHV0aW9uIHRvIGdldCB0aGUgYXBwcm9wcmlhdGUgc2NoZW1hXG4gICAqL1xuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHJlc291cmNlIGJvZHkgZm9yIHRoZSBBenVyZSBBUEkgY2FsbFxuICAgKiBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBwcm9wZXJ0aWVzIGludG8gdGhlIEpTT04gZm9ybWF0IGV4cGVjdGVkIGJ5IEF6dXJlIFJFU1QgQVBJXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBTdWJuZXRQcm9wcztcbiAgICByZXR1cm4ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBhZGRyZXNzUHJlZml4OiB0eXBlZFByb3BzLmFkZHJlc3NQcmVmaXgsXG4gICAgICAgIG5ldHdvcmtTZWN1cml0eUdyb3VwOiB0eXBlZFByb3BzLm5ldHdvcmtTZWN1cml0eUdyb3VwLFxuICAgICAgICByb3V0ZVRhYmxlOiB0eXBlZFByb3BzLnJvdXRlVGFibGUsXG4gICAgICAgIHNlcnZpY2VFbmRwb2ludHM6IHR5cGVkUHJvcHMuc2VydmljZUVuZHBvaW50cyxcbiAgICAgICAgZGVsZWdhdGlvbnM6IHR5cGVkUHJvcHMuZGVsZWdhdGlvbnMsXG4gICAgICAgIHByaXZhdGVFbmRwb2ludE5ldHdvcmtQb2xpY2llczpcbiAgICAgICAgICB0eXBlZFByb3BzLnByaXZhdGVFbmRwb2ludE5ldHdvcmtQb2xpY2llcyB8fCBcIkRpc2FibGVkXCIsXG4gICAgICAgIHByaXZhdGVMaW5rU2VydmljZU5ldHdvcmtQb2xpY2llczpcbiAgICAgICAgICB0eXBlZFByb3BzLnByaXZhdGVMaW5rU2VydmljZU5ldHdvcmtQb2xpY2llcyB8fCBcIkVuYWJsZWRcIixcbiAgICAgICAgbmF0R2F0ZXdheTogdHlwZWRQcm9wcy5uYXRHYXRld2F5LFxuICAgICAgICBpcEFsbG9jYXRpb25zOiB0eXBlZFByb3BzLmlwQWxsb2NhdGlvbnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIHBhcmVudCBJRCBmb3IgdGhlIFN1Ym5ldCByZXNvdXJjZS5cbiAgICpcbiAgICogU3VibmV0cyBhcmUgY2hpbGQgcmVzb3VyY2VzIG9mIFZpcnR1YWwgTmV0d29ya3MuIFRoaXMgbWV0aG9kIG92ZXJyaWRlc1xuICAgKiB0aGUgZGVmYXVsdCBwYXJlbnQgSUQgcmVzb2x1dGlvbiB0byByZXR1cm4gdGhlIFZpcnR1YWwgTmV0d29yayBJRCBpbnN0ZWFkXG4gICAqIG9mIHRoZSBSZXNvdXJjZSBHcm91cCBJRC5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIHJlc291cmNlIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgVGhlIFZpcnR1YWwgTmV0d29yayBJRCAocGFyZW50IHJlc291cmNlIElEKVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgU3VibmV0UHJvcHM7XG4gICAgLy8gSWYgdmlydHVhbE5ldHdvcmtJZCBpcyBwcm92aWRlZCwgdXNlIGl0IChjcmVhdGVzIFRlcnJhZm9ybSBkZXBlbmRlbmN5KVxuICAgIC8vIE90aGVyd2lzZSBjb25zdHJ1Y3QgaXQgZnJvbSByZXNvdXJjZUdyb3VwSWQgYW5kIHZpcnR1YWxOZXR3b3JrTmFtZSAoc3RyaW5nIGNvbmNhdGVuYXRpb24pXG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVkUHJvcHMudmlydHVhbE5ldHdvcmtJZCB8fFxuICAgICAgYCR7dHlwZWRQcm9wcy5yZXNvdXJjZUdyb3VwSWR9L3Byb3ZpZGVycy9NaWNyb3NvZnQuTmV0d29yay92aXJ0dWFsTmV0d29ya3MvJHt0eXBlZFByb3BzLnZpcnR1YWxOZXR3b3JrTmFtZX1gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBjcmVhdGVBemFwaVJlc291cmNlIHRvIGV4cGxpY2l0bHkgcHJldmVudCBsb2NhdGlvbiBmcm9tIGJlaW5nIGFkZGVkXG4gICAqIFN1Ym5ldHMgYXJlIGNoaWxkIHJlc291cmNlcyBhbmQgaW5oZXJpdCBsb2NhdGlvbiBmcm9tIHRoZWlyIHBhcmVudCBWTmV0XG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlQXphcGlSZXNvdXJjZShcbiAgICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHBhcmVudElkOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIF9sb2NhdGlvbj86IHN0cmluZyxcbiAgKTogY2RrdGYuVGVycmFmb3JtUmVzb3VyY2Uge1xuICAgIC8vIENhbGwgcGFyZW50IGltcGxlbWVudGF0aW9uIGJ1dCBwYXNzIHVuZGVmaW5lZCBmb3IgbG9jYXRpb25cbiAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSBiYXNlIGNsYXNzIGZyb20gYWRkaW5nIGxvY2F0aW9uIHRvIHRoZSBjb25maWdcbiAgICByZXR1cm4gc3VwZXIuY3JlYXRlQXphcGlSZXNvdXJjZShwcm9wZXJ0aWVzLCBwYXJlbnRJZCwgbmFtZSwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBVQkxJQyBNRVRIT0RTIEZPUiBTVUJORVQgT1BFUkFUSU9OU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZ1bGwgcmVzb3VyY2UgaWRlbnRpZmllciBmb3IgdXNlIGluIG90aGVyIEF6dXJlIHJlc291cmNlc1xuICAgKiBBbGlhcyBmb3IgdGhlIGlkIHByb3BlcnR5IHRvIG1hdGNoIG9yaWdpbmFsIGludGVyZmFjZVxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhZGRyZXNzIHByZWZpeCB2YWx1ZVxuICAgKiBSZXR1cm5zIHRoZSBhZGRyZXNzIHByZWZpeCBmcm9tIHRoZSBpbnB1dCBwcm9wcyBzaW5jZSBBenVyZSBBUEkgZG9lc24ndCByZXR1cm4gaXQgaW4gb3V0cHV0XG4gICAqL1xuICBwdWJsaWMgZ2V0IGFkZHJlc3NQcmVmaXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5hZGRyZXNzUHJlZml4O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcGFyZW50IFZpcnR1YWwgTmV0d29yayBJRFxuICAgKiBDb25zdHJ1Y3RzIHRoZSBWTmV0IHJlc291cmNlIElEIGZyb20gdGhlIHN1Ym5ldCdzIHBhcmVudCByZWZlcmVuY2VcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlydHVhbE5ldHdvcmtJZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSB0aGlzLnByb3BzIGFzIFN1Ym5ldFByb3BzO1xuICAgIHJldHVybiBgJHt0eXBlZFByb3BzLnJlc291cmNlR3JvdXBJZH0vcHJvdmlkZXJzL01pY3Jvc29mdC5OZXR3b3JrL3ZpcnR1YWxOZXR3b3Jrcy8ke3R5cGVkUHJvcHMudmlydHVhbE5ldHdvcmtOYW1lfWA7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIEhFTFBFUiBNRVRIT0RTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgaWdub3JlIGNoYW5nZXMgbGlmZWN5Y2xlIHJ1bGVzIGlmIHNwZWNpZmllZCBpbiBwcm9wc1xuICAgKi9cbiAgcHJpdmF0ZSBfYXBwbHlJZ25vcmVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMgJiYgdGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuYWRkT3ZlcnJpZGUoXCJsaWZlY3ljbGVcIiwge1xuICAgICAgICBpZ25vcmVfY2hhbmdlczogdGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration test for Azure Subnet construct
|
|
3
|
+
*
|
|
4
|
+
* This test demonstrates basic usage of the Subnet construct
|
|
5
|
+
* and validates deployment, idempotency, and cleanup.
|
|
6
|
+
* It also demonstrates the parent-child relationship between
|
|
7
|
+
* Virtual Network and Subnet.
|
|
8
|
+
*
|
|
9
|
+
* Run with: npm run integration:nostream
|
|
10
|
+
*/
|
|
11
|
+
import "cdktf/lib/testing/adapters/jest";
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Integration test for Azure Subnet construct
|
|
4
|
+
*
|
|
5
|
+
* This test demonstrates basic usage of the Subnet construct
|
|
6
|
+
* and validates deployment, idempotency, and cleanup.
|
|
7
|
+
* It also demonstrates the parent-child relationship between
|
|
8
|
+
* Virtual Network and Subnet.
|
|
9
|
+
*
|
|
10
|
+
* Run with: npm run integration:nostream
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
const cdktf_1 = require("cdktf");
|
|
14
|
+
require("cdktf/lib/testing/adapters/jest");
|
|
15
|
+
const azure_resourcegroup_1 = require("../../azure-resourcegroup");
|
|
16
|
+
const azure_virtualnetwork_1 = require("../../azure-virtualnetwork");
|
|
17
|
+
const provider_1 = require("../../core-azure/lib/azapi/providers-azapi/provider");
|
|
18
|
+
const testing_1 = require("../../testing");
|
|
19
|
+
const subnet_1 = require("../lib/subnet");
|
|
20
|
+
/**
|
|
21
|
+
* Example stack demonstrating Subnet usage with parent Virtual Network
|
|
22
|
+
*/
|
|
23
|
+
class SubnetExampleStack extends cdktf_1.TerraformStack {
|
|
24
|
+
constructor(scope, id) {
|
|
25
|
+
super(scope, id);
|
|
26
|
+
// Configure AZAPI provider
|
|
27
|
+
new provider_1.AzapiProvider(this, "azapi", {});
|
|
28
|
+
// Create resource group
|
|
29
|
+
const resourceGroup = new azure_resourcegroup_1.ResourceGroup(this, "rg", {
|
|
30
|
+
name: "rg-subnet-example",
|
|
31
|
+
location: "eastus",
|
|
32
|
+
tags: {
|
|
33
|
+
environment: "example",
|
|
34
|
+
purpose: "integration-test",
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
// Create virtual network (parent resource)
|
|
38
|
+
const vnet = new azure_virtualnetwork_1.VirtualNetwork(this, "vnet", {
|
|
39
|
+
name: "vnet-subnet-example",
|
|
40
|
+
location: "eastus",
|
|
41
|
+
resourceGroupId: resourceGroup.id,
|
|
42
|
+
addressSpace: {
|
|
43
|
+
addressPrefixes: ["10.0.0.0/16"],
|
|
44
|
+
},
|
|
45
|
+
tags: {
|
|
46
|
+
environment: "example",
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
// Subnet with service endpoints and specific API version
|
|
50
|
+
new subnet_1.Subnet(this, "subnet", {
|
|
51
|
+
name: "subnet-example",
|
|
52
|
+
virtualNetworkName: vnet.name,
|
|
53
|
+
resourceGroupId: resourceGroup.id,
|
|
54
|
+
apiVersion: "2024-07-01",
|
|
55
|
+
addressPrefix: "10.0.1.0/24",
|
|
56
|
+
serviceEndpoints: [
|
|
57
|
+
{
|
|
58
|
+
service: "Microsoft.Storage",
|
|
59
|
+
locations: ["eastus"],
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
privateEndpointNetworkPolicies: "Disabled",
|
|
63
|
+
// Pass vnet.id to create proper Terraform dependency
|
|
64
|
+
virtualNetworkId: vnet.id,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
describe("Subnet Integration Test", () => {
|
|
69
|
+
it("should deploy, validate idempotency, and cleanup subnet resources", () => {
|
|
70
|
+
const app = cdktf_1.Testing.app();
|
|
71
|
+
const stack = new SubnetExampleStack(app, "test-subnet");
|
|
72
|
+
const synthesized = cdktf_1.Testing.fullSynth(stack);
|
|
73
|
+
// This will:
|
|
74
|
+
// 1. Run terraform apply to deploy resources
|
|
75
|
+
// 2. Run terraform plan to check idempotency (no changes expected)
|
|
76
|
+
// 3. Run terraform destroy to cleanup resources
|
|
77
|
+
(0, testing_1.TerraformApplyCheckAndDestroy)(synthesized);
|
|
78
|
+
}, 600000); // 10 minute timeout for deployment and cleanup
|
|
79
|
+
});
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibmV0LmludGVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXN1Ym5ldC90ZXN0L3N1Ym5ldC5pbnRlZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7OztHQVNHOztBQUVILGlDQUFnRDtBQUVoRCwyQ0FBeUM7QUFDekMsbUVBQTBEO0FBQzFELHFFQUE0RDtBQUM1RCxrRkFBb0Y7QUFDcEYsMkNBQThEO0FBQzlELDBDQUF1QztBQUV2Qzs7R0FFRztBQUNILE1BQU0sa0JBQW1CLFNBQVEsc0JBQWM7SUFDN0MsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQiwyQkFBMkI7UUFDM0IsSUFBSSx3QkFBYSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFckMsd0JBQXdCO1FBQ3hCLE1BQU0sYUFBYSxHQUFHLElBQUksbUNBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ2xELElBQUksRUFBRSxtQkFBbUI7WUFDekIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsSUFBSSxFQUFFO2dCQUNKLFdBQVcsRUFBRSxTQUFTO2dCQUN0QixPQUFPLEVBQUUsa0JBQWtCO2FBQzVCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsMkNBQTJDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUkscUNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQzVDLElBQUksRUFBRSxxQkFBcUI7WUFDM0IsUUFBUSxFQUFFLFFBQVE7WUFDbEIsZUFBZSxFQUFFLGFBQWEsQ0FBQyxFQUFFO1lBQ2pDLFlBQVksRUFBRTtnQkFDWixlQUFlLEVBQUUsQ0FBQyxhQUFhLENBQUM7YUFDakM7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osV0FBVyxFQUFFLFNBQVM7YUFDdkI7U0FDRixDQUFDLENBQUM7UUFFSCx5REFBeUQ7UUFDekQsSUFBSSxlQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUN6QixJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxJQUFJO1lBQzdCLGVBQWUsRUFBRSxhQUFhLENBQUMsRUFBRTtZQUNqQyxVQUFVLEVBQUUsWUFBWTtZQUN4QixhQUFhLEVBQUUsYUFBYTtZQUM1QixnQkFBZ0IsRUFBRTtnQkFDaEI7b0JBQ0UsT0FBTyxFQUFFLG1CQUFtQjtvQkFDNUIsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2lCQUN0QjthQUNGO1lBQ0QsOEJBQThCLEVBQUUsVUFBVTtZQUMxQyxxREFBcUQ7WUFDckQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsUUFBUSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtJQUN2QyxFQUFFLENBQUMsbUVBQW1FLEVBQUUsR0FBRyxFQUFFO1FBQzNFLE1BQU0sR0FBRyxHQUFHLGVBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN6RCxNQUFNLFdBQVcsR0FBRyxlQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLGFBQWE7UUFDYiw2Q0FBNkM7UUFDN0MsbUVBQW1FO1FBQ25FLGdEQUFnRDtRQUNoRCxJQUFBLHVDQUE2QixFQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLCtDQUErQztBQUM3RCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCBmb3IgQXp1cmUgU3VibmV0IGNvbnN0cnVjdFxuICpcbiAqIFRoaXMgdGVzdCBkZW1vbnN0cmF0ZXMgYmFzaWMgdXNhZ2Ugb2YgdGhlIFN1Ym5ldCBjb25zdHJ1Y3RcbiAqIGFuZCB2YWxpZGF0ZXMgZGVwbG95bWVudCwgaWRlbXBvdGVuY3ksIGFuZCBjbGVhbnVwLlxuICogSXQgYWxzbyBkZW1vbnN0cmF0ZXMgdGhlIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXAgYmV0d2VlblxuICogVmlydHVhbCBOZXR3b3JrIGFuZCBTdWJuZXQuXG4gKlxuICogUnVuIHdpdGg6IG5wbSBydW4gaW50ZWdyYXRpb246bm9zdHJlYW1cbiAqL1xuXG5pbXBvcnQgeyBUZXN0aW5nLCBUZXJyYWZvcm1TdGFjayB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCBcImNka3RmL2xpYi90ZXN0aW5nL2FkYXB0ZXJzL2plc3RcIjtcbmltcG9ydCB7IFJlc291cmNlR3JvdXAgfSBmcm9tIFwiLi4vLi4vYXp1cmUtcmVzb3VyY2Vncm91cFwiO1xuaW1wb3J0IHsgVmlydHVhbE5ldHdvcmsgfSBmcm9tIFwiLi4vLi4vYXp1cmUtdmlydHVhbG5ldHdvcmtcIjtcbmltcG9ydCB7IEF6YXBpUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvYXphcGkvcHJvdmlkZXJzLWF6YXBpL3Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1BcHBseUNoZWNrQW5kRGVzdHJveSB9IGZyb20gXCIuLi8uLi90ZXN0aW5nXCI7XG5pbXBvcnQgeyBTdWJuZXQgfSBmcm9tIFwiLi4vbGliL3N1Ym5ldFwiO1xuXG4vKipcbiAqIEV4YW1wbGUgc3RhY2sgZGVtb25zdHJhdGluZyBTdWJuZXQgdXNhZ2Ugd2l0aCBwYXJlbnQgVmlydHVhbCBOZXR3b3JrXG4gKi9cbmNsYXNzIFN1Ym5ldEV4YW1wbGVTdGFjayBleHRlbmRzIFRlcnJhZm9ybVN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBDb25maWd1cmUgQVpBUEkgcHJvdmlkZXJcbiAgICBuZXcgQXphcGlQcm92aWRlcih0aGlzLCBcImF6YXBpXCIsIHt9KTtcblxuICAgIC8vIENyZWF0ZSByZXNvdXJjZSBncm91cFxuICAgIGNvbnN0IHJlc291cmNlR3JvdXAgPSBuZXcgUmVzb3VyY2VHcm91cCh0aGlzLCBcInJnXCIsIHtcbiAgICAgIG5hbWU6IFwicmctc3VibmV0LWV4YW1wbGVcIixcbiAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgdGFnczoge1xuICAgICAgICBlbnZpcm9ubWVudDogXCJleGFtcGxlXCIsXG4gICAgICAgIHB1cnBvc2U6IFwiaW50ZWdyYXRpb24tdGVzdFwiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSB2aXJ0dWFsIG5ldHdvcmsgKHBhcmVudCByZXNvdXJjZSlcbiAgICBjb25zdCB2bmV0ID0gbmV3IFZpcnR1YWxOZXR3b3JrKHRoaXMsIFwidm5ldFwiLCB7XG4gICAgICBuYW1lOiBcInZuZXQtc3VibmV0LWV4YW1wbGVcIixcbiAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgYWRkcmVzc1NwYWNlOiB7XG4gICAgICAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4wLjAvMTZcIl0sXG4gICAgICB9LFxuICAgICAgdGFnczoge1xuICAgICAgICBlbnZpcm9ubWVudDogXCJleGFtcGxlXCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gU3VibmV0IHdpdGggc2VydmljZSBlbmRwb2ludHMgYW5kIHNwZWNpZmljIEFQSSB2ZXJzaW9uXG4gICAgbmV3IFN1Ym5ldCh0aGlzLCBcInN1Ym5ldFwiLCB7XG4gICAgICBuYW1lOiBcInN1Ym5ldC1leGFtcGxlXCIsXG4gICAgICB2aXJ0dWFsTmV0d29ya05hbWU6IHZuZXQubmFtZSxcbiAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgIGFwaVZlcnNpb246IFwiMjAyNC0wNy0wMVwiLFxuICAgICAgYWRkcmVzc1ByZWZpeDogXCIxMC4wLjEuMC8yNFwiLFxuICAgICAgc2VydmljZUVuZHBvaW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgc2VydmljZTogXCJNaWNyb3NvZnQuU3RvcmFnZVwiLFxuICAgICAgICAgIGxvY2F0aW9uczogW1wiZWFzdHVzXCJdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHByaXZhdGVFbmRwb2ludE5ldHdvcmtQb2xpY2llczogXCJEaXNhYmxlZFwiLFxuICAgICAgLy8gUGFzcyB2bmV0LmlkIHRvIGNyZWF0ZSBwcm9wZXIgVGVycmFmb3JtIGRlcGVuZGVuY3lcbiAgICAgIHZpcnR1YWxOZXR3b3JrSWQ6IHZuZXQuaWQsXG4gICAgfSk7XG4gIH1cbn1cblxuZGVzY3JpYmUoXCJTdWJuZXQgSW50ZWdyYXRpb24gVGVzdFwiLCAoKSA9PiB7XG4gIGl0KFwic2hvdWxkIGRlcGxveSwgdmFsaWRhdGUgaWRlbXBvdGVuY3ksIGFuZCBjbGVhbnVwIHN1Ym5ldCByZXNvdXJjZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGFwcCA9IFRlc3RpbmcuYXBwKCk7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3VibmV0RXhhbXBsZVN0YWNrKGFwcCwgXCJ0ZXN0LXN1Ym5ldFwiKTtcbiAgICBjb25zdCBzeW50aGVzaXplZCA9IFRlc3RpbmcuZnVsbFN5bnRoKHN0YWNrKTtcblxuICAgIC8vIFRoaXMgd2lsbDpcbiAgICAvLyAxLiBSdW4gdGVycmFmb3JtIGFwcGx5IHRvIGRlcGxveSByZXNvdXJjZXNcbiAgICAvLyAyLiBSdW4gdGVycmFmb3JtIHBsYW4gdG8gY2hlY2sgaWRlbXBvdGVuY3kgKG5vIGNoYW5nZXMgZXhwZWN0ZWQpXG4gICAgLy8gMy4gUnVuIHRlcnJhZm9ybSBkZXN0cm95IHRvIGNsZWFudXAgcmVzb3VyY2VzXG4gICAgVGVycmFmb3JtQXBwbHlDaGVja0FuZERlc3Ryb3koc3ludGhlc2l6ZWQpO1xuICB9LCA2MDAwMDApOyAvLyAxMCBtaW51dGUgdGltZW91dCBmb3IgZGVwbG95bWVudCBhbmQgY2xlYW51cFxufSk7XG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive tests for the Subnet implementation
|
|
3
|
+
*
|
|
4
|
+
* This test suite validates the Subnet class using the AzapiResource framework.
|
|
5
|
+
* Tests cover automatic version resolution, explicit version pinning, schema validation,
|
|
6
|
+
* property transformation, and resource creation including parent-child relationship.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|