@microsoft/terraform-cdk-constructs 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +54846 -26661
- package/API.md +72091 -23784
- package/lib/azure-actiongroup/index.d.ts +0 -10
- package/lib/azure-actiongroup/index.js +1 -11
- package/lib/azure-actiongroup/lib/action-group.d.ts +0 -10
- package/lib/azure-actiongroup/lib/action-group.js +6 -32
- package/lib/azure-actiongroup/lib/index.d.ts +1 -4
- package/lib/azure-actiongroup/lib/index.js +2 -5
- package/lib/azure-activitylogalert/index.d.ts +0 -10
- package/lib/azure-activitylogalert/index.js +1 -11
- package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +0 -10
- package/lib/azure-activitylogalert/lib/activity-log-alert.js +6 -32
- package/lib/azure-activitylogalert/lib/index.d.ts +1 -4
- package/lib/azure-activitylogalert/lib/index.js +2 -5
- package/lib/azure-aks/index.d.ts +0 -8
- package/lib/azure-aks/index.js +1 -11
- package/lib/azure-aks/lib/aks-cluster.d.ts +4 -13
- package/lib/azure-aks/lib/aks-cluster.js +13 -36
- package/lib/azure-aks/lib/index.d.ts +1 -10
- package/lib/azure-aks/lib/index.js +2 -21
- package/lib/azure-diagnosticsettings/index.d.ts +0 -6
- package/lib/azure-diagnosticsettings/index.js +1 -7
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +0 -10
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +6 -32
- package/lib/azure-diagnosticsettings/lib/index.d.ts +1 -7
- package/lib/azure-diagnosticsettings/lib/index.js +2 -8
- package/lib/azure-dnsforwardingruleset/index.d.ts +1 -0
- package/lib/azure-dnsforwardingruleset/index.js +18 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.d.ts +24 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.js +206 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.d.ts +174 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +214 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.d.ts +24 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.js +242 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.d.ts +193 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +193 -0
- package/lib/azure-dnsforwardingruleset/lib/index.d.ts +6 -0
- package/lib/azure-dnsforwardingruleset/lib/index.js +23 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.d.ts +24 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.js +199 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.d.ts +160 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +178 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.js +133 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.js +350 -0
- package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.js +397 -0
- package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.js +285 -0
- package/lib/azure-dnsresolver/index.d.ts +1 -0
- package/lib/azure-dnsresolver/index.js +18 -0
- package/lib/azure-dnsresolver/lib/dns-resolver-schemas.d.ts +24 -0
- package/lib/azure-dnsresolver/lib/dns-resolver-schemas.js +218 -0
- package/lib/azure-dnsresolver/lib/dns-resolver.d.ts +170 -0
- package/lib/azure-dnsresolver/lib/dns-resolver.js +236 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.d.ts +24 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.js +261 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint.d.ts +189 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint.js +243 -0
- package/lib/azure-dnsresolver/lib/index.d.ts +6 -0
- package/lib/azure-dnsresolver/lib/index.js +23 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.d.ts +24 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.js +231 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint.d.ts +175 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint.js +234 -0
- package/lib/azure-dnsresolver/test/dns-resolver.integ.d.ts +14 -0
- package/lib/azure-dnsresolver/test/dns-resolver.integ.js +117 -0
- package/lib/azure-dnsresolver/test/dns-resolver.spec.d.ts +9 -0
- package/lib/azure-dnsresolver/test/dns-resolver.spec.js +353 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.integ.d.ts +9 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.integ.js +151 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.spec.d.ts +9 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.spec.js +441 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.integ.d.ts +9 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.integ.js +149 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.spec.d.ts +9 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.spec.js +301 -0
- package/lib/azure-dnszone/index.d.ts +1 -0
- package/lib/azure-dnszone/index.js +18 -0
- package/lib/azure-dnszone/lib/dns-zone-schemas.d.ts +24 -0
- package/lib/azure-dnszone/lib/dns-zone-schemas.js +191 -0
- package/lib/azure-dnszone/lib/dns-zone.d.ts +182 -0
- package/lib/azure-dnszone/lib/dns-zone.js +228 -0
- package/lib/azure-dnszone/lib/index.d.ts +2 -0
- package/lib/azure-dnszone/lib/index.js +19 -0
- package/lib/azure-dnszone/test/dns-zone.integ.d.ts +9 -0
- package/lib/azure-dnszone/test/dns-zone.integ.js +85 -0
- package/lib/azure-dnszone/test/dns-zone.spec.d.ts +9 -0
- package/lib/azure-dnszone/test/dns-zone.spec.js +285 -0
- package/lib/azure-metricalert/index.d.ts +0 -10
- package/lib/azure-metricalert/index.js +1 -11
- package/lib/azure-metricalert/lib/index.d.ts +1 -4
- package/lib/azure-metricalert/lib/index.js +2 -5
- package/lib/azure-metricalert/lib/metric-alert.d.ts +0 -10
- package/lib/azure-metricalert/lib/metric-alert.js +6 -32
- package/lib/azure-networkinterface/index.d.ts +0 -3
- package/lib/azure-networkinterface/index.js +1 -4
- package/lib/azure-networkinterface/lib/index.d.ts +1 -5
- package/lib/azure-networkinterface/lib/index.js +2 -5
- package/lib/azure-networkinterface/lib/network-interface.d.ts +4 -9
- package/lib/azure-networkinterface/lib/network-interface.js +14 -29
- package/lib/azure-networkinterface/test/network-interface.integ.js +20 -6
- package/lib/azure-networksecuritygroup/index.d.ts +0 -5
- package/lib/azure-networksecuritygroup/index.js +1 -6
- package/lib/azure-networksecuritygroup/lib/index.d.ts +2 -5
- package/lib/azure-networksecuritygroup/lib/index.js +17 -14
- package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +4 -13
- package/lib/azure-networksecuritygroup/lib/network-security-group.js +14 -36
- package/lib/azure-policyassignment/index.d.ts +1 -0
- package/lib/azure-policyassignment/index.js +18 -0
- package/lib/azure-policyassignment/lib/index.d.ts +2 -0
- package/lib/azure-policyassignment/lib/index.js +19 -0
- package/lib/azure-policyassignment/lib/policy-assignment-schemas.d.ts +25 -0
- package/lib/azure-policyassignment/lib/policy-assignment-schemas.js +260 -0
- package/lib/azure-policyassignment/lib/policy-assignment.d.ts +342 -0
- package/lib/azure-policyassignment/lib/policy-assignment.js +228 -0
- package/lib/azure-policyassignment/test/policy-assignment.integ.d.ts +13 -0
- package/lib/azure-policyassignment/test/policy-assignment.integ.js +153 -0
- package/lib/azure-policyassignment/test/policy-assignment.spec.d.ts +9 -0
- package/lib/azure-policyassignment/test/policy-assignment.spec.js +651 -0
- package/lib/azure-policydefinition/index.d.ts +1 -0
- package/lib/azure-policydefinition/index.js +18 -0
- package/lib/azure-policydefinition/lib/index.d.ts +2 -0
- package/lib/azure-policydefinition/lib/index.js +19 -0
- package/lib/azure-policydefinition/lib/policy-definition-schemas.d.ts +25 -0
- package/lib/azure-policydefinition/lib/policy-definition-schemas.js +210 -0
- package/lib/azure-policydefinition/lib/policy-definition.d.ts +260 -0
- package/lib/azure-policydefinition/lib/policy-definition.js +199 -0
- package/lib/azure-policydefinition/test/policy-definition.integ.d.ts +9 -0
- package/lib/azure-policydefinition/test/policy-definition.integ.js +137 -0
- package/lib/azure-policydefinition/test/policy-definition.spec.d.ts +9 -0
- package/lib/azure-policydefinition/test/policy-definition.spec.js +596 -0
- package/lib/azure-privatednszone/index.d.ts +1 -0
- package/lib/azure-privatednszone/index.js +18 -0
- package/lib/azure-privatednszone/lib/index.d.ts +2 -0
- package/lib/azure-privatednszone/lib/index.js +19 -0
- package/lib/azure-privatednszone/lib/private-dns-zone-schemas.d.ts +24 -0
- package/lib/azure-privatednszone/lib/private-dns-zone-schemas.js +254 -0
- package/lib/azure-privatednszone/lib/private-dns-zone.d.ts +178 -0
- package/lib/azure-privatednszone/lib/private-dns-zone.js +272 -0
- package/lib/azure-privatednszone/test/private-dns-zone.integ.d.ts +9 -0
- package/lib/azure-privatednszone/test/private-dns-zone.integ.js +84 -0
- package/lib/azure-privatednszone/test/private-dns-zone.spec.d.ts +9 -0
- package/lib/azure-privatednszone/test/private-dns-zone.spec.js +341 -0
- package/lib/azure-privatednszonelink/index.d.ts +1 -0
- package/lib/azure-privatednszonelink/index.js +18 -0
- package/lib/azure-privatednszonelink/lib/index.d.ts +2 -0
- package/lib/azure-privatednszonelink/lib/index.js +19 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.d.ts +24 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.js +262 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.d.ts +202 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +250 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.d.ts +9 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.js +110 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.d.ts +9 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.js +465 -0
- package/lib/azure-publicipaddress/index.d.ts +0 -5
- package/lib/azure-publicipaddress/index.js +1 -6
- package/lib/azure-publicipaddress/lib/index.d.ts +2 -9
- package/lib/azure-publicipaddress/lib/index.js +17 -17
- package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +4 -13
- package/lib/azure-publicipaddress/lib/public-ip-address.js +14 -36
- package/lib/azure-resourcegroup/index.d.ts +0 -37
- package/lib/azure-resourcegroup/index.js +1 -39
- package/lib/azure-resourcegroup/lib/index.d.ts +1 -44
- package/lib/azure-resourcegroup/lib/index.js +2 -43
- package/lib/azure-resourcegroup/lib/resource-group.d.ts +9 -23
- package/lib/azure-resourcegroup/lib/resource-group.js +23 -56
- package/lib/azure-resourcegroup/test/resource-group.spec.js +13 -19
- package/lib/azure-roleassignment/index.d.ts +1 -0
- package/lib/azure-roleassignment/index.js +18 -0
- package/lib/azure-roleassignment/lib/index.d.ts +2 -0
- package/lib/azure-roleassignment/lib/index.js +19 -0
- package/lib/azure-roleassignment/lib/role-assignment-schemas.d.ts +25 -0
- package/lib/azure-roleassignment/lib/role-assignment-schemas.js +238 -0
- package/lib/azure-roleassignment/lib/role-assignment.d.ts +294 -0
- package/lib/azure-roleassignment/lib/role-assignment.js +257 -0
- package/lib/azure-roleassignment/test/role-assignment.integ.d.ts +12 -0
- package/lib/azure-roleassignment/test/role-assignment.integ.js +101 -0
- package/lib/azure-roleassignment/test/role-assignment.spec.d.ts +9 -0
- package/lib/azure-roleassignment/test/role-assignment.spec.js +633 -0
- package/lib/azure-roledefinition/index.d.ts +1 -0
- package/lib/azure-roledefinition/index.js +18 -0
- package/lib/azure-roledefinition/lib/index.d.ts +2 -0
- package/lib/azure-roledefinition/lib/index.js +19 -0
- package/lib/azure-roledefinition/lib/role-definition-schemas.d.ts +25 -0
- package/lib/azure-roledefinition/lib/role-definition-schemas.js +195 -0
- package/lib/azure-roledefinition/lib/role-definition.d.ts +236 -0
- package/lib/azure-roledefinition/lib/role-definition.js +192 -0
- package/lib/azure-roledefinition/test/role-definition.integ.d.ts +12 -0
- package/lib/azure-roledefinition/test/role-definition.integ.js +142 -0
- package/lib/azure-roledefinition/test/role-definition.spec.d.ts +9 -0
- package/lib/azure-roledefinition/test/role-definition.spec.js +946 -0
- package/lib/azure-storageaccount/index.d.ts +0 -19
- package/lib/azure-storageaccount/index.js +1 -20
- package/lib/azure-storageaccount/lib/index.d.ts +1 -7
- package/lib/azure-storageaccount/lib/index.js +2 -8
- package/lib/azure-storageaccount/lib/storage-account.d.ts +4 -9
- package/lib/azure-storageaccount/lib/storage-account.js +15 -29
- package/lib/azure-subnet/index.d.ts +0 -3
- package/lib/azure-subnet/index.js +1 -4
- package/lib/azure-subnet/lib/index.d.ts +1 -4
- package/lib/azure-subnet/lib/index.js +2 -5
- package/lib/azure-subnet/lib/subnet.d.ts +3 -14
- package/lib/azure-subnet/lib/subnet.js +28 -47
- package/lib/azure-subnet/test/subnet.integ.js +19 -7
- package/lib/azure-subnet/test/subnet.spec.js +1 -2
- package/lib/azure-virtualmachine/index.d.ts +0 -6
- package/lib/azure-virtualmachine/index.js +1 -7
- package/lib/azure-virtualmachine/lib/index.d.ts +1 -10
- package/lib/azure-virtualmachine/lib/index.js +2 -21
- package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +4 -13
- package/lib/azure-virtualmachine/lib/virtual-machine.js +15 -36
- package/lib/azure-virtualnetwork/index.d.ts +0 -9
- package/lib/azure-virtualnetwork/index.js +1 -11
- package/lib/azure-virtualnetwork/lib/index.d.ts +2 -9
- package/lib/azure-virtualnetwork/lib/index.js +17 -20
- package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +4 -13
- package/lib/azure-virtualnetwork/lib/virtual-network.js +15 -36
- package/lib/azure-virtualnetworkmanager/index.d.ts +1 -0
- package/lib/azure-virtualnetworkmanager/index.js +18 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.d.ts +48 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.js +265 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.d.ts +185 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +206 -0
- package/lib/azure-virtualnetworkmanager/lib/index.d.ts +14 -0
- package/lib/azure-virtualnetworkmanager/lib/index.js +31 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.js +189 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.js +201 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.d.ts +135 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +163 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group.d.ts +139 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group.js +158 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.js +182 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.d.ts +144 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +164 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.d.ts +38 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.js +206 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.d.ts +142 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +162 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.d.ts +39 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.js +359 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.d.ts +221 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +204 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.js +236 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.d.ts +337 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +283 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.d.ts +25 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.js +402 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.d.ts +9 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.js +1652 -0
- package/lib/azure-vmss/index.d.ts +0 -5
- package/lib/azure-vmss/index.js +1 -6
- package/lib/azure-vmss/lib/index.d.ts +0 -7
- package/lib/azure-vmss/lib/index.js +1 -21
- package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +5 -13
- package/lib/azure-vmss/lib/virtual-machine-scale-set.js +29 -53
- package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.d.ts +10 -0
- package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.js +218 -0
- package/lib/core-azure/lib/azapi/azapi-resource.d.ts +178 -26
- package/lib/core-azure/lib/azapi/azapi-resource.js +328 -90
- package/lib/core-azure/lib/azapi/azapi-resource.spec.js +2 -2
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
- package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +5 -3
- package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
- package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
- package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
- package/lib/core-azure/lib/azapi/resource-schema-validator.d.ts +118 -0
- package/lib/core-azure/lib/azapi/resource-schema-validator.js +236 -0
- package/lib/core-azure/lib/azapi/resource-version-manager.d.ts +103 -0
- package/lib/core-azure/lib/azapi/resource-version-manager.js +168 -0
- package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +11 -6
- package/lib/core-azure/lib/index.d.ts +2 -2
- package/lib/core-azure/lib/index.js +5 -5
- package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
- package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
- package/lib/index.d.ts +19 -0
- package/lib/index.js +21 -2
- package/lib/testing/index.js +2 -2
- package/lib/testing/lib/cleanup.d.ts +1 -0
- package/lib/testing/lib/cleanup.js +19 -12
- package/lib/testing/lib/metadata.js +19 -16
- package/package.json +1 -1
- package/scripts/cleanup-test-resources.ts +22 -4
- package/scripts/generate-index.js +25 -8
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure DNS Resolver Outbound Endpoint implementation using AzapiResource framework
|
|
3
|
+
*
|
|
4
|
+
* This class provides a unified implementation for DNS Resolver Outbound Endpoints.
|
|
5
|
+
* Outbound Endpoints allow Azure resources to forward DNS queries to external DNS servers
|
|
6
|
+
* such as on-premises DNS servers or other external DNS resolvers.
|
|
7
|
+
*
|
|
8
|
+
* Supported API Versions:
|
|
9
|
+
* - 2022-07-01 (Active, Latest)
|
|
10
|
+
*
|
|
11
|
+
* Features:
|
|
12
|
+
* - Automatic latest version resolution when no version is specified
|
|
13
|
+
* - Explicit version pinning for stability requirements
|
|
14
|
+
* - Schema-driven validation and transformation
|
|
15
|
+
* - Full backward compatibility
|
|
16
|
+
* - JSII compliance for multi-language support
|
|
17
|
+
* - Dedicated subnet requirement with delegation
|
|
18
|
+
* - Used with forwarding rules for conditional DNS forwarding
|
|
19
|
+
*/
|
|
20
|
+
import * as cdktf from "cdktf";
|
|
21
|
+
import { Construct } from "constructs";
|
|
22
|
+
import { AzapiResource, AzapiResourceProps } from "../../core-azure/lib/azapi/azapi-resource";
|
|
23
|
+
import { ApiSchema } from "../../core-azure/lib/version-manager/interfaces/version-interfaces";
|
|
24
|
+
/**
|
|
25
|
+
* Properties for the Azure DNS Resolver Outbound Endpoint
|
|
26
|
+
*
|
|
27
|
+
* Extends AzapiResourceProps with Outbound Endpoint specific properties
|
|
28
|
+
*/
|
|
29
|
+
export interface DnsResolverOutboundEndpointProps extends AzapiResourceProps {
|
|
30
|
+
/**
|
|
31
|
+
* Resource ID of the parent DNS Resolver
|
|
32
|
+
* @example "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg/providers/Microsoft.Network/dnsResolvers/my-resolver"
|
|
33
|
+
*/
|
|
34
|
+
readonly dnsResolverId: string;
|
|
35
|
+
/**
|
|
36
|
+
* Resource ID of the subnet where the Outbound Endpoint will be deployed
|
|
37
|
+
* Must be a dedicated subnet between /28 and /24 with delegation to Microsoft.Network/dnsResolvers
|
|
38
|
+
* @example "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/outbound-subnet"
|
|
39
|
+
*/
|
|
40
|
+
readonly subnetId: string;
|
|
41
|
+
/**
|
|
42
|
+
* The lifecycle rules to ignore changes
|
|
43
|
+
* @example ["tags"]
|
|
44
|
+
*/
|
|
45
|
+
readonly ignoreChanges?: string[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The resource body interface for Azure Outbound Endpoint API calls
|
|
49
|
+
* This matches the Azure REST API schema
|
|
50
|
+
*/
|
|
51
|
+
export interface DnsResolverOutboundEndpointBody {
|
|
52
|
+
readonly location: string;
|
|
53
|
+
readonly tags?: {
|
|
54
|
+
[key: string]: string;
|
|
55
|
+
};
|
|
56
|
+
readonly properties?: any;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Azure DNS Resolver Outbound Endpoint implementation
|
|
60
|
+
*
|
|
61
|
+
* Outbound Endpoints enable Azure resources to forward DNS queries to external DNS servers
|
|
62
|
+
* (such as on-premises DNS servers). This enables hybrid DNS scenarios where Azure resources
|
|
63
|
+
* need to resolve names from external DNS zones.
|
|
64
|
+
*
|
|
65
|
+
* Requirements:
|
|
66
|
+
* - Dedicated subnet between /28 and /24
|
|
67
|
+
* - Subnet must be delegated to Microsoft.Network/dnsResolvers
|
|
68
|
+
* - Must be in the same VNet as the parent DNS Resolver
|
|
69
|
+
* - Each DNS Resolver can have multiple outbound endpoints
|
|
70
|
+
* - Outbound endpoints are used with forwarding rules to specify which queries to forward
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* // Basic outbound endpoint:
|
|
74
|
+
* const outboundEndpoint = new DnsResolverOutboundEndpoint(this, "outbound-endpoint", {
|
|
75
|
+
* name: "my-outbound-endpoint",
|
|
76
|
+
* location: "eastus",
|
|
77
|
+
* dnsResolverId: dnsResolver.id,
|
|
78
|
+
* subnetId: outboundSubnet.id
|
|
79
|
+
* });
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* // Outbound endpoint with tags:
|
|
83
|
+
* const outboundEndpoint = new DnsResolverOutboundEndpoint(this, "outbound-endpoint", {
|
|
84
|
+
* name: "my-outbound-endpoint",
|
|
85
|
+
* location: "eastus",
|
|
86
|
+
* dnsResolverId: dnsResolver.id,
|
|
87
|
+
* subnetId: outboundSubnet.id,
|
|
88
|
+
* tags: {
|
|
89
|
+
* environment: "production",
|
|
90
|
+
* purpose: "hybrid-dns"
|
|
91
|
+
* }
|
|
92
|
+
* });
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* // Outbound endpoint with version pinning:
|
|
96
|
+
* const outboundEndpoint = new DnsResolverOutboundEndpoint(this, "outbound-endpoint", {
|
|
97
|
+
* name: "my-outbound-endpoint",
|
|
98
|
+
* location: "eastus",
|
|
99
|
+
* dnsResolverId: dnsResolver.id,
|
|
100
|
+
* subnetId: outboundSubnet.id,
|
|
101
|
+
* apiVersion: "2022-07-01"
|
|
102
|
+
* });
|
|
103
|
+
*
|
|
104
|
+
* @stability stable
|
|
105
|
+
*/
|
|
106
|
+
export declare class DnsResolverOutboundEndpoint extends AzapiResource {
|
|
107
|
+
/**
|
|
108
|
+
* The input properties for this Outbound Endpoint instance
|
|
109
|
+
*/
|
|
110
|
+
readonly props: DnsResolverOutboundEndpointProps;
|
|
111
|
+
readonly idOutput: cdktf.TerraformOutput;
|
|
112
|
+
readonly nameOutput: cdktf.TerraformOutput;
|
|
113
|
+
readonly locationOutput: cdktf.TerraformOutput;
|
|
114
|
+
readonly tagsOutput: cdktf.TerraformOutput;
|
|
115
|
+
readonly provisioningStateOutput: cdktf.TerraformOutput;
|
|
116
|
+
readonly resourceGuidOutput: cdktf.TerraformOutput;
|
|
117
|
+
/**
|
|
118
|
+
* Creates a new Azure DNS Resolver Outbound Endpoint using the AzapiResource framework
|
|
119
|
+
*
|
|
120
|
+
* @param scope - The scope in which to define this construct
|
|
121
|
+
* @param id - The unique identifier for this instance
|
|
122
|
+
* @param props - Configuration properties for the Outbound Endpoint
|
|
123
|
+
*/
|
|
124
|
+
constructor(scope: Construct, id: string, props: DnsResolverOutboundEndpointProps);
|
|
125
|
+
/**
|
|
126
|
+
* Resolves the parent resource ID for the Outbound Endpoint
|
|
127
|
+
* Outbound Endpoints are child resources of DNS Resolvers
|
|
128
|
+
*/
|
|
129
|
+
protected resolveParentId(props: any): string;
|
|
130
|
+
/**
|
|
131
|
+
* Gets the default API version to use when no explicit version is specified
|
|
132
|
+
*/
|
|
133
|
+
protected defaultVersion(): string;
|
|
134
|
+
/**
|
|
135
|
+
* Gets the Azure resource type for Outbound Endpoints
|
|
136
|
+
*/
|
|
137
|
+
protected resourceType(): string;
|
|
138
|
+
/**
|
|
139
|
+
* Gets the API schema for the resolved version
|
|
140
|
+
*/
|
|
141
|
+
protected apiSchema(): ApiSchema;
|
|
142
|
+
/**
|
|
143
|
+
* Indicates that location is required for Outbound Endpoints
|
|
144
|
+
*/
|
|
145
|
+
protected requiresLocation(): boolean;
|
|
146
|
+
/**
|
|
147
|
+
* Creates the resource body for the Azure API call
|
|
148
|
+
*/
|
|
149
|
+
protected createResourceBody(props: any): any;
|
|
150
|
+
/**
|
|
151
|
+
* Get the subnet ID
|
|
152
|
+
* Returns the input value as Azure API doesn't return nested subnet structure reliably
|
|
153
|
+
*/
|
|
154
|
+
get subnetId(): string;
|
|
155
|
+
/**
|
|
156
|
+
* Get the provisioning state of the Outbound Endpoint
|
|
157
|
+
*/
|
|
158
|
+
get provisioningState(): string;
|
|
159
|
+
/**
|
|
160
|
+
* Get the unique identifier for the Outbound Endpoint
|
|
161
|
+
*/
|
|
162
|
+
get resourceGuid(): string;
|
|
163
|
+
/**
|
|
164
|
+
* Add a tag to the Outbound Endpoint
|
|
165
|
+
*/
|
|
166
|
+
addTag(key: string, value: string): void;
|
|
167
|
+
/**
|
|
168
|
+
* Remove a tag from the Outbound Endpoint
|
|
169
|
+
*/
|
|
170
|
+
removeTag(key: string): void;
|
|
171
|
+
/**
|
|
172
|
+
* Applies ignore changes lifecycle rules if specified in props
|
|
173
|
+
*/
|
|
174
|
+
private _applyIgnoreChanges;
|
|
175
|
+
}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DnsResolverOutboundEndpoint = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
/**
|
|
7
|
+
* Azure DNS Resolver Outbound Endpoint implementation using AzapiResource framework
|
|
8
|
+
*
|
|
9
|
+
* This class provides a unified implementation for DNS Resolver Outbound Endpoints.
|
|
10
|
+
* Outbound Endpoints allow Azure resources to forward DNS queries to external DNS servers
|
|
11
|
+
* such as on-premises DNS servers or other external DNS resolvers.
|
|
12
|
+
*
|
|
13
|
+
* Supported API Versions:
|
|
14
|
+
* - 2022-07-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
|
+
* - Full backward compatibility
|
|
21
|
+
* - JSII compliance for multi-language support
|
|
22
|
+
* - Dedicated subnet requirement with delegation
|
|
23
|
+
* - Used with forwarding rules for conditional DNS forwarding
|
|
24
|
+
*/
|
|
25
|
+
const cdktf = require("cdktf");
|
|
26
|
+
const outbound_endpoint_schemas_1 = require("./outbound-endpoint-schemas");
|
|
27
|
+
const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
|
|
28
|
+
/**
|
|
29
|
+
* Azure DNS Resolver Outbound Endpoint implementation
|
|
30
|
+
*
|
|
31
|
+
* Outbound Endpoints enable Azure resources to forward DNS queries to external DNS servers
|
|
32
|
+
* (such as on-premises DNS servers). This enables hybrid DNS scenarios where Azure resources
|
|
33
|
+
* need to resolve names from external DNS zones.
|
|
34
|
+
*
|
|
35
|
+
* Requirements:
|
|
36
|
+
* - Dedicated subnet between /28 and /24
|
|
37
|
+
* - Subnet must be delegated to Microsoft.Network/dnsResolvers
|
|
38
|
+
* - Must be in the same VNet as the parent DNS Resolver
|
|
39
|
+
* - Each DNS Resolver can have multiple outbound endpoints
|
|
40
|
+
* - Outbound endpoints are used with forwarding rules to specify which queries to forward
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* // Basic outbound endpoint:
|
|
44
|
+
* const outboundEndpoint = new DnsResolverOutboundEndpoint(this, "outbound-endpoint", {
|
|
45
|
+
* name: "my-outbound-endpoint",
|
|
46
|
+
* location: "eastus",
|
|
47
|
+
* dnsResolverId: dnsResolver.id,
|
|
48
|
+
* subnetId: outboundSubnet.id
|
|
49
|
+
* });
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* // Outbound endpoint with tags:
|
|
53
|
+
* const outboundEndpoint = new DnsResolverOutboundEndpoint(this, "outbound-endpoint", {
|
|
54
|
+
* name: "my-outbound-endpoint",
|
|
55
|
+
* location: "eastus",
|
|
56
|
+
* dnsResolverId: dnsResolver.id,
|
|
57
|
+
* subnetId: outboundSubnet.id,
|
|
58
|
+
* tags: {
|
|
59
|
+
* environment: "production",
|
|
60
|
+
* purpose: "hybrid-dns"
|
|
61
|
+
* }
|
|
62
|
+
* });
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* // Outbound endpoint with version pinning:
|
|
66
|
+
* const outboundEndpoint = new DnsResolverOutboundEndpoint(this, "outbound-endpoint", {
|
|
67
|
+
* name: "my-outbound-endpoint",
|
|
68
|
+
* location: "eastus",
|
|
69
|
+
* dnsResolverId: dnsResolver.id,
|
|
70
|
+
* subnetId: outboundSubnet.id,
|
|
71
|
+
* apiVersion: "2022-07-01"
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* @stability stable
|
|
75
|
+
*/
|
|
76
|
+
class DnsResolverOutboundEndpoint extends azapi_resource_1.AzapiResource {
|
|
77
|
+
// Public properties
|
|
78
|
+
/**
|
|
79
|
+
* Creates a new Azure DNS Resolver Outbound Endpoint using the AzapiResource framework
|
|
80
|
+
*
|
|
81
|
+
* @param scope - The scope in which to define this construct
|
|
82
|
+
* @param id - The unique identifier for this instance
|
|
83
|
+
* @param props - Configuration properties for the Outbound Endpoint
|
|
84
|
+
*/
|
|
85
|
+
constructor(scope, id, props) {
|
|
86
|
+
super(scope, id, props);
|
|
87
|
+
this.props = props;
|
|
88
|
+
// Extract properties from the AZAPI resource outputs using Terraform interpolation
|
|
89
|
+
// Create Terraform outputs for easy access and referencing from other resources
|
|
90
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
91
|
+
value: this.id,
|
|
92
|
+
description: "The ID of the Outbound Endpoint",
|
|
93
|
+
});
|
|
94
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
95
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
96
|
+
description: "The name of the Outbound Endpoint",
|
|
97
|
+
});
|
|
98
|
+
this.locationOutput = new cdktf.TerraformOutput(this, "location", {
|
|
99
|
+
value: `\${${this.terraformResource.fqn}.location}`,
|
|
100
|
+
description: "The location of the Outbound Endpoint",
|
|
101
|
+
});
|
|
102
|
+
this.tagsOutput = new cdktf.TerraformOutput(this, "tags", {
|
|
103
|
+
value: `\${${this.terraformResource.fqn}.tags}`,
|
|
104
|
+
description: "The tags assigned to the Outbound Endpoint",
|
|
105
|
+
});
|
|
106
|
+
this.provisioningStateOutput = new cdktf.TerraformOutput(this, "provisioning_state", {
|
|
107
|
+
value: `\${${this.terraformResource.fqn}.output.properties.provisioningState}`,
|
|
108
|
+
description: "The provisioning state of the Outbound Endpoint",
|
|
109
|
+
});
|
|
110
|
+
this.resourceGuidOutput = new cdktf.TerraformOutput(this, "resource_guid", {
|
|
111
|
+
value: `\${${this.terraformResource.fqn}.output.properties.resourceGuid}`,
|
|
112
|
+
description: "The unique identifier for the Outbound Endpoint",
|
|
113
|
+
});
|
|
114
|
+
// Override logical IDs to match naming convention
|
|
115
|
+
this.idOutput.overrideLogicalId("id");
|
|
116
|
+
this.nameOutput.overrideLogicalId("name");
|
|
117
|
+
this.locationOutput.overrideLogicalId("location");
|
|
118
|
+
this.tagsOutput.overrideLogicalId("tags");
|
|
119
|
+
this.provisioningStateOutput.overrideLogicalId("provisioning_state");
|
|
120
|
+
this.resourceGuidOutput.overrideLogicalId("resource_guid");
|
|
121
|
+
// Apply ignore changes if specified
|
|
122
|
+
this._applyIgnoreChanges();
|
|
123
|
+
}
|
|
124
|
+
// =============================================================================
|
|
125
|
+
// REQUIRED ABSTRACT METHODS FROM AzapiResource
|
|
126
|
+
// =============================================================================
|
|
127
|
+
/**
|
|
128
|
+
* Resolves the parent resource ID for the Outbound Endpoint
|
|
129
|
+
* Outbound Endpoints are child resources of DNS Resolvers
|
|
130
|
+
*/
|
|
131
|
+
resolveParentId(props) {
|
|
132
|
+
const typedProps = props;
|
|
133
|
+
return typedProps.dnsResolverId;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Gets the default API version to use when no explicit version is specified
|
|
137
|
+
*/
|
|
138
|
+
defaultVersion() {
|
|
139
|
+
return "2022-07-01";
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Gets the Azure resource type for Outbound Endpoints
|
|
143
|
+
*/
|
|
144
|
+
resourceType() {
|
|
145
|
+
return outbound_endpoint_schemas_1.DNS_RESOLVER_OUTBOUND_ENDPOINT_TYPE;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Gets the API schema for the resolved version
|
|
149
|
+
*/
|
|
150
|
+
apiSchema() {
|
|
151
|
+
return this.resolveSchema();
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Indicates that location is required for Outbound Endpoints
|
|
155
|
+
*/
|
|
156
|
+
requiresLocation() {
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Creates the resource body for the Azure API call
|
|
161
|
+
*/
|
|
162
|
+
createResourceBody(props) {
|
|
163
|
+
const typedProps = props;
|
|
164
|
+
const body = {
|
|
165
|
+
location: this.location,
|
|
166
|
+
tags: this.allTags(),
|
|
167
|
+
properties: {
|
|
168
|
+
subnet: {
|
|
169
|
+
id: typedProps.subnetId,
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
return body;
|
|
174
|
+
}
|
|
175
|
+
// =============================================================================
|
|
176
|
+
// PUBLIC METHODS FOR OUTBOUND ENDPOINT OPERATIONS
|
|
177
|
+
// =============================================================================
|
|
178
|
+
/**
|
|
179
|
+
* Get the subnet ID
|
|
180
|
+
* Returns the input value as Azure API doesn't return nested subnet structure reliably
|
|
181
|
+
*/
|
|
182
|
+
get subnetId() {
|
|
183
|
+
return this.props.subnetId;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Get the provisioning state of the Outbound Endpoint
|
|
187
|
+
*/
|
|
188
|
+
get provisioningState() {
|
|
189
|
+
return `\${${this.terraformResource.fqn}.output.properties.provisioningState}`;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get the unique identifier for the Outbound Endpoint
|
|
193
|
+
*/
|
|
194
|
+
get resourceGuid() {
|
|
195
|
+
return `\${${this.terraformResource.fqn}.output.properties.resourceGuid}`;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Add a tag to the Outbound Endpoint
|
|
199
|
+
*/
|
|
200
|
+
addTag(key, value) {
|
|
201
|
+
if (!this.props.tags) {
|
|
202
|
+
this.props.tags = {};
|
|
203
|
+
}
|
|
204
|
+
this.props.tags[key] = value;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Remove a tag from the Outbound Endpoint
|
|
208
|
+
*/
|
|
209
|
+
removeTag(key) {
|
|
210
|
+
if (this.props.tags && this.props.tags[key]) {
|
|
211
|
+
delete this.props.tags[key];
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// =============================================================================
|
|
215
|
+
// PRIVATE HELPER METHODS
|
|
216
|
+
// =============================================================================
|
|
217
|
+
/**
|
|
218
|
+
* Applies ignore changes lifecycle rules if specified in props
|
|
219
|
+
*/
|
|
220
|
+
_applyIgnoreChanges() {
|
|
221
|
+
if (this.props.ignoreChanges && this.props.ignoreChanges.length > 0) {
|
|
222
|
+
this.terraformResource.addOverride("lifecycle", {
|
|
223
|
+
ignore_changes: this.props.ignoreChanges,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
exports.DnsResolverOutboundEndpoint = DnsResolverOutboundEndpoint;
|
|
229
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
230
|
+
DnsResolverOutboundEndpoint[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsResolverOutboundEndpoint", version: "1.3.0" };
|
|
231
|
+
(() => {
|
|
232
|
+
azapi_resource_1.AzapiResource.registerSchemas(outbound_endpoint_schemas_1.DNS_RESOLVER_OUTBOUND_ENDPOINT_TYPE, outbound_endpoint_schemas_1.ALL_DNS_RESOLVER_OUTBOUND_ENDPOINT_VERSIONS);
|
|
233
|
+
})();
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQtZW5kcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtZG5zcmVzb2x2ZXIvbGliL291dGJvdW5kLWVuZHBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUVILCtCQUErQjtBQUUvQiwyRUFHcUM7QUFDckMsOEVBR21EO0FBdUNuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQ0c7QUFDSCxNQUFhLDJCQUE0QixTQUFRLDhCQUFhO0lBcUI1RCxvQkFBb0I7SUFFcEI7Ozs7OztPQU1HO0lBQ0gsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBdUM7UUFFdkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsbUZBQW1GO1FBRW5GLGdGQUFnRjtRQUNoRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ3BELEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNkLFdBQVcsRUFBRSxpQ0FBaUM7U0FDL0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN4RCxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxRQUFRO1lBQy9DLFdBQVcsRUFBRSxtQ0FBbUM7U0FDakQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNoRSxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlC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cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBenVyZSBETlMgUmVzb2x2ZXIgT3V0Ym91bmQgRW5kcG9pbnQgaW1wbGVtZW50YXRpb24gdXNpbmcgQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgdW5pZmllZCBpbXBsZW1lbnRhdGlvbiBmb3IgRE5TIFJlc29sdmVyIE91dGJvdW5kIEVuZHBvaW50cy5cbiAqIE91dGJvdW5kIEVuZHBvaW50cyBhbGxvdyBBenVyZSByZXNvdXJjZXMgdG8gZm9yd2FyZCBETlMgcXVlcmllcyB0byBleHRlcm5hbCBETlMgc2VydmVyc1xuICogc3VjaCBhcyBvbi1wcmVtaXNlcyBETlMgc2VydmVycyBvciBvdGhlciBleHRlcm5hbCBETlMgcmVzb2x2ZXJzLlxuICpcbiAqIFN1cHBvcnRlZCBBUEkgVmVyc2lvbnM6XG4gKiAtIDIwMjItMDctMDEgKEFjdGl2ZSwgTGF0ZXN0KVxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBBdXRvbWF0aWMgbGF0ZXN0IHZlcnNpb24gcmVzb2x1dGlvbiB3aGVuIG5vIHZlcnNpb24gaXMgc3BlY2lmaWVkXG4gKiAtIEV4cGxpY2l0IHZlcnNpb24gcGlubmluZyBmb3Igc3RhYmlsaXR5IHJlcXVpcmVtZW50c1xuICogLSBTY2hlbWEtZHJpdmVuIHZhbGlkYXRpb24gYW5kIHRyYW5zZm9ybWF0aW9uXG4gKiAtIEZ1bGwgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICogLSBKU0lJIGNvbXBsaWFuY2UgZm9yIG11bHRpLWxhbmd1YWdlIHN1cHBvcnRcbiAqIC0gRGVkaWNhdGVkIHN1Ym5ldCByZXF1aXJlbWVudCB3aXRoIGRlbGVnYXRpb25cbiAqIC0gVXNlZCB3aXRoIGZvcndhcmRpbmcgcnVsZXMgZm9yIGNvbmRpdGlvbmFsIEROUyBmb3J3YXJkaW5nXG4gKi9cblxuaW1wb3J0ICogYXMgY2RrdGYgZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQUxMX0ROU19SRVNPTFZFUl9PVVRCT1VORF9FTkRQT0lOVF9WRVJTSU9OUyxcbiAgRE5TX1JFU09MVkVSX09VVEJPVU5EX0VORFBPSU5UX1RZUEUsXG59IGZyb20gXCIuL291dGJvdW5kLWVuZHBvaW50LXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIEF6dXJlIEROUyBSZXNvbHZlciBPdXRib3VuZCBFbmRwb2ludFxuICpcbiAqIEV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHdpdGggT3V0Ym91bmQgRW5kcG9pbnQgc3BlY2lmaWMgcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERuc1Jlc29sdmVyT3V0Ym91bmRFbmRwb2ludFByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIFJlc291cmNlIElEIG9mIHRoZSBwYXJlbnQgRE5TIFJlc29sdmVyXG4gICAqIEBleGFtcGxlIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL3JnL3Byb3ZpZGVycy9NaWNyb3NvZnQuTmV0d29yay9kbnNSZXNvbHZlcnMvbXktcmVzb2x2ZXJcIlxuICAgKi9cbiAgcmVhZG9ubHkgZG5zUmVzb2x2ZXJJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBJRCBvZiB0aGUgc3VibmV0IHdoZXJlIHRoZSBPdXRib3VuZCBFbmRwb2ludCB3aWxsIGJlIGRlcGxveWVkXG4gICAqIE11c3QgYmUgYSBkZWRpY2F0ZWQgc3VibmV0IGJldHdlZW4gLzI4IGFuZCAvMjQgd2l0aCBkZWxlZ2F0aW9uIHRvIE1pY3Jvc29mdC5OZXR3b3JrL2Ruc1Jlc29sdmVyc1xuICAgKiBAZXhhbXBsZSBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy9yZy9wcm92aWRlcnMvTWljcm9zb2Z0Lk5ldHdvcmsvdmlydHVhbE5ldHdvcmtzL3ZuZXQvc3VibmV0cy9vdXRib3VuZC1zdWJuZXRcIlxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBydWxlcyB0byBpZ25vcmUgY2hhbmdlc1xuICAgKiBAZXhhbXBsZSBbXCJ0YWdzXCJdXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVDaGFuZ2VzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIHJlc291cmNlIGJvZHkgaW50ZXJmYWNlIGZvciBBenVyZSBPdXRib3VuZCBFbmRwb2ludCBBUEkgY2FsbHNcbiAqIFRoaXMgbWF0Y2hlcyB0aGUgQXp1cmUgUkVTVCBBUEkgc2NoZW1hXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zUmVzb2x2ZXJPdXRib3VuZEVuZHBvaW50Qm9keSB7XG4gIHJlYWRvbmx5IGxvY2F0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICByZWFkb25seSBwcm9wZXJ0aWVzPzogYW55O1xufVxuXG4vKipcbiAqIEF6dXJlIEROUyBSZXNvbHZlciBPdXRib3VuZCBFbmRwb2ludCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIE91dGJvdW5kIEVuZHBvaW50cyBlbmFibGUgQXp1cmUgcmVzb3VyY2VzIHRvIGZvcndhcmQgRE5TIHF1ZXJpZXMgdG8gZXh0ZXJuYWwgRE5TIHNlcnZlcnNcbiAqIChzdWNoIGFzIG9uLXByZW1pc2VzIEROUyBzZXJ2ZXJzKS4gVGhpcyBlbmFibGVzIGh5YnJpZCBETlMgc2NlbmFyaW9zIHdoZXJlIEF6dXJlIHJlc291cmNlc1xuICogbmVlZCB0byByZXNvbHZlIG5hbWVzIGZyb20gZXh0ZXJuYWwgRE5TIHpvbmVzLlxuICpcbiAqIFJlcXVpcmVtZW50czpcbiAqIC0gRGVkaWNhdGVkIHN1Ym5ldCBiZXR3ZWVuIC8yOCBhbmQgLzI0XG4gKiAtIFN1Ym5ldCBtdXN0IGJlIGRlbGVnYXRlZCB0byBNaWNyb3NvZnQuTmV0d29yay9kbnNSZXNvbHZlcnNcbiAqIC0gTXVzdCBiZSBpbiB0aGUgc2FtZSBWTmV0IGFzIHRoZSBwYXJlbnQgRE5TIFJlc29sdmVyXG4gKiAtIEVhY2ggRE5TIFJlc29sdmVyIGNhbiBoYXZlIG11bHRpcGxlIG91dGJvdW5kIGVuZHBvaW50c1xuICogLSBPdXRib3VuZCBlbmRwb2ludHMgYXJlIHVzZWQgd2l0aCBmb3J3YXJkaW5nIHJ1bGVzIHRvIHNwZWNpZnkgd2hpY2ggcXVlcmllcyB0byBmb3J3YXJkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEJhc2ljIG91dGJvdW5kIGVuZHBvaW50OlxuICogY29uc3Qgb3V0Ym91bmRFbmRwb2ludCA9IG5ldyBEbnNSZXNvbHZlck91dGJvdW5kRW5kcG9pbnQodGhpcywgXCJvdXRib3VuZC1lbmRwb2ludFwiLCB7XG4gKiAgIG5hbWU6IFwibXktb3V0Ym91bmQtZW5kcG9pbnRcIixcbiAqICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gKiAgIGRuc1Jlc29sdmVySWQ6IGRuc1Jlc29sdmVyLmlkLFxuICogICBzdWJuZXRJZDogb3V0Ym91bmRTdWJuZXQuaWRcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBPdXRib3VuZCBlbmRwb2ludCB3aXRoIHRhZ3M6XG4gKiBjb25zdCBvdXRib3VuZEVuZHBvaW50ID0gbmV3IERuc1Jlc29sdmVyT3V0Ym91bmRFbmRwb2ludCh0aGlzLCBcIm91dGJvdW5kLWVuZHBvaW50XCIsIHtcbiAqICAgbmFtZTogXCJteS1vdXRib3VuZC1lbmRwb2ludFwiLFxuICogICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAqICAgZG5zUmVzb2x2ZXJJZDogZG5zUmVzb2x2ZXIuaWQsXG4gKiAgIHN1Ym5ldElkOiBvdXRib3VuZFN1Ym5ldC5pZCxcbiAqICAgdGFnczoge1xuICogICAgIGVudmlyb25tZW50OiBcInByb2R1Y3Rpb25cIixcbiAqICAgICBwdXJwb3NlOiBcImh5YnJpZC1kbnNcIlxuICogICB9XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gT3V0Ym91bmQgZW5kcG9pbnQgd2l0aCB2ZXJzaW9uIHBpbm5pbmc6XG4gKiBjb25zdCBvdXRib3VuZEVuZHBvaW50ID0gbmV3IERuc1Jlc29sdmVyT3V0Ym91bmRFbmRwb2ludCh0aGlzLCBcIm91dGJvdW5kLWVuZHBvaW50XCIsIHtcbiAqICAgbmFtZTogXCJteS1vdXRib3VuZC1lbmRwb2ludFwiLFxuICogICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAqICAgZG5zUmVzb2x2ZXJJZDogZG5zUmVzb2x2ZXIuaWQsXG4gKiAgIHN1Ym5ldElkOiBvdXRib3VuZFN1Ym5ldC5pZCxcbiAqICAgYXBpVmVyc2lvbjogXCIyMDIyLTA3LTAxXCJcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBEbnNSZXNvbHZlck91dGJvdW5kRW5kcG9pbnQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIEROU19SRVNPTFZFUl9PVVRCT1VORF9FTkRQT0lOVF9UWVBFLFxuICAgICAgQUxMX0ROU19SRVNPTFZFUl9PVVRCT1VORF9FTkRQT0lOVF9WRVJTSU9OUyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBwcm9wZXJ0aWVzIGZvciB0aGlzIE91dGJvdW5kIEVuZHBvaW50IGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IERuc1Jlc29sdmVyT3V0Ym91bmRFbmRwb2ludFByb3BzO1xuXG4gIC8vIE91dHB1dCBwcm9wZXJ0aWVzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmdcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBsb2NhdGlvbk91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgdGFnc091dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvdmlzaW9uaW5nU3RhdGVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlR3VpZE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIC8vIFB1YmxpYyBwcm9wZXJ0aWVzXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQXp1cmUgRE5TIFJlc29sdmVyIE91dGJvdW5kIEVuZHBvaW50IHVzaW5nIHRoZSBBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBpbnN0YW5jZVxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBPdXRib3VuZCBFbmRwb2ludFxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBEbnNSZXNvbHZlck91dGJvdW5kRW5kcG9pbnRQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICAvLyBFeHRyYWN0IHByb3BlcnRpZXMgZnJvbSB0aGUgQVpBUEkgcmVzb3VyY2Ugb3V0cHV0cyB1c2luZyBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvblxuXG4gICAgLy8gQ3JlYXRlIFRlcnJhZm9ybSBvdXRwdXRzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmcgZnJvbSBvdGhlciByZXNvdXJjZXNcbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBPdXRib3VuZCBFbmRwb2ludFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIE91dGJvdW5kIEVuZHBvaW50XCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmxvY2F0aW9uT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImxvY2F0aW9uXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59LmxvY2F0aW9ufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbG9jYXRpb24gb2YgdGhlIE91dGJvdW5kIEVuZHBvaW50XCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnRhZ3NPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwidGFnc1wiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS50YWdzfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgdGFncyBhc3NpZ25lZCB0byB0aGUgT3V0Ym91bmQgRW5kcG9pbnRcIixcbiAgICB9KTtcblxuICAgIHRoaXMucHJvdmlzaW9uaW5nU3RhdGVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KFxuICAgICAgdGhpcyxcbiAgICAgIFwicHJvdmlzaW9uaW5nX3N0YXRlXCIsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLnByb3Zpc2lvbmluZ1N0YXRlfWAsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBwcm92aXNpb25pbmcgc3RhdGUgb2YgdGhlIE91dGJvdW5kIEVuZHBvaW50XCIsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLnJlc291cmNlR3VpZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJyZXNvdXJjZV9ndWlkXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLnJlc291cmNlR3VpZH1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgT3V0Ym91bmQgRW5kcG9pbnRcIixcbiAgICB9KTtcblxuICAgIC8vIE92ZXJyaWRlIGxvZ2ljYWwgSURzIHRvIG1hdGNoIG5hbWluZyBjb252ZW50aW9uXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG4gICAgdGhpcy5sb2NhdGlvbk91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImxvY2F0aW9uXCIpO1xuICAgIHRoaXMudGFnc091dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInRhZ3NcIik7XG4gICAgdGhpcy5wcm92aXNpb25pbmdTdGF0ZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInByb3Zpc2lvbmluZ19zdGF0ZVwiKTtcbiAgICB0aGlzLnJlc291cmNlR3VpZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInJlc291cmNlX2d1aWRcIik7XG5cbiAgICAvLyBBcHBseSBpZ25vcmUgY2hhbmdlcyBpZiBzcGVjaWZpZWRcbiAgICB0aGlzLl9hcHBseUlnbm9yZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFUVVJUkVEIEFCU1RSQUNUIE1FVEhPRFMgRlJPTSBBemFwaVJlc291cmNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBwYXJlbnQgcmVzb3VyY2UgSUQgZm9yIHRoZSBPdXRib3VuZCBFbmRwb2ludFxuICAgKiBPdXRib3VuZCBFbmRwb2ludHMgYXJlIGNoaWxkIHJlc291cmNlcyBvZiBETlMgUmVzb2x2ZXJzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBEbnNSZXNvbHZlck91dGJvdW5kRW5kcG9pbnRQcm9wcztcbiAgICByZXR1cm4gdHlwZWRQcm9wcy5kbnNSZXNvbHZlcklkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgQVBJIHZlcnNpb24gdG8gdXNlIHdoZW4gbm8gZXhwbGljaXQgdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjItMDctMDFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciBPdXRib3VuZCBFbmRwb2ludHNcbiAgICovXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRE5TX1JFU09MVkVSX09VVEJPVU5EX0VORFBPSU5UX1RZUEU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQVBJIHNjaGVtYSBmb3IgdGhlIHJlc29sdmVkIHZlcnNpb25cbiAgICovXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgbG9jYXRpb24gaXMgcmVxdWlyZWQgZm9yIE91dGJvdW5kIEVuZHBvaW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIHJlcXVpcmVzTG9jYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgcmVzb3VyY2UgYm9keSBmb3IgdGhlIEF6dXJlIEFQSSBjYWxsXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBEbnNSZXNvbHZlck91dGJvdW5kRW5kcG9pbnRQcm9wcztcblxuICAgIGNvbnN0IGJvZHk6IGFueSA9IHtcbiAgICAgIGxvY2F0aW9uOiB0aGlzLmxvY2F0aW9uISxcbiAgICAgIHRhZ3M6IHRoaXMuYWxsVGFncygpLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBzdWJuZXQ6IHtcbiAgICAgICAgICBpZDogdHlwZWRQcm9wcy5zdWJuZXRJZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFVCTElDIE1FVEhPRFMgRk9SIE9VVEJPVU5EIEVORFBPSU5UIE9QRVJBVElPTlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdWJuZXQgSURcbiAgICogUmV0dXJucyB0aGUgaW5wdXQgdmFsdWUgYXMgQXp1cmUgQVBJIGRvZXNuJ3QgcmV0dXJuIG5lc3RlZCBzdWJuZXQgc3RydWN0dXJlIHJlbGlhYmx5XG4gICAqL1xuICBwdWJsaWMgZ2V0IHN1Ym5ldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VibmV0SWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwcm92aXNpb25pbmcgc3RhdGUgb2YgdGhlIE91dGJvdW5kIEVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IHByb3Zpc2lvbmluZ1N0YXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMucHJvdmlzaW9uaW5nU3RhdGV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgT3V0Ym91bmQgRW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2VHdWlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMucmVzb3VyY2VHdWlkfWA7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgdGFnIHRvIHRoZSBPdXRib3VuZCBFbmRwb2ludFxuICAgKi9cbiAgcHVibGljIGFkZFRhZyhrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcm9wcy50YWdzKSB7XG4gICAgICAodGhpcy5wcm9wcyBhcyBhbnkpLnRhZ3MgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy50YWdzIVtrZXldID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgdGFnIGZyb20gdGhlIE91dGJvdW5kIEVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlVGFnKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMudGFncyAmJiB0aGlzLnByb3BzLnRhZ3Nba2V5XSkge1xuICAgICAgZGVsZXRlIHRoaXMucHJvcHMudGFnc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgSEVMUEVSIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQXBwbGllcyBpZ25vcmUgY2hhbmdlcyBsaWZlY3ljbGUgcnVsZXMgaWYgc3BlY2lmaWVkIGluIHByb3BzXG4gICAqL1xuICBwcml2YXRlIF9hcHBseUlnbm9yZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyAmJiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5hZGRPdmVycmlkZShcImxpZmVjeWNsZVwiLCB7XG4gICAgICAgIGlnbm9yZV9jaGFuZ2VzOiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration test for Azure DNS Private Resolver
|
|
3
|
+
*
|
|
4
|
+
* This test demonstrates usage of the DnsResolver construct with proper
|
|
5
|
+
* VNet and subnet configuration, and validates deployment, idempotency, and cleanup.
|
|
6
|
+
*
|
|
7
|
+
* Key Requirements:
|
|
8
|
+
* - DNS Resolver requires a dedicated subnet
|
|
9
|
+
* - Subnet must be delegated to Microsoft.Network/dnsResolvers
|
|
10
|
+
* - Subnet must be between /28 and /24 in size
|
|
11
|
+
*
|
|
12
|
+
* Run with: npm run integration:nostream
|
|
13
|
+
*/
|
|
14
|
+
import "cdktf/lib/testing/adapters/jest";
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Integration test for Azure DNS Private Resolver
|
|
4
|
+
*
|
|
5
|
+
* This test demonstrates usage of the DnsResolver construct with proper
|
|
6
|
+
* VNet and subnet configuration, and validates deployment, idempotency, and cleanup.
|
|
7
|
+
*
|
|
8
|
+
* Key Requirements:
|
|
9
|
+
* - DNS Resolver requires a dedicated subnet
|
|
10
|
+
* - Subnet must be delegated to Microsoft.Network/dnsResolvers
|
|
11
|
+
* - Subnet must be between /28 and /24 in size
|
|
12
|
+
*
|
|
13
|
+
* Run with: npm run integration:nostream
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
const cdktf_1 = require("cdktf");
|
|
17
|
+
require("cdktf/lib/testing/adapters/jest");
|
|
18
|
+
const resource_group_1 = require("../../azure-resourcegroup/lib/resource-group");
|
|
19
|
+
const subnet_1 = require("../../azure-subnet/lib/subnet");
|
|
20
|
+
const virtual_network_1 = require("../../azure-virtualnetwork/lib/virtual-network");
|
|
21
|
+
const provider_1 = require("../../core-azure/lib/azapi/providers-azapi/provider");
|
|
22
|
+
const testing_1 = require("../../testing");
|
|
23
|
+
const metadata_1 = require("../../testing/lib/metadata");
|
|
24
|
+
const dns_resolver_1 = require("../lib/dns-resolver");
|
|
25
|
+
// Generate unique test run metadata for this test suite
|
|
26
|
+
const testMetadata = new metadata_1.TestRunMetadata("dnsresolver-integration", {
|
|
27
|
+
maxAgeHours: 4,
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* Example stack demonstrating DNS Resolver usage
|
|
31
|
+
*/
|
|
32
|
+
class DnsResolverExampleStack extends testing_1.BaseTestStack {
|
|
33
|
+
constructor(scope, id) {
|
|
34
|
+
super(scope, id, {
|
|
35
|
+
testRunOptions: {
|
|
36
|
+
maxAgeHours: testMetadata.maxAgeHours,
|
|
37
|
+
autoCleanup: testMetadata.autoCleanup,
|
|
38
|
+
cleanupPolicy: testMetadata.cleanupPolicy,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
// Configure AZAPI provider
|
|
42
|
+
new provider_1.AzapiProvider(this, "azapi", {});
|
|
43
|
+
// Generate unique names
|
|
44
|
+
const resourceGroupName = this.generateResourceName("Microsoft.Resources/resourceGroups", "dnsresolver");
|
|
45
|
+
const vnetName = this.generateResourceName("Microsoft.Network/virtualNetworks", "dnsresolver");
|
|
46
|
+
const subnetName = this.generateResourceName("Microsoft.Network/virtualNetworks/subnets", "dnsresolver");
|
|
47
|
+
const dnsResolverName = this.generateResourceName("Microsoft.Network/dnsResolvers", "dnsresolver");
|
|
48
|
+
// Create resource group
|
|
49
|
+
const resourceGroup = new resource_group_1.ResourceGroup(this, "test-rg", {
|
|
50
|
+
name: resourceGroupName,
|
|
51
|
+
location: "eastus",
|
|
52
|
+
tags: {
|
|
53
|
+
...this.systemTags(),
|
|
54
|
+
purpose: "dns-resolver-testing",
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
// Create virtual network for DNS resolver
|
|
58
|
+
const vnet = new virtual_network_1.VirtualNetwork(this, "test-vnet", {
|
|
59
|
+
name: vnetName,
|
|
60
|
+
location: "eastus",
|
|
61
|
+
resourceGroupId: resourceGroup.id,
|
|
62
|
+
addressSpace: {
|
|
63
|
+
addressPrefixes: ["10.0.0.0/16"],
|
|
64
|
+
},
|
|
65
|
+
tags: {
|
|
66
|
+
...this.systemTags(),
|
|
67
|
+
purpose: "dns-resolver-vnet",
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
// Create dedicated subnet for DNS resolver with delegation
|
|
71
|
+
// Subnet must be /28 to /24 in size and delegated to Microsoft.Network/dnsResolvers
|
|
72
|
+
const subnet = new subnet_1.Subnet(this, "dns-resolver-subnet", {
|
|
73
|
+
name: subnetName,
|
|
74
|
+
virtualNetworkName: vnetName,
|
|
75
|
+
virtualNetworkId: vnet.id,
|
|
76
|
+
resourceGroupId: resourceGroup.id,
|
|
77
|
+
addressPrefix: "10.0.1.0/28", // /28 subnet (smallest allowed)
|
|
78
|
+
delegations: [
|
|
79
|
+
{
|
|
80
|
+
name: "Microsoft.Network.dnsResolvers",
|
|
81
|
+
serviceName: "Microsoft.Network/dnsResolvers",
|
|
82
|
+
actions: ["Microsoft.Network/virtualNetworks/subnets/join/action"],
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
});
|
|
86
|
+
// Create DNS resolver with comprehensive configuration
|
|
87
|
+
// Note: Azure only allows one DNS Resolver per Virtual Network
|
|
88
|
+
new dns_resolver_1.DnsResolver(this, "dns-resolver", {
|
|
89
|
+
name: dnsResolverName,
|
|
90
|
+
location: "eastus",
|
|
91
|
+
resourceGroupId: resourceGroup.id,
|
|
92
|
+
virtualNetworkId: vnet.id,
|
|
93
|
+
tags: {
|
|
94
|
+
...this.systemTags(),
|
|
95
|
+
example: "complete",
|
|
96
|
+
environment: "test",
|
|
97
|
+
purpose: "hybrid-dns",
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
// Add dependency to ensure subnet is created before resolvers
|
|
101
|
+
// This ensures the delegation is in place
|
|
102
|
+
subnet;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
describe("DnsResolver Integration Test", () => {
|
|
106
|
+
it("should deploy DNS resolver with VNet and delegated subnet, validate idempotency, and cleanup", () => {
|
|
107
|
+
const app = cdktf_1.Testing.app();
|
|
108
|
+
const stack = new DnsResolverExampleStack(app, "test-dnsresolver");
|
|
109
|
+
const synthesized = cdktf_1.Testing.fullSynth(stack);
|
|
110
|
+
// This will:
|
|
111
|
+
// 1. Run terraform apply to deploy resources (VNet, Subnet with delegation, DNS Resolver)
|
|
112
|
+
// 2. Run terraform plan to check idempotency (no changes expected)
|
|
113
|
+
// 3. Run terraform destroy to cleanup resources
|
|
114
|
+
(0, testing_1.TerraformApplyCheckAndDestroy)(synthesized, { verifyCleanup: true });
|
|
115
|
+
}, 600000); // 10 minute timeout for deployment and cleanup
|
|
116
|
+
});
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLXJlc29sdmVyLmludGVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLWRuc3Jlc29sdmVyL3Rlc3QvZG5zLXJlc29sdmVyLmludGVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7O0FBRUgsaUNBQWdDO0FBRWhDLDJDQUF5QztBQUN6QyxpRkFBNkU7QUFDN0UsMERBQXVEO0FBQ3ZELG9GQUFnRjtBQUNoRixrRkFBb0Y7QUFDcEYsMkNBQTZFO0FBQzdFLHlEQUE2RDtBQUM3RCxzREFBa0Q7QUFFbEQsd0RBQXdEO0FBQ3hELE1BQU0sWUFBWSxHQUFHLElBQUksMEJBQWUsQ0FBQyx5QkFBeUIsRUFBRTtJQUNsRSxXQUFXLEVBQUUsQ0FBQztDQUNmLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSx1QkFBd0IsU0FBUSx1QkFBYTtJQUNqRCxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLGNBQWMsRUFBRTtnQkFDZCxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVc7Z0JBQ3JDLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVztnQkFDckMsYUFBYSxFQUFFLFlBQVksQ0FBQyxhQUFhO2FBQzFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsMkJBQTJCO1FBQzNCLElBQUksd0JBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXJDLHdCQUF3QjtRQUN4QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDakQsb0NBQW9DLEVBQ3BDLGFBQWEsQ0FDZCxDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUN4QyxtQ0FBbUMsRUFDbkMsYUFBYSxDQUNkLENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQzFDLDJDQUEyQyxFQUMzQyxhQUFhLENBQ2QsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDL0MsZ0NBQWdDLEVBQ2hDLGFBQWEsQ0FDZCxDQUFDO1FBRUYsd0JBQXdCO1FBQ3hCLE1BQU0sYUFBYSxHQUFHLElBQUksOEJBQWEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQ3ZELElBQUksRUFBRSxpQkFBaUI7WUFDdkIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsSUFBSSxFQUFFO2dCQUNKLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDcEIsT0FBTyxFQUFFLHNCQUFzQjthQUNoQztTQUNGLENBQUMsQ0FBQztRQUVILDBDQUEwQztRQUMxQyxNQUFNLElBQUksR0FBRyxJQUFJLGdDQUFjLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUNqRCxJQUFJLEVBQUUsUUFBUTtZQUNkLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLGVBQWUsRUFBRSxhQUFhLENBQUMsRUFBRTtZQUNqQyxZQUFZLEVBQUU7Z0JBQ1osZUFBZSxFQUFFLENBQUMsYUFBYSxDQUFDO2FBQ2pDO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDcEIsT0FBTyxFQUFFLG1CQUFtQjthQUM3QjtTQUNGLENBQUMsQ0FBQztRQUVILDJEQUEyRDtRQUMzRCxvRkFBb0Y7UUFDcEYsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFNLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFO1lBQ3JELElBQUksRUFBRSxVQUFVO1lBQ2hCLGtCQUFrQixFQUFFLFFBQVE7WUFDNUIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDekIsZUFBZSxFQUFFLGFBQWEsQ0FBQyxFQUFFO1lBQ2pDLGFBQWEsRUFBRSxhQUFhLEVBQUUsZ0NBQWdDO1lBQzlELFdBQVcsRUFBRTtnQkFDWDtvQkFDRSxJQUFJLEVBQUUsZ0NBQWdDO29CQUN0QyxXQUFXLEVBQUUsZ0NBQWdDO29CQUM3QyxPQUFPLEVBQUUsQ0FBQyx1REFBdUQsQ0FBQztpQkFDbkU7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILHVEQUF1RDtRQUN2RCwrREFBK0Q7UUFDL0QsSUFBSSwwQkFBVyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDcEMsSUFBSSxFQUFFLGVBQWU7WUFDckIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsZUFBZSxFQUFFLGFBQWEsQ0FBQyxFQUFFO1lBQ2pDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3pCLElBQUksRUFBRTtnQkFDSixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BCLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixXQUFXLEVBQUUsTUFBTTtnQkFDbkIsT0FBTyxFQUFFLFlBQVk7YUFDdEI7U0FDRixDQUFDLENBQUM7UUFFSCw4REFBOEQ7UUFDOUQsMENBQTBDO1FBQzFDLE1BQU0sQ0FBQztJQUNULENBQUM7Q0FDRjtBQUVELFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUU7SUFDNUMsRUFBRSxDQUFDLDhGQUE4RixFQUFFLEdBQUcsRUFBRTtRQUN0RyxNQUFNLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUNuRSxNQUFNLFdBQVcsR0FBRyxlQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLGFBQWE7UUFDYiwwRkFBMEY7UUFDMUYsbUVBQW1FO1FBQ25FLGdEQUFnRDtRQUNoRCxJQUFBLHVDQUE2QixFQUFDLFdBQVcsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLCtDQUErQztBQUM3RCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCBmb3IgQXp1cmUgRE5TIFByaXZhdGUgUmVzb2x2ZXJcbiAqXG4gKiBUaGlzIHRlc3QgZGVtb25zdHJhdGVzIHVzYWdlIG9mIHRoZSBEbnNSZXNvbHZlciBjb25zdHJ1Y3Qgd2l0aCBwcm9wZXJcbiAqIFZOZXQgYW5kIHN1Ym5ldCBjb25maWd1cmF0aW9uLCBhbmQgdmFsaWRhdGVzIGRlcGxveW1lbnQsIGlkZW1wb3RlbmN5LCBhbmQgY2xlYW51cC5cbiAqXG4gKiBLZXkgUmVxdWlyZW1lbnRzOlxuICogLSBETlMgUmVzb2x2ZXIgcmVxdWlyZXMgYSBkZWRpY2F0ZWQgc3VibmV0XG4gKiAtIFN1Ym5ldCBtdXN0IGJlIGRlbGVnYXRlZCB0byBNaWNyb3NvZnQuTmV0d29yay9kbnNSZXNvbHZlcnNcbiAqIC0gU3VibmV0IG11c3QgYmUgYmV0d2VlbiAvMjggYW5kIC8yNCBpbiBzaXplXG4gKlxuICogUnVuIHdpdGg6IG5wbSBydW4gaW50ZWdyYXRpb246bm9zdHJlYW1cbiAqL1xuXG5pbXBvcnQgeyBUZXN0aW5nIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IFwiY2RrdGYvbGliL3Rlc3RpbmcvYWRhcHRlcnMvamVzdFwiO1xuaW1wb3J0IHsgUmVzb3VyY2VHcm91cCB9IGZyb20gXCIuLi8uLi9henVyZS1yZXNvdXJjZWdyb3VwL2xpYi9yZXNvdXJjZS1ncm91cFwiO1xuaW1wb3J0IHsgU3VibmV0IH0gZnJvbSBcIi4uLy4uL2F6dXJlLXN1Ym5ldC9saWIvc3VibmV0XCI7XG5pbXBvcnQgeyBWaXJ0dWFsTmV0d29yayB9IGZyb20gXCIuLi8uLi9henVyZS12aXJ0dWFsbmV0d29yay9saWIvdmlydHVhbC1uZXR3b3JrXCI7XG5pbXBvcnQgeyBBemFwaVByb3ZpZGVyIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL3Byb3ZpZGVycy1hemFwaS9wcm92aWRlclwiO1xuaW1wb3J0IHsgQmFzZVRlc3RTdGFjaywgVGVycmFmb3JtQXBwbHlDaGVja0FuZERlc3Ryb3kgfSBmcm9tIFwiLi4vLi4vdGVzdGluZ1wiO1xuaW1wb3J0IHsgVGVzdFJ1bk1ldGFkYXRhIH0gZnJvbSBcIi4uLy4uL3Rlc3RpbmcvbGliL21ldGFkYXRhXCI7XG5pbXBvcnQgeyBEbnNSZXNvbHZlciB9IGZyb20gXCIuLi9saWIvZG5zLXJlc29sdmVyXCI7XG5cbi8vIEdlbmVyYXRlIHVuaXF1ZSB0ZXN0IHJ1biBtZXRhZGF0YSBmb3IgdGhpcyB0ZXN0IHN1aXRlXG5jb25zdCB0ZXN0TWV0YWRhdGEgPSBuZXcgVGVzdFJ1bk1ldGFkYXRhKFwiZG5zcmVzb2x2ZXItaW50ZWdyYXRpb25cIiwge1xuICBtYXhBZ2VIb3VyczogNCxcbn0pO1xuXG4vKipcbiAqIEV4YW1wbGUgc3RhY2sgZGVtb25zdHJhdGluZyBETlMgUmVzb2x2ZXIgdXNhZ2VcbiAqL1xuY2xhc3MgRG5zUmVzb2x2ZXJFeGFtcGxlU3RhY2sgZXh0ZW5kcyBCYXNlVGVzdFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgdGVzdFJ1bk9wdGlvbnM6IHtcbiAgICAgICAgbWF4QWdlSG91cnM6IHRlc3RNZXRhZGF0YS5tYXhBZ2VIb3VycyxcbiAgICAgICAgYXV0b0NsZWFudXA6IHRlc3RNZXRhZGF0YS5hdXRvQ2xlYW51cCxcbiAgICAgICAgY2xlYW51cFBvbGljeTogdGVzdE1ldGFkYXRhLmNsZWFudXBQb2xpY3ksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gQ29uZmlndXJlIEFaQVBJIHByb3ZpZGVyXG4gICAgbmV3IEF6YXBpUHJvdmlkZXIodGhpcywgXCJhemFwaVwiLCB7fSk7XG5cbiAgICAvLyBHZW5lcmF0ZSB1bmlxdWUgbmFtZXNcbiAgICBjb25zdCByZXNvdXJjZUdyb3VwTmFtZSA9IHRoaXMuZ2VuZXJhdGVSZXNvdXJjZU5hbWUoXG4gICAgICBcIk1pY3Jvc29mdC5SZXNvdXJjZXMvcmVzb3VyY2VHcm91cHNcIixcbiAgICAgIFwiZG5zcmVzb2x2ZXJcIixcbiAgICApO1xuICAgIGNvbnN0IHZuZXROYW1lID0gdGhpcy5nZW5lcmF0ZVJlc291cmNlTmFtZShcbiAgICAgIFwiTWljcm9zb2Z0Lk5ldHdvcmsvdmlydHVhbE5ldHdvcmtzXCIsXG4gICAgICBcImRuc3Jlc29sdmVyXCIsXG4gICAgKTtcbiAgICBjb25zdCBzdWJuZXROYW1lID0gdGhpcy5nZW5lcmF0ZVJlc291cmNlTmFtZShcbiAgICAgIFwiTWljcm9zb2Z0Lk5ldHdvcmsvdmlydHVhbE5ldHdvcmtzL3N1Ym5ldHNcIixcbiAgICAgIFwiZG5zcmVzb2x2ZXJcIixcbiAgICApO1xuICAgIGNvbnN0IGRuc1Jlc29sdmVyTmFtZSA9IHRoaXMuZ2VuZXJhdGVSZXNvdXJjZU5hbWUoXG4gICAgICBcIk1pY3Jvc29mdC5OZXR3b3JrL2Ruc1Jlc29sdmVyc1wiLFxuICAgICAgXCJkbnNyZXNvbHZlclwiLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgcmVzb3VyY2UgZ3JvdXBcbiAgICBjb25zdCByZXNvdXJjZUdyb3VwID0gbmV3IFJlc291cmNlR3JvdXAodGhpcywgXCJ0ZXN0LXJnXCIsIHtcbiAgICAgIG5hbWU6IHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICB0YWdzOiB7XG4gICAgICAgIC4uLnRoaXMuc3lzdGVtVGFncygpLFxuICAgICAgICBwdXJwb3NlOiBcImRucy1yZXNvbHZlci10ZXN0aW5nXCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHZpcnR1YWwgbmV0d29yayBmb3IgRE5TIHJlc29sdmVyXG4gICAgY29uc3Qgdm5ldCA9IG5ldyBWaXJ0dWFsTmV0d29yayh0aGlzLCBcInRlc3Qtdm5ldFwiLCB7XG4gICAgICBuYW1lOiB2bmV0TmFtZSxcbiAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgYWRkcmVzc1NwYWNlOiB7XG4gICAgICAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4wLjAvMTZcIl0sXG4gICAgICB9LFxuICAgICAgdGFnczoge1xuICAgICAgICAuLi50aGlzLnN5c3RlbVRhZ3MoKSxcbiAgICAgICAgcHVycG9zZTogXCJkbnMtcmVzb2x2ZXItdm5ldFwiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBkZWRpY2F0ZWQgc3VibmV0IGZvciBETlMgcmVzb2x2ZXIgd2l0aCBkZWxlZ2F0aW9uXG4gICAgLy8gU3VibmV0IG11c3QgYmUgLzI4IHRvIC8yNCBpbiBzaXplIGFuZCBkZWxlZ2F0ZWQgdG8gTWljcm9zb2Z0Lk5ldHdvcmsvZG5zUmVzb2x2ZXJzXG4gICAgY29uc3Qgc3VibmV0ID0gbmV3IFN1Ym5ldCh0aGlzLCBcImRucy1yZXNvbHZlci1zdWJuZXRcIiwge1xuICAgICAgbmFtZTogc3VibmV0TmFtZSxcbiAgICAgIHZpcnR1YWxOZXR3b3JrTmFtZTogdm5ldE5hbWUsXG4gICAgICB2aXJ0dWFsTmV0d29ya0lkOiB2bmV0LmlkLFxuICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgYWRkcmVzc1ByZWZpeDogXCIxMC4wLjEuMC8yOFwiLCAvLyAvMjggc3VibmV0IChzbWFsbGVzdCBhbGxvd2VkKVxuICAgICAgZGVsZWdhdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiTWljcm9zb2Z0Lk5ldHdvcmsuZG5zUmVzb2x2ZXJzXCIsXG4gICAgICAgICAgc2VydmljZU5hbWU6IFwiTWljcm9zb2Z0Lk5ldHdvcmsvZG5zUmVzb2x2ZXJzXCIsXG4gICAgICAgICAgYWN0aW9uczogW1wiTWljcm9zb2Z0Lk5ldHdvcmsvdmlydHVhbE5ldHdvcmtzL3N1Ym5ldHMvam9pbi9hY3Rpb25cIl0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIEROUyByZXNvbHZlciB3aXRoIGNvbXByZWhlbnNpdmUgY29uZmlndXJhdGlvblxuICAgIC8vIE5vdGU6IEF6dXJlIG9ubHkgYWxsb3dzIG9uZSBETlMgUmVzb2x2ZXIgcGVyIFZpcnR1YWwgTmV0d29ya1xuICAgIG5ldyBEbnNSZXNvbHZlcih0aGlzLCBcImRucy1yZXNvbHZlclwiLCB7XG4gICAgICBuYW1lOiBkbnNSZXNvbHZlck5hbWUsXG4gICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgIHZpcnR1YWxOZXR3b3JrSWQ6IHZuZXQuaWQsXG4gICAgICB0YWdzOiB7XG4gICAgICAgIC4uLnRoaXMuc3lzdGVtVGFncygpLFxuICAgICAgICBleGFtcGxlOiBcImNvbXBsZXRlXCIsXG4gICAgICAgIGVudmlyb25tZW50OiBcInRlc3RcIixcbiAgICAgICAgcHVycG9zZTogXCJoeWJyaWQtZG5zXCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIGRlcGVuZGVuY3kgdG8gZW5zdXJlIHN1Ym5ldCBpcyBjcmVhdGVkIGJlZm9yZSByZXNvbHZlcnNcbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGRlbGVnYXRpb24gaXMgaW4gcGxhY2VcbiAgICBzdWJuZXQ7XG4gIH1cbn1cblxuZGVzY3JpYmUoXCJEbnNSZXNvbHZlciBJbnRlZ3JhdGlvbiBUZXN0XCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgZGVwbG95IEROUyByZXNvbHZlciB3aXRoIFZOZXQgYW5kIGRlbGVnYXRlZCBzdWJuZXQsIHZhbGlkYXRlIGlkZW1wb3RlbmN5LCBhbmQgY2xlYW51cFwiLCAoKSA9PiB7XG4gICAgY29uc3QgYXBwID0gVGVzdGluZy5hcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBEbnNSZXNvbHZlckV4YW1wbGVTdGFjayhhcHAsIFwidGVzdC1kbnNyZXNvbHZlclwiKTtcbiAgICBjb25zdCBzeW50aGVzaXplZCA9IFRlc3RpbmcuZnVsbFN5bnRoKHN0YWNrKTtcblxuICAgIC8vIFRoaXMgd2lsbDpcbiAgICAvLyAxLiBSdW4gdGVycmFmb3JtIGFwcGx5IHRvIGRlcGxveSByZXNvdXJjZXMgKFZOZXQsIFN1Ym5ldCB3aXRoIGRlbGVnYXRpb24sIEROUyBSZXNvbHZlcilcbiAgICAvLyAyLiBSdW4gdGVycmFmb3JtIHBsYW4gdG8gY2hlY2sgaWRlbXBvdGVuY3kgKG5vIGNoYW5nZXMgZXhwZWN0ZWQpXG4gICAgLy8gMy4gUnVuIHRlcnJhZm9ybSBkZXN0cm95IHRvIGNsZWFudXAgcmVzb3VyY2VzXG4gICAgVGVycmFmb3JtQXBwbHlDaGVja0FuZERlc3Ryb3koc3ludGhlc2l6ZWQsIHsgdmVyaWZ5Q2xlYW51cDogdHJ1ZSB9KTtcbiAgfSwgNjAwMDAwKTsgLy8gMTAgbWludXRlIHRpbWVvdXQgZm9yIGRlcGxveW1lbnQgYW5kIGNsZWFudXBcbn0pO1xuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive tests for the unified DnsResolver implementation
|
|
3
|
+
*
|
|
4
|
+
* This test suite validates the unified DnsResolver class using the
|
|
5
|
+
* VersionedAzapiResource framework. Tests cover automatic version resolution,
|
|
6
|
+
* explicit version pinning, schema validation, property transformation, and
|
|
7
|
+
* full backward compatibility.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|