@microsoft/terraform-cdk-constructs 1.3.1 → 1.4.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 +10617 -7822
- package/API.md +25592 -20586
- package/lib/azure-actiongroup/lib/action-group.js +1 -1
- package/lib/azure-activitylogalert/lib/activity-log-alert.js +1 -1
- package/lib/azure-aks/lib/aks-cluster.js +1 -1
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +1 -1
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +1 -1
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +1 -1
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +1 -1
- package/lib/azure-dnsresolver/lib/dns-resolver.js +1 -1
- package/lib/azure-dnsresolver/lib/inbound-endpoint.js +1 -1
- package/lib/azure-dnsresolver/lib/outbound-endpoint.js +1 -1
- package/lib/azure-dnszone/lib/dns-zone.js +1 -1
- package/lib/azure-metricalert/lib/metric-alert.js +1 -1
- package/lib/azure-networkinterface/lib/network-interface.js +1 -1
- package/lib/azure-networksecuritygroup/lib/network-security-group.js +1 -1
- package/lib/azure-policyassignment/lib/policy-assignment.js +1 -1
- package/lib/azure-policydefinition/lib/policy-definition.js +1 -1
- package/lib/azure-privatednszone/lib/private-dns-zone.js +1 -1
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +1 -1
- package/lib/azure-publicipaddress/lib/public-ip-address.js +1 -1
- package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
- package/lib/azure-roleassignment/lib/role-assignment.js +1 -1
- package/lib/azure-roledefinition/lib/role-definition.js +1 -1
- package/lib/azure-storageaccount/lib/storage-account.js +1 -1
- package/lib/azure-subnet/lib/subnet.js +1 -1
- package/lib/azure-virtualmachine/lib/virtual-machine.js +1 -1
- package/lib/azure-virtualnetwork/lib/virtual-network.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/index.d.ts +5 -0
- package/lib/azure-virtualnetworkmanager/lib/index.js +6 -1
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool-schemas.d.ts +24 -0
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool-schemas.js +169 -0
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr-schemas.js +206 -0
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.d.ts +170 -0
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.js +214 -0
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool.d.ts +175 -0
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool.js +206 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/network-group.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/utils/cidr-validator.d.ts +225 -0
- package/lib/azure-virtualnetworkmanager/lib/utils/cidr-validator.js +389 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.d.ts +56 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +29 -2
- package/lib/azure-virtualnetworkmanager/test/cidr-validator.spec.d.ts +6 -0
- package/lib/azure-virtualnetworkmanager/test/cidr-validator.spec.js +292 -0
- package/lib/azure-virtualnetworkmanager/test/ipam-pool-static-cidr.spec.d.ts +6 -0
- package/lib/azure-virtualnetworkmanager/test/ipam-pool-static-cidr.spec.js +430 -0
- package/lib/azure-virtualnetworkmanager/test/ipam-pool.spec.d.ts +6 -0
- package/lib/azure-virtualnetworkmanager/test/ipam-pool.spec.js +372 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.d.ts +2 -1
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.js +30 -3
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.js +105 -1
- package/lib/azure-vmss/lib/virtual-machine-scale-set.js +1 -1
- package/lib/core-azure/lib/azapi/azapi-resource.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 +1 -1
- 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/schema-mapper/schema-mapper.js +1 -1
- 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/testing/index.js +2 -2
- package/lib/testing/lib/cleanup.js +1 -1
- package/lib/testing/lib/metadata.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* API schemas for Azure Virtual Network Manager IPAM Pool Static CIDRs across all supported versions
|
|
4
|
+
*
|
|
5
|
+
* This file defines the complete API schemas for Microsoft.Network/networkManagers/ipamPools/staticCidrs
|
|
6
|
+
* across all supported API versions. The schemas are used by the AzapiResource
|
|
7
|
+
* framework for validation, transformation, and version management.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.STATIC_CIDR_TYPE = exports.ALL_STATIC_CIDR_VERSIONS = exports.STATIC_CIDR_VERSION_2023_11_01 = exports.STATIC_CIDR_VERSION_2024_05_01 = exports.STATIC_CIDR_SCHEMA_2023_11_01 = exports.STATIC_CIDR_SCHEMA_2024_05_01 = void 0;
|
|
11
|
+
const version_interfaces_1 = require("../../core-azure/lib/version-manager/interfaces/version-interfaces");
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// COMMON PROPERTY DEFINITIONS
|
|
14
|
+
// =============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Common property definitions shared across all Static CIDR versions
|
|
17
|
+
*/
|
|
18
|
+
const COMMON_PROPERTIES = {
|
|
19
|
+
name: {
|
|
20
|
+
dataType: version_interfaces_1.PropertyType.STRING,
|
|
21
|
+
required: true,
|
|
22
|
+
description: "Name of the static CIDR",
|
|
23
|
+
validation: [
|
|
24
|
+
{
|
|
25
|
+
ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
|
|
26
|
+
message: "Static CIDR name is required",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
ruleType: version_interfaces_1.ValidationRuleType.PATTERN_MATCH,
|
|
30
|
+
value: "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,62}[a-zA-Z0-9_]$",
|
|
31
|
+
message: "Static CIDR name must be 2-64 chars, alphanumeric, periods, underscores, hyphens",
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
ipamPoolId: {
|
|
36
|
+
dataType: version_interfaces_1.PropertyType.STRING,
|
|
37
|
+
required: true,
|
|
38
|
+
description: "Resource ID of the parent IPAM Pool",
|
|
39
|
+
validation: [
|
|
40
|
+
{
|
|
41
|
+
ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
|
|
42
|
+
message: "IPAM Pool ID is required",
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
addressPrefixes: {
|
|
47
|
+
dataType: version_interfaces_1.PropertyType.ARRAY,
|
|
48
|
+
required: true,
|
|
49
|
+
description: "Array of IP address prefixes in CIDR notation (Azure API property)",
|
|
50
|
+
validation: [
|
|
51
|
+
{
|
|
52
|
+
ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
|
|
53
|
+
message: "Address prefixes are required",
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
description: {
|
|
58
|
+
dataType: version_interfaces_1.PropertyType.STRING,
|
|
59
|
+
required: false,
|
|
60
|
+
description: "Description of the static CIDR allocation",
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
// =============================================================================
|
|
64
|
+
// VERSION-SPECIFIC SCHEMAS
|
|
65
|
+
// =============================================================================
|
|
66
|
+
/**
|
|
67
|
+
* API Schema for Static CIDR version 2024-05-01
|
|
68
|
+
*/
|
|
69
|
+
exports.STATIC_CIDR_SCHEMA_2024_05_01 = {
|
|
70
|
+
resourceType: "Microsoft.Network/networkManagers/ipamPools/staticCidrs",
|
|
71
|
+
version: "2024-05-01",
|
|
72
|
+
properties: {
|
|
73
|
+
...COMMON_PROPERTIES,
|
|
74
|
+
},
|
|
75
|
+
required: ["name", "ipamPoolId", "addressPrefixes"],
|
|
76
|
+
optional: ["description"],
|
|
77
|
+
deprecated: [],
|
|
78
|
+
transformationRules: {},
|
|
79
|
+
validationRules: [
|
|
80
|
+
{
|
|
81
|
+
property: "name",
|
|
82
|
+
rules: [
|
|
83
|
+
{
|
|
84
|
+
ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
|
|
85
|
+
message: "Static CIDR name is required",
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
property: "ipamPoolId",
|
|
91
|
+
rules: [
|
|
92
|
+
{
|
|
93
|
+
ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
|
|
94
|
+
message: "IPAM Pool ID is required",
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
property: "addressPrefixes",
|
|
100
|
+
rules: [
|
|
101
|
+
{
|
|
102
|
+
ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
|
|
103
|
+
message: "Address prefixes are required",
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* API Schema for Static CIDR version 2023-11-01
|
|
111
|
+
*/
|
|
112
|
+
exports.STATIC_CIDR_SCHEMA_2023_11_01 = {
|
|
113
|
+
resourceType: "Microsoft.Network/networkManagers/ipamPools/staticCidrs",
|
|
114
|
+
version: "2023-11-01",
|
|
115
|
+
properties: {
|
|
116
|
+
...COMMON_PROPERTIES,
|
|
117
|
+
},
|
|
118
|
+
required: ["name", "ipamPoolId", "addressPrefixes"],
|
|
119
|
+
optional: ["description"],
|
|
120
|
+
deprecated: [],
|
|
121
|
+
transformationRules: {},
|
|
122
|
+
validationRules: [
|
|
123
|
+
{
|
|
124
|
+
property: "name",
|
|
125
|
+
rules: [
|
|
126
|
+
{
|
|
127
|
+
ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
|
|
128
|
+
message: "Static CIDR name is required",
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
property: "ipamPoolId",
|
|
134
|
+
rules: [
|
|
135
|
+
{
|
|
136
|
+
ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
|
|
137
|
+
message: "IPAM Pool ID is required",
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
property: "addressPrefixes",
|
|
143
|
+
rules: [
|
|
144
|
+
{
|
|
145
|
+
ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
|
|
146
|
+
message: "Address prefixes are required",
|
|
147
|
+
},
|
|
148
|
+
],
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
};
|
|
152
|
+
// =============================================================================
|
|
153
|
+
// VERSION CONFIGURATIONS
|
|
154
|
+
// =============================================================================
|
|
155
|
+
/**
|
|
156
|
+
* Version configuration for Static CIDR 2024-05-01
|
|
157
|
+
*/
|
|
158
|
+
exports.STATIC_CIDR_VERSION_2024_05_01 = {
|
|
159
|
+
version: "2024-05-01",
|
|
160
|
+
schema: exports.STATIC_CIDR_SCHEMA_2024_05_01,
|
|
161
|
+
supportLevel: version_interfaces_1.VersionSupportLevel.ACTIVE,
|
|
162
|
+
releaseDate: "2024-05-01",
|
|
163
|
+
deprecationDate: undefined,
|
|
164
|
+
sunsetDate: undefined,
|
|
165
|
+
breakingChanges: [],
|
|
166
|
+
migrationGuide: "/docs/ipam/migration-2024-05-01",
|
|
167
|
+
changeLog: [
|
|
168
|
+
{
|
|
169
|
+
changeType: "added",
|
|
170
|
+
description: "Latest stable release with full static CIDR support",
|
|
171
|
+
breaking: false,
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* Version configuration for Static CIDR 2023-11-01
|
|
177
|
+
*/
|
|
178
|
+
exports.STATIC_CIDR_VERSION_2023_11_01 = {
|
|
179
|
+
version: "2023-11-01",
|
|
180
|
+
schema: exports.STATIC_CIDR_SCHEMA_2023_11_01,
|
|
181
|
+
supportLevel: version_interfaces_1.VersionSupportLevel.MAINTENANCE,
|
|
182
|
+
releaseDate: "2023-11-01",
|
|
183
|
+
deprecationDate: undefined,
|
|
184
|
+
sunsetDate: undefined,
|
|
185
|
+
breakingChanges: [],
|
|
186
|
+
migrationGuide: "/docs/ipam/migration-2023-11-01",
|
|
187
|
+
changeLog: [
|
|
188
|
+
{
|
|
189
|
+
changeType: "added",
|
|
190
|
+
description: "Stable release with core static CIDR features",
|
|
191
|
+
breaking: false,
|
|
192
|
+
},
|
|
193
|
+
],
|
|
194
|
+
};
|
|
195
|
+
/**
|
|
196
|
+
* All supported Static CIDR versions for registration
|
|
197
|
+
*/
|
|
198
|
+
exports.ALL_STATIC_CIDR_VERSIONS = [
|
|
199
|
+
exports.STATIC_CIDR_VERSION_2024_05_01,
|
|
200
|
+
exports.STATIC_CIDR_VERSION_2023_11_01,
|
|
201
|
+
];
|
|
202
|
+
/**
|
|
203
|
+
* Resource type constant
|
|
204
|
+
*/
|
|
205
|
+
exports.STATIC_CIDR_TYPE = "Microsoft.Network/networkManagers/ipamPools/staticCidrs";
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbS1wb29sLXN0YXRpYy1jaWRyLXNjaGVtYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtdmlydHVhbG5ldHdvcmttYW5hZ2VyL2xpYi9pcGFtLXBvb2wtc3RhdGljLWNpZHItc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCwyR0FPNEU7QUFFNUUsZ0ZBQWdGO0FBQ2hGLDhCQUE4QjtBQUM5QixnRkFBZ0Y7QUFFaEY7O0dBRUc7QUFDSCxNQUFNLGlCQUFpQixHQUEwQztJQUMvRCxJQUFJLEVBQUU7UUFDSixRQUFRLEVBQUUsaUNBQVksQ0FBQyxNQUFNO1FBQzdCLFFBQVEsRUFBRSxJQUFJO1FBQ2QsV0FBVyxFQUFFLHlCQUF5QjtRQUN0QyxVQUFVLEVBQUU7WUFDVjtnQkFDRSxRQUFRLEVBQUUsdUNBQWtCLENBQUMsUUFBUTtnQkFDckMsT0FBTyxFQUFFLDhCQUE4QjthQUN4QztZQUNEO2dCQUNFLFFBQVEsRUFBRSx1Q0FBa0IsQ0FBQyxhQUFhO2dCQUMxQyxLQUFLLEVBQUUsK0NBQStDO2dCQUN0RCxPQUFPLEVBQ0wsa0ZBQWtGO2FBQ3JGO1NBQ0Y7S0FDRjtJQUNELFVBQVUsRUFBRTtRQUNWLFFBQVEsRUFBRSxpQ0FBWSxDQUFDLE1BQU07UUFDN0IsUUFBUSxFQUFFLElBQUk7UUFDZCxXQUFXLEVBQUUscUNBQXFDO1FBQ2xELFVBQVUsRUFBRTtZQUNWO2dCQUNFLFFBQVEsRUFBRSx1Q0FBa0IsQ0FBQyxRQUFRO2dCQUNyQyxPQUFPLEVBQUUsMEJBQTBCO2FBQ3BDO1NBQ0Y7S0FDRjtJQUNELGVBQWUsRUFBRTtRQUNmLFFBQVEsRUFBRSxpQ0FBWSxDQUFDLEtBQUs7UUFDNUIsUUFBUSxFQUFFLElBQUk7UUFDZCxXQUFXLEVBQ1Qsb0VBQW9FO1FBQ3RFLFVBQVUsRUFBRTtZQUNWO2dCQUNFLFFBQVEsRUFBRSx1Q0FBa0IsQ0FBQyxRQUFRO2dCQUNyQyxPQUFPLEVBQUUsK0JBQStCO2FBQ3pDO1NBQ0Y7S0FDRjtJQUNELFdBQVcsRUFBRTtRQUNYLFFBQVEsRUFBRSxpQ0FBWSxDQUFDLE1BQU07UUFDN0IsUUFBUSxFQUFFLEtBQUs7UUFDZixXQUFXLEVBQUUsMkNBQTJDO0tBQ3pEO0NBQ0YsQ0FBQztBQUVGLGdGQUFnRjtBQUNoRiwyQkFBMkI7QUFDM0IsZ0ZBQWdGO0FBRWhGOztHQUVHO0FBQ1UsUUFBQSw2QkFBNkIsR0FBYztJQUN0RCxZQUFZLEVBQUUseURBQXlEO0lBQ3ZFLE9BQU8sRUFBRSxZQUFZO0lBQ3JCLFVBQVUsRUFBRTtRQUNWLEdBQUcsaUJBQWlCO0tBQ3JCO0lBQ0QsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsQ0FBQztJQUNuRCxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDekIsVUFBVSxFQUFFLEVBQUU7SUFDZCxtQkFBbUIsRUFBRSxFQUFFO0lBQ3ZCLGVBQWUsRUFBRTtRQUNmO1lBQ0UsUUFBUSxFQUFFLE1BQU07WUFDaEIsS0FBSyxFQUFFO2dCQUNMO29CQUNFLFFBQVEsRUFBRSx1Q0FBa0IsQ0FBQyxRQUFRO29CQUNyQyxPQUFPLEVBQUUsOEJBQThCO2lCQUN4QzthQUNGO1NBQ0Y7UUFDRDtZQUNFLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLEtBQUssRUFBRTtnQkFDTDtvQkFDRSxRQUFRLEVBQUUsdUNBQWtCLENBQUMsUUFBUTtvQkFDckMsT0FBTyxFQUFFLDBCQUEwQjtpQkFDcEM7YUFDRjtTQUNGO1FBQ0Q7WUFDRSxRQUFRLEVBQUUsaUJBQWlCO1lBQzNCLEtBQUssRUFBRTtnQkFDTDtvQkFDRSxRQUFRLEVBQUUsdUNBQWtCLENBQUMsUUFBUTtvQkFDckMsT0FBTyxFQUFFLCtCQUErQjtpQkFDekM7YUFDRjtTQUNGO0tBQ0Y7Q0FDRixDQUFDO0FBRUY7O0dBRUc7QUFDVSxRQUFBLDZCQUE2QixHQUFjO0lBQ3RELFlBQVksRUFBRSx5REFBeUQ7SUFDdkUsT0FBTyxFQUFFLFlBQVk7SUFDckIsVUFBVSxFQUFFO1FBQ1YsR0FBRyxpQkFBaUI7S0FDckI7SUFDRCxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixDQUFDO0lBQ25ELFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQztJQUN6QixVQUFVLEVBQUUsRUFBRTtJQUNkLG1CQUFtQixFQUFFLEVBQUU7SUFDdkIsZUFBZSxFQUFFO1FBQ2Y7WUFDRSxRQUFRLEVBQUUsTUFBTTtZQUNoQixLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsUUFBUSxFQUFFLHVDQUFrQixDQUFDLFFBQVE7b0JBQ3JDLE9BQU8sRUFBRSw4QkFBOEI7aUJBQ3hDO2FBQ0Y7U0FDRjtRQUNEO1lBQ0UsUUFBUSxFQUFFLFlBQVk7WUFDdEIsS0FBSyxFQUFFO2dCQUNMO29CQUNFLFFBQVEsRUFBRSx1Q0FBa0IsQ0FBQyxRQUFRO29CQUNyQyxPQUFPLEVBQUUsMEJBQTBCO2lCQUNwQzthQUNGO1NBQ0Y7UUFDRDtZQUNFLFFBQVEsRUFBRSxpQkFBaUI7WUFDM0IsS0FBSyxFQUFFO2dCQUNMO29CQUNFLFFBQVEsRUFBRSx1Q0FBa0IsQ0FBQyxRQUFRO29CQUNyQyxPQUFPLEVBQUUsK0JBQStCO2lCQUN6QzthQUNGO1NBQ0Y7S0FDRjtDQUNGLENBQUM7QUFFRixnRkFBZ0Y7QUFDaEYseUJBQXlCO0FBQ3pCLGdGQUFnRjtBQUVoRjs7R0FFRztBQUNVLFFBQUEsOEJBQThCLEdBQWtCO0lBQzNELE9BQU8sRUFBRSxZQUFZO0lBQ3JCLE1BQU0sRUFBRSxxQ0FBNkI7SUFDckMsWUFBWSxFQUFFLHdDQUFtQixDQUFDLE1BQU07SUFDeEMsV0FBVyxFQUFFLFlBQVk7SUFDekIsZUFBZSxFQUFFLFNBQVM7SUFDMUIsVUFBVSxFQUFFLFNBQVM7SUFDckIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsY0FBYyxFQUFFLGlDQUFpQztJQUNqRCxTQUFTLEVBQUU7UUFDVDtZQUNFLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFdBQVcsRUFBRSxxREFBcUQ7WUFDbEUsUUFBUSxFQUFFLEtBQUs7U0FDaEI7S0FDRjtDQUNGLENBQUM7QUFFRjs7R0FFRztBQUNVLFFBQUEsOEJBQThCLEdBQWtCO0lBQzNELE9BQU8sRUFBRSxZQUFZO0lBQ3JCLE1BQU0sRUFBRSxxQ0FBNkI7SUFDckMsWUFBWSxFQUFFLHdDQUFtQixDQUFDLFdBQVc7SUFDN0MsV0FBVyxFQUFFLFlBQVk7SUFDekIsZUFBZSxFQUFFLFNBQVM7SUFDMUIsVUFBVSxFQUFFLFNBQVM7SUFDckIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsY0FBYyxFQUFFLGlDQUFpQztJQUNqRCxTQUFTLEVBQUU7UUFDVDtZQUNFLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFdBQVcsRUFBRSwrQ0FBK0M7WUFDNUQsUUFBUSxFQUFFLEtBQUs7U0FDaEI7S0FDRjtDQUNGLENBQUM7QUFFRjs7R0FFRztBQUNVLFFBQUEsd0JBQXdCLEdBQW9CO0lBQ3ZELHNDQUE4QjtJQUM5QixzQ0FBOEI7Q0FDL0IsQ0FBQztBQUVGOztHQUVHO0FBQ1UsUUFBQSxnQkFBZ0IsR0FDM0IseURBQXlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFQSSBzY2hlbWFzIGZvciBBenVyZSBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlciBJUEFNIFBvb2wgU3RhdGljIENJRFJzIGFjcm9zcyBhbGwgc3VwcG9ydGVkIHZlcnNpb25zXG4gKlxuICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIGNvbXBsZXRlIEFQSSBzY2hlbWFzIGZvciBNaWNyb3NvZnQuTmV0d29yay9uZXR3b3JrTWFuYWdlcnMvaXBhbVBvb2xzL3N0YXRpY0NpZHJzXG4gKiBhY3Jvc3MgYWxsIHN1cHBvcnRlZCBBUEkgdmVyc2lvbnMuIFRoZSBzY2hlbWFzIGFyZSB1c2VkIGJ5IHRoZSBBemFwaVJlc291cmNlXG4gKiBmcmFtZXdvcmsgZm9yIHZhbGlkYXRpb24sIHRyYW5zZm9ybWF0aW9uLCBhbmQgdmVyc2lvbiBtYW5hZ2VtZW50LlxuICovXG5cbmltcG9ydCB7XG4gIEFwaVNjaGVtYSxcbiAgUHJvcGVydHlEZWZpbml0aW9uLFxuICBQcm9wZXJ0eVR5cGUsXG4gIFZhbGlkYXRpb25SdWxlVHlwZSxcbiAgVmVyc2lvbkNvbmZpZyxcbiAgVmVyc2lvblN1cHBvcnRMZXZlbCxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9pbnRlcmZhY2VzL3ZlcnNpb24taW50ZXJmYWNlc1wiO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ09NTU9OIFBST1BFUlRZIERFRklOSVRJT05TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENvbW1vbiBwcm9wZXJ0eSBkZWZpbml0aW9ucyBzaGFyZWQgYWNyb3NzIGFsbCBTdGF0aWMgQ0lEUiB2ZXJzaW9uc1xuICovXG5jb25zdCBDT01NT05fUFJPUEVSVElFUzogeyBba2V5OiBzdHJpbmddOiBQcm9wZXJ0eURlZmluaXRpb24gfSA9IHtcbiAgbmFtZToge1xuICAgIGRhdGFUeXBlOiBQcm9wZXJ0eVR5cGUuU1RSSU5HLFxuICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIGRlc2NyaXB0aW9uOiBcIk5hbWUgb2YgdGhlIHN0YXRpYyBDSURSXCIsXG4gICAgdmFsaWRhdGlvbjogW1xuICAgICAge1xuICAgICAgICBydWxlVHlwZTogVmFsaWRhdGlvblJ1bGVUeXBlLlJFUVVJUkVELFxuICAgICAgICBtZXNzYWdlOiBcIlN0YXRpYyBDSURSIG5hbWUgaXMgcmVxdWlyZWRcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJ1bGVUeXBlOiBWYWxpZGF0aW9uUnVsZVR5cGUuUEFUVEVSTl9NQVRDSCxcbiAgICAgICAgdmFsdWU6IFwiXlthLXpBLVowLTldW2EtekEtWjAtOS5fLV17MCw2Mn1bYS16QS1aMC05X10kXCIsXG4gICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgXCJTdGF0aWMgQ0lEUiBuYW1lIG11c3QgYmUgMi02NCBjaGFycywgYWxwaGFudW1lcmljLCBwZXJpb2RzLCB1bmRlcnNjb3JlcywgaHlwaGVuc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICBpcGFtUG9vbElkOiB7XG4gICAgZGF0YVR5cGU6IFByb3BlcnR5VHlwZS5TVFJJTkcsXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgZGVzY3JpcHRpb246IFwiUmVzb3VyY2UgSUQgb2YgdGhlIHBhcmVudCBJUEFNIFBvb2xcIixcbiAgICB2YWxpZGF0aW9uOiBbXG4gICAgICB7XG4gICAgICAgIHJ1bGVUeXBlOiBWYWxpZGF0aW9uUnVsZVR5cGUuUkVRVUlSRUQsXG4gICAgICAgIG1lc3NhZ2U6IFwiSVBBTSBQb29sIElEIGlzIHJlcXVpcmVkXCIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIGFkZHJlc3NQcmVmaXhlczoge1xuICAgIGRhdGFUeXBlOiBQcm9wZXJ0eVR5cGUuQVJSQVksXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIkFycmF5IG9mIElQIGFkZHJlc3MgcHJlZml4ZXMgaW4gQ0lEUiBub3RhdGlvbiAoQXp1cmUgQVBJIHByb3BlcnR5KVwiLFxuICAgIHZhbGlkYXRpb246IFtcbiAgICAgIHtcbiAgICAgICAgcnVsZVR5cGU6IFZhbGlkYXRpb25SdWxlVHlwZS5SRVFVSVJFRCxcbiAgICAgICAgbWVzc2FnZTogXCJBZGRyZXNzIHByZWZpeGVzIGFyZSByZXF1aXJlZFwiLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICBkZXNjcmlwdGlvbjoge1xuICAgIGRhdGFUeXBlOiBQcm9wZXJ0eVR5cGUuU1RSSU5HLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZXNjcmlwdGlvbjogXCJEZXNjcmlwdGlvbiBvZiB0aGUgc3RhdGljIENJRFIgYWxsb2NhdGlvblwiLFxuICB9LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFZFUlNJT04tU1BFQ0lGSUMgU0NIRU1BU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBBUEkgU2NoZW1hIGZvciBTdGF0aWMgQ0lEUiB2ZXJzaW9uIDIwMjQtMDUtMDFcbiAqL1xuZXhwb3J0IGNvbnN0IFNUQVRJQ19DSURSX1NDSEVNQV8yMDI0XzA1XzAxOiBBcGlTY2hlbWEgPSB7XG4gIHJlc291cmNlVHlwZTogXCJNaWNyb3NvZnQuTmV0d29yay9uZXR3b3JrTWFuYWdlcnMvaXBhbVBvb2xzL3N0YXRpY0NpZHJzXCIsXG4gIHZlcnNpb246IFwiMjAyNC0wNS0wMVwiLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgLi4uQ09NTU9OX1BST1BFUlRJRVMsXG4gIH0sXG4gIHJlcXVpcmVkOiBbXCJuYW1lXCIsIFwiaXBhbVBvb2xJZFwiLCBcImFkZHJlc3NQcmVmaXhlc1wiXSxcbiAgb3B0aW9uYWw6IFtcImRlc2NyaXB0aW9uXCJdLFxuICBkZXByZWNhdGVkOiBbXSxcbiAgdHJhbnNmb3JtYXRpb25SdWxlczoge30sXG4gIHZhbGlkYXRpb25SdWxlczogW1xuICAgIHtcbiAgICAgIHByb3BlcnR5OiBcIm5hbWVcIixcbiAgICAgIHJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBydWxlVHlwZTogVmFsaWRhdGlvblJ1bGVUeXBlLlJFUVVJUkVELFxuICAgICAgICAgIG1lc3NhZ2U6IFwiU3RhdGljIENJRFIgbmFtZSBpcyByZXF1aXJlZFwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3BlcnR5OiBcImlwYW1Qb29sSWRcIixcbiAgICAgIHJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBydWxlVHlwZTogVmFsaWRhdGlvblJ1bGVUeXBlLlJFUVVJUkVELFxuICAgICAgICAgIG1lc3NhZ2U6IFwiSVBBTSBQb29sIElEIGlzIHJlcXVpcmVkXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvcGVydHk6IFwiYWRkcmVzc1ByZWZpeGVzXCIsXG4gICAgICBydWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgcnVsZVR5cGU6IFZhbGlkYXRpb25SdWxlVHlwZS5SRVFVSVJFRCxcbiAgICAgICAgICBtZXNzYWdlOiBcIkFkZHJlc3MgcHJlZml4ZXMgYXJlIHJlcXVpcmVkXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0sXG59O1xuXG4vKipcbiAqIEFQSSBTY2hlbWEgZm9yIFN0YXRpYyBDSURSIHZlcnNpb24gMjAyMy0xMS0wMVxuICovXG5leHBvcnQgY29uc3QgU1RBVElDX0NJRFJfU0NIRU1BXzIwMjNfMTFfMDE6IEFwaVNjaGVtYSA9IHtcbiAgcmVzb3VyY2VUeXBlOiBcIk1pY3Jvc29mdC5OZXR3b3JrL25ldHdvcmtNYW5hZ2Vycy9pcGFtUG9vbHMvc3RhdGljQ2lkcnNcIixcbiAgdmVyc2lvbjogXCIyMDIzLTExLTAxXCIsXG4gIHByb3BlcnRpZXM6IHtcbiAgICAuLi5DT01NT05fUFJPUEVSVElFUyxcbiAgfSxcbiAgcmVxdWlyZWQ6IFtcIm5hbWVcIiwgXCJpcGFtUG9vbElkXCIsIFwiYWRkcmVzc1ByZWZpeGVzXCJdLFxuICBvcHRpb25hbDogW1wiZGVzY3JpcHRpb25cIl0sXG4gIGRlcHJlY2F0ZWQ6IFtdLFxuICB0cmFuc2Zvcm1hdGlvblJ1bGVzOiB7fSxcbiAgdmFsaWRhdGlvblJ1bGVzOiBbXG4gICAge1xuICAgICAgcHJvcGVydHk6IFwibmFtZVwiLFxuICAgICAgcnVsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJ1bGVUeXBlOiBWYWxpZGF0aW9uUnVsZVR5cGUuUkVRVUlSRUQsXG4gICAgICAgICAgbWVzc2FnZTogXCJTdGF0aWMgQ0lEUiBuYW1lIGlzIHJlcXVpcmVkXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvcGVydHk6IFwiaXBhbVBvb2xJZFwiLFxuICAgICAgcnVsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJ1bGVUeXBlOiBWYWxpZGF0aW9uUnVsZVR5cGUuUkVRVUlSRUQsXG4gICAgICAgICAgbWVzc2FnZTogXCJJUEFNIFBvb2wgSUQgaXMgcmVxdWlyZWRcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm9wZXJ0eTogXCJhZGRyZXNzUHJlZml4ZXNcIixcbiAgICAgIHJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBydWxlVHlwZTogVmFsaWRhdGlvblJ1bGVUeXBlLlJFUVVJUkVELFxuICAgICAgICAgIG1lc3NhZ2U6IFwiQWRkcmVzcyBwcmVmaXhlcyBhcmUgcmVxdWlyZWRcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXSxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBWRVJTSU9OIENPTkZJR1VSQVRJT05TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFZlcnNpb24gY29uZmlndXJhdGlvbiBmb3IgU3RhdGljIENJRFIgMjAyNC0wNS0wMVxuICovXG5leHBvcnQgY29uc3QgU1RBVElDX0NJRFJfVkVSU0lPTl8yMDI0XzA1XzAxOiBWZXJzaW9uQ29uZmlnID0ge1xuICB2ZXJzaW9uOiBcIjIwMjQtMDUtMDFcIixcbiAgc2NoZW1hOiBTVEFUSUNfQ0lEUl9TQ0hFTUFfMjAyNF8wNV8wMSxcbiAgc3VwcG9ydExldmVsOiBWZXJzaW9uU3VwcG9ydExldmVsLkFDVElWRSxcbiAgcmVsZWFzZURhdGU6IFwiMjAyNC0wNS0wMVwiLFxuICBkZXByZWNhdGlvbkRhdGU6IHVuZGVmaW5lZCxcbiAgc3Vuc2V0RGF0ZTogdW5kZWZpbmVkLFxuICBicmVha2luZ0NoYW5nZXM6IFtdLFxuICBtaWdyYXRpb25HdWlkZTogXCIvZG9jcy9pcGFtL21pZ3JhdGlvbi0yMDI0LTA1LTAxXCIsXG4gIGNoYW5nZUxvZzogW1xuICAgIHtcbiAgICAgIGNoYW5nZVR5cGU6IFwiYWRkZWRcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxhdGVzdCBzdGFibGUgcmVsZWFzZSB3aXRoIGZ1bGwgc3RhdGljIENJRFIgc3VwcG9ydFwiLFxuICAgICAgYnJlYWtpbmc6IGZhbHNlLFxuICAgIH0sXG4gIF0sXG59O1xuXG4vKipcbiAqIFZlcnNpb24gY29uZmlndXJhdGlvbiBmb3IgU3RhdGljIENJRFIgMjAyMy0xMS0wMVxuICovXG5leHBvcnQgY29uc3QgU1RBVElDX0NJRFJfVkVSU0lPTl8yMDIzXzExXzAxOiBWZXJzaW9uQ29uZmlnID0ge1xuICB2ZXJzaW9uOiBcIjIwMjMtMTEtMDFcIixcbiAgc2NoZW1hOiBTVEFUSUNfQ0lEUl9TQ0hFTUFfMjAyM18xMV8wMSxcbiAgc3VwcG9ydExldmVsOiBWZXJzaW9uU3VwcG9ydExldmVsLk1BSU5URU5BTkNFLFxuICByZWxlYXNlRGF0ZTogXCIyMDIzLTExLTAxXCIsXG4gIGRlcHJlY2F0aW9uRGF0ZTogdW5kZWZpbmVkLFxuICBzdW5zZXREYXRlOiB1bmRlZmluZWQsXG4gIGJyZWFraW5nQ2hhbmdlczogW10sXG4gIG1pZ3JhdGlvbkd1aWRlOiBcIi9kb2NzL2lwYW0vbWlncmF0aW9uLTIwMjMtMTEtMDFcIixcbiAgY2hhbmdlTG9nOiBbXG4gICAge1xuICAgICAgY2hhbmdlVHlwZTogXCJhZGRlZFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiU3RhYmxlIHJlbGVhc2Ugd2l0aCBjb3JlIHN0YXRpYyBDSURSIGZlYXR1cmVzXCIsXG4gICAgICBicmVha2luZzogZmFsc2UsXG4gICAgfSxcbiAgXSxcbn07XG5cbi8qKlxuICogQWxsIHN1cHBvcnRlZCBTdGF0aWMgQ0lEUiB2ZXJzaW9ucyBmb3IgcmVnaXN0cmF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBBTExfU1RBVElDX0NJRFJfVkVSU0lPTlM6IFZlcnNpb25Db25maWdbXSA9IFtcbiAgU1RBVElDX0NJRFJfVkVSU0lPTl8yMDI0XzA1XzAxLFxuICBTVEFUSUNfQ0lEUl9WRVJTSU9OXzIwMjNfMTFfMDEsXG5dO1xuXG4vKipcbiAqIFJlc291cmNlIHR5cGUgY29uc3RhbnRcbiAqL1xuZXhwb3J0IGNvbnN0IFNUQVRJQ19DSURSX1RZUEUgPVxuICBcIk1pY3Jvc29mdC5OZXR3b3JrL25ldHdvcmtNYW5hZ2Vycy9pcGFtUG9vbHMvc3RhdGljQ2lkcnNcIjtcbiJdfQ==
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure Virtual Network Manager IPAM Pool Static CIDR implementation using AzapiResource framework
|
|
3
|
+
*
|
|
4
|
+
* This class provides a unified implementation for explicitly allocating static CIDR blocks
|
|
5
|
+
* within an IPAM pool. Static CIDRs allow precise control over IP address space allocation
|
|
6
|
+
* and enable manual CIDR reservation within the pool's address space.
|
|
7
|
+
*
|
|
8
|
+
* Supported API Versions:
|
|
9
|
+
* - 2023-11-01 (Maintenance)
|
|
10
|
+
* - 2024-05-01 (Active, Latest)
|
|
11
|
+
*
|
|
12
|
+
* Features:
|
|
13
|
+
* - Automatic latest version resolution when no version is specified
|
|
14
|
+
* - Explicit version pinning for stability requirements
|
|
15
|
+
* - Schema-driven validation and transformation
|
|
16
|
+
* - CIDR format validation at construct creation time
|
|
17
|
+
* - Automatic IP address count calculation from CIDR prefix
|
|
18
|
+
* - Full backward compatibility
|
|
19
|
+
* - JSII compliance for multi-language support
|
|
20
|
+
*/
|
|
21
|
+
import * as cdktf from "cdktf";
|
|
22
|
+
import { Construct } from "constructs";
|
|
23
|
+
import { AzapiResource, AzapiResourceProps } from "../../core-azure/lib/azapi/azapi-resource";
|
|
24
|
+
import { ApiSchema } from "../../core-azure/lib/version-manager/interfaces/version-interfaces";
|
|
25
|
+
/**
|
|
26
|
+
* Properties for the Azure Virtual Network Manager IPAM Pool Static CIDR
|
|
27
|
+
*
|
|
28
|
+
* Extends AzapiResourceProps with Static CIDR specific properties
|
|
29
|
+
*/
|
|
30
|
+
export interface IpamPoolStaticCidrProps extends AzapiResourceProps {
|
|
31
|
+
/**
|
|
32
|
+
* Resource ID of the parent IPAM Pool
|
|
33
|
+
* @example "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg/providers/Microsoft.Network/networkManagers/vnm/ipamPools/prod-pool"
|
|
34
|
+
*/
|
|
35
|
+
readonly ipamPoolId: string;
|
|
36
|
+
/**
|
|
37
|
+
* Array of IP address prefixes in CIDR notation
|
|
38
|
+
* Must be valid CIDR format (e.g., ["10.0.0.0/24"])
|
|
39
|
+
* Must be contained within the parent pool's address space
|
|
40
|
+
* @example ["10.0.1.0/24"]
|
|
41
|
+
*/
|
|
42
|
+
readonly addressPrefixes: string[];
|
|
43
|
+
/**
|
|
44
|
+
* Optional description of the static CIDR allocation
|
|
45
|
+
* @example "Reserved for production web servers"
|
|
46
|
+
*/
|
|
47
|
+
readonly description?: string;
|
|
48
|
+
/**
|
|
49
|
+
* The lifecycle rules to ignore changes
|
|
50
|
+
* @example ["tags"]
|
|
51
|
+
*/
|
|
52
|
+
readonly ignoreChanges?: string[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Properties for Static CIDR body
|
|
56
|
+
*/
|
|
57
|
+
export interface IpamPoolStaticCidrProperties {
|
|
58
|
+
readonly addressPrefixes: string[];
|
|
59
|
+
readonly description?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The resource body interface for Azure Static CIDR API calls
|
|
63
|
+
*/
|
|
64
|
+
export interface IpamPoolStaticCidrBody {
|
|
65
|
+
readonly properties: IpamPoolStaticCidrProperties;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Azure Virtual Network Manager IPAM Pool Static CIDR implementation
|
|
69
|
+
*
|
|
70
|
+
* Static CIDRs explicitly allocate IP address blocks within an IPAM pool,
|
|
71
|
+
* providing precise control over address space reservations. This is useful
|
|
72
|
+
* for manual IP address management or reserving specific ranges for particular
|
|
73
|
+
* purposes within the larger pool.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* // Allocate a static CIDR block in a pool:
|
|
77
|
+
* const staticCidr = new IpamPoolStaticCidr(this, "web-servers", {
|
|
78
|
+
* name: "web-servers-cidr",
|
|
79
|
+
* ipamPoolId: ipamPool.id,
|
|
80
|
+
* addressPrefixes: ["10.0.1.0/24"],
|
|
81
|
+
* description: "Reserved for production web servers"
|
|
82
|
+
* });
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* // Allocate with explicit IP count:
|
|
86
|
+
* const staticCidr = new IpamPoolStaticCidr(this, "database-servers", {
|
|
87
|
+
* name: "db-servers-cidr",
|
|
88
|
+
* ipamPoolId: ipamPool.id,
|
|
89
|
+
* addressPrefixes: ["10.0.2.0/24"],
|
|
90
|
+
* description: "Reserved for database servers",
|
|
91
|
+
* apiVersion: "2024-05-01"
|
|
92
|
+
* });
|
|
93
|
+
*
|
|
94
|
+
* @stability stable
|
|
95
|
+
*/
|
|
96
|
+
export declare class IpamPoolStaticCidr extends AzapiResource {
|
|
97
|
+
/**
|
|
98
|
+
* Validates address prefix for correct CIDR format
|
|
99
|
+
* Throws descriptive errors if validation fails
|
|
100
|
+
*
|
|
101
|
+
* @param addressPrefix - CIDR block to validate
|
|
102
|
+
* @throws Error if validation fails
|
|
103
|
+
*/
|
|
104
|
+
private static validateAddressPrefix;
|
|
105
|
+
/**
|
|
106
|
+
* The input properties for this Static CIDR instance
|
|
107
|
+
*/
|
|
108
|
+
readonly props: IpamPoolStaticCidrProps;
|
|
109
|
+
readonly idOutput: cdktf.TerraformOutput;
|
|
110
|
+
readonly nameOutput: cdktf.TerraformOutput;
|
|
111
|
+
readonly addressPrefixOutput: cdktf.TerraformOutput;
|
|
112
|
+
readonly resourceName: string;
|
|
113
|
+
private readonly _calculatedAddressCount;
|
|
114
|
+
/**
|
|
115
|
+
* Creates a new Azure Virtual Network Manager IPAM Pool Static CIDR using the AzapiResource framework
|
|
116
|
+
*
|
|
117
|
+
* @param scope - The scope in which to define this construct
|
|
118
|
+
* @param id - The unique identifier for this instance
|
|
119
|
+
* @param props - Configuration properties for the Static CIDR
|
|
120
|
+
*/
|
|
121
|
+
constructor(scope: Construct, id: string, props: IpamPoolStaticCidrProps);
|
|
122
|
+
/**
|
|
123
|
+
* Resolves the parent resource ID for the Static CIDR
|
|
124
|
+
* Static CIDRs are scoped to IPAM Pools
|
|
125
|
+
*/
|
|
126
|
+
protected resolveParentId(props: any): string;
|
|
127
|
+
/**
|
|
128
|
+
* Gets the default API version to use when no explicit version is specified
|
|
129
|
+
*/
|
|
130
|
+
protected defaultVersion(): string;
|
|
131
|
+
/**
|
|
132
|
+
* Gets the Azure resource type for Static CIDRs
|
|
133
|
+
*/
|
|
134
|
+
protected resourceType(): string;
|
|
135
|
+
/**
|
|
136
|
+
* Gets the API schema for the resolved version
|
|
137
|
+
*/
|
|
138
|
+
protected apiSchema(): ApiSchema;
|
|
139
|
+
/**
|
|
140
|
+
* Creates the resource body for the Azure API call
|
|
141
|
+
* Note: Child resources do not include location or tags
|
|
142
|
+
*/
|
|
143
|
+
protected createResourceBody(props: any): any;
|
|
144
|
+
/**
|
|
145
|
+
* Get the address prefixes of this Static CIDR
|
|
146
|
+
* Returns the input addressPrefixes array
|
|
147
|
+
*/
|
|
148
|
+
get addressPrefixes(): string[];
|
|
149
|
+
/**
|
|
150
|
+
* Get the calculated number of IP addresses in this CIDR block
|
|
151
|
+
* This is automatically calculated from the CIDR prefix at construct creation time
|
|
152
|
+
*
|
|
153
|
+
* @returns Total count of IP addresses in the CIDR block
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* const staticCidr = new IpamPoolStaticCidr(this, "cidr", {
|
|
157
|
+
* addressPrefixes: ["10.0.1.0/24"]
|
|
158
|
+
* });
|
|
159
|
+
* console.log(staticCidr.calculatedAddressCount); // 256
|
|
160
|
+
*/
|
|
161
|
+
get calculatedAddressCount(): number;
|
|
162
|
+
/**
|
|
163
|
+
* Get the provisioning state of the Static CIDR
|
|
164
|
+
*/
|
|
165
|
+
get provisioningState(): string;
|
|
166
|
+
/**
|
|
167
|
+
* Applies ignore changes lifecycle rules if specified in props
|
|
168
|
+
*/
|
|
169
|
+
private _applyIgnoreChanges;
|
|
170
|
+
}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.IpamPoolStaticCidr = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
/**
|
|
7
|
+
* Azure Virtual Network Manager IPAM Pool Static CIDR implementation using AzapiResource framework
|
|
8
|
+
*
|
|
9
|
+
* This class provides a unified implementation for explicitly allocating static CIDR blocks
|
|
10
|
+
* within an IPAM pool. Static CIDRs allow precise control over IP address space allocation
|
|
11
|
+
* and enable manual CIDR reservation within the pool's address space.
|
|
12
|
+
*
|
|
13
|
+
* Supported API Versions:
|
|
14
|
+
* - 2023-11-01 (Maintenance)
|
|
15
|
+
* - 2024-05-01 (Active, Latest)
|
|
16
|
+
*
|
|
17
|
+
* Features:
|
|
18
|
+
* - Automatic latest version resolution when no version is specified
|
|
19
|
+
* - Explicit version pinning for stability requirements
|
|
20
|
+
* - Schema-driven validation and transformation
|
|
21
|
+
* - CIDR format validation at construct creation time
|
|
22
|
+
* - Automatic IP address count calculation from CIDR prefix
|
|
23
|
+
* - Full backward compatibility
|
|
24
|
+
* - JSII compliance for multi-language support
|
|
25
|
+
*/
|
|
26
|
+
const cdktf = require("cdktf");
|
|
27
|
+
const ipam_pool_static_cidr_schemas_1 = require("./ipam-pool-static-cidr-schemas");
|
|
28
|
+
const cidr_validator_1 = require("./utils/cidr-validator");
|
|
29
|
+
const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
|
|
30
|
+
/**
|
|
31
|
+
* Azure Virtual Network Manager IPAM Pool Static CIDR implementation
|
|
32
|
+
*
|
|
33
|
+
* Static CIDRs explicitly allocate IP address blocks within an IPAM pool,
|
|
34
|
+
* providing precise control over address space reservations. This is useful
|
|
35
|
+
* for manual IP address management or reserving specific ranges for particular
|
|
36
|
+
* purposes within the larger pool.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* // Allocate a static CIDR block in a pool:
|
|
40
|
+
* const staticCidr = new IpamPoolStaticCidr(this, "web-servers", {
|
|
41
|
+
* name: "web-servers-cidr",
|
|
42
|
+
* ipamPoolId: ipamPool.id,
|
|
43
|
+
* addressPrefixes: ["10.0.1.0/24"],
|
|
44
|
+
* description: "Reserved for production web servers"
|
|
45
|
+
* });
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* // Allocate with explicit IP count:
|
|
49
|
+
* const staticCidr = new IpamPoolStaticCidr(this, "database-servers", {
|
|
50
|
+
* name: "db-servers-cidr",
|
|
51
|
+
* ipamPoolId: ipamPool.id,
|
|
52
|
+
* addressPrefixes: ["10.0.2.0/24"],
|
|
53
|
+
* description: "Reserved for database servers",
|
|
54
|
+
* apiVersion: "2024-05-01"
|
|
55
|
+
* });
|
|
56
|
+
*
|
|
57
|
+
* @stability stable
|
|
58
|
+
*/
|
|
59
|
+
class IpamPoolStaticCidr extends azapi_resource_1.AzapiResource {
|
|
60
|
+
/**
|
|
61
|
+
* Validates address prefix for correct CIDR format
|
|
62
|
+
* Throws descriptive errors if validation fails
|
|
63
|
+
*
|
|
64
|
+
* @param addressPrefix - CIDR block to validate
|
|
65
|
+
* @throws Error if validation fails
|
|
66
|
+
*/
|
|
67
|
+
static validateAddressPrefix(addressPrefix) {
|
|
68
|
+
if (!addressPrefix) {
|
|
69
|
+
throw new Error("Address prefix is required");
|
|
70
|
+
}
|
|
71
|
+
const validation = (0, cidr_validator_1.validateCidr)(addressPrefix);
|
|
72
|
+
if (!validation.valid) {
|
|
73
|
+
throw new Error(`Invalid address prefix: ${addressPrefix}. ${validation.errors.join(", ")}`);
|
|
74
|
+
}
|
|
75
|
+
// Log warnings if any (e.g., misaligned network address)
|
|
76
|
+
if (validation.warnings.length > 0) {
|
|
77
|
+
console.warn(`Warning for address prefix ${addressPrefix}: ${validation.warnings.join(", ")}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Creates a new Azure Virtual Network Manager IPAM Pool Static CIDR using the AzapiResource framework
|
|
82
|
+
*
|
|
83
|
+
* @param scope - The scope in which to define this construct
|
|
84
|
+
* @param id - The unique identifier for this instance
|
|
85
|
+
* @param props - Configuration properties for the Static CIDR
|
|
86
|
+
*/
|
|
87
|
+
constructor(scope, id, props) {
|
|
88
|
+
// Validate CIDR formats before construction
|
|
89
|
+
if (!props.addressPrefixes || props.addressPrefixes.length === 0) {
|
|
90
|
+
throw new Error("At least one address prefix is required");
|
|
91
|
+
}
|
|
92
|
+
props.addressPrefixes.forEach((prefix) => {
|
|
93
|
+
IpamPoolStaticCidr.validateAddressPrefix(prefix);
|
|
94
|
+
});
|
|
95
|
+
super(scope, id, props);
|
|
96
|
+
this.props = props;
|
|
97
|
+
// Calculate address count from first CIDR prefix
|
|
98
|
+
this._calculatedAddressCount = (0, cidr_validator_1.calculateAddressCount)(props.addressPrefixes[0]);
|
|
99
|
+
// Extract properties from the AZAPI resource outputs using Terraform interpolation
|
|
100
|
+
this.resourceName = `\${${this.terraformResource.fqn}.name}`;
|
|
101
|
+
// Create Terraform outputs for easy access and referencing from other resources
|
|
102
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
103
|
+
value: this.id,
|
|
104
|
+
description: "The ID of the Static CIDR",
|
|
105
|
+
});
|
|
106
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
107
|
+
value: this.resourceName,
|
|
108
|
+
description: "The name of the Static CIDR",
|
|
109
|
+
});
|
|
110
|
+
this.addressPrefixOutput = new cdktf.TerraformOutput(this, "addressPrefixes", {
|
|
111
|
+
value: JSON.stringify(props.addressPrefixes),
|
|
112
|
+
description: "The address prefixes of the Static CIDR",
|
|
113
|
+
});
|
|
114
|
+
// Override logical IDs to match naming convention
|
|
115
|
+
this.idOutput.overrideLogicalId("id");
|
|
116
|
+
this.nameOutput.overrideLogicalId("name");
|
|
117
|
+
this.addressPrefixOutput.overrideLogicalId("addressPrefixes");
|
|
118
|
+
// Apply ignore changes if specified
|
|
119
|
+
this._applyIgnoreChanges();
|
|
120
|
+
}
|
|
121
|
+
// =============================================================================
|
|
122
|
+
// REQUIRED ABSTRACT METHODS FROM AzapiResource
|
|
123
|
+
// =============================================================================
|
|
124
|
+
/**
|
|
125
|
+
* Resolves the parent resource ID for the Static CIDR
|
|
126
|
+
* Static CIDRs are scoped to IPAM Pools
|
|
127
|
+
*/
|
|
128
|
+
resolveParentId(props) {
|
|
129
|
+
const typedProps = props;
|
|
130
|
+
return typedProps.ipamPoolId;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Gets the default API version to use when no explicit version is specified
|
|
134
|
+
*/
|
|
135
|
+
defaultVersion() {
|
|
136
|
+
return "2024-05-01";
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Gets the Azure resource type for Static CIDRs
|
|
140
|
+
*/
|
|
141
|
+
resourceType() {
|
|
142
|
+
return ipam_pool_static_cidr_schemas_1.STATIC_CIDR_TYPE;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Gets the API schema for the resolved version
|
|
146
|
+
*/
|
|
147
|
+
apiSchema() {
|
|
148
|
+
return this.resolveSchema();
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Creates the resource body for the Azure API call
|
|
152
|
+
* Note: Child resources do not include location or tags
|
|
153
|
+
*/
|
|
154
|
+
createResourceBody(props) {
|
|
155
|
+
const typedProps = props;
|
|
156
|
+
return {
|
|
157
|
+
properties: {
|
|
158
|
+
addressPrefixes: typedProps.addressPrefixes,
|
|
159
|
+
description: typedProps.description,
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
// =============================================================================
|
|
164
|
+
// PUBLIC METHODS FOR STATIC CIDR OPERATIONS
|
|
165
|
+
// =============================================================================
|
|
166
|
+
/**
|
|
167
|
+
* Get the address prefixes of this Static CIDR
|
|
168
|
+
* Returns the input addressPrefixes array
|
|
169
|
+
*/
|
|
170
|
+
get addressPrefixes() {
|
|
171
|
+
return this.props.addressPrefixes;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Get the calculated number of IP addresses in this CIDR block
|
|
175
|
+
* This is automatically calculated from the CIDR prefix at construct creation time
|
|
176
|
+
*
|
|
177
|
+
* @returns Total count of IP addresses in the CIDR block
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* const staticCidr = new IpamPoolStaticCidr(this, "cidr", {
|
|
181
|
+
* addressPrefixes: ["10.0.1.0/24"]
|
|
182
|
+
* });
|
|
183
|
+
* console.log(staticCidr.calculatedAddressCount); // 256
|
|
184
|
+
*/
|
|
185
|
+
get calculatedAddressCount() {
|
|
186
|
+
return this._calculatedAddressCount;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Get the provisioning state of the Static CIDR
|
|
190
|
+
*/
|
|
191
|
+
get provisioningState() {
|
|
192
|
+
return `\${${this.terraformResource.fqn}.output.properties.provisioningState}`;
|
|
193
|
+
}
|
|
194
|
+
// =============================================================================
|
|
195
|
+
// PRIVATE HELPER METHODS
|
|
196
|
+
// =============================================================================
|
|
197
|
+
/**
|
|
198
|
+
* Applies ignore changes lifecycle rules if specified in props
|
|
199
|
+
*/
|
|
200
|
+
_applyIgnoreChanges() {
|
|
201
|
+
if (this.props.ignoreChanges && this.props.ignoreChanges.length > 0) {
|
|
202
|
+
this.terraformResource.addOverride("lifecycle", {
|
|
203
|
+
ignore_changes: this.props.ignoreChanges,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
exports.IpamPoolStaticCidr = IpamPoolStaticCidr;
|
|
209
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
210
|
+
IpamPoolStaticCidr[_a] = { fqn: "@microsoft/terraform-cdk-constructs.IpamPoolStaticCidr", version: "1.4.0" };
|
|
211
|
+
(() => {
|
|
212
|
+
azapi_resource_1.AzapiResource.registerSchemas(ipam_pool_static_cidr_schemas_1.STATIC_CIDR_TYPE, ipam_pool_static_cidr_schemas_1.ALL_STATIC_CIDR_VERSIONS);
|
|
213
|
+
})();
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbS1wb29sLXN0YXRpYy1jaWRyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXZpcnR1YWxuZXR3b3JrbWFuYWdlci9saWIvaXBhbS1wb29sLXN0YXRpYy1jaWRyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCwrQkFBK0I7QUFFL0IsbUZBR3lDO0FBQ3pDLDJEQUE2RTtBQUM3RSw4RUFHbUQ7QUFtRG5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSw4QkFBYTtJQUtuRDs7Ozs7O09BTUc7SUFDSyxNQUFNLENBQUMscUJBQXFCLENBQUMsYUFBcUI7UUFDeEQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBQSw2QkFBWSxFQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FDYiwyQkFBMkIsYUFBYSxLQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQzVFLENBQUM7UUFDSixDQUFDO1FBRUQseURBQXlEO1FBQ3pELElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTyxDQUFDLElBQUksQ0FDViw4QkFBOEIsYUFBYSxLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ2pGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQWtCRDs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FB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QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILElBQVcsc0JBQXNCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsaUJBQWlCO1FBQzFCLE9BQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyx1Q0FBdUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLHlCQUF5QjtJQUN6QixnRkFBZ0Y7SUFFaEY7O09BRUc7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzlDLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7YUFDekMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7O0FBMU1ILGdEQTJNQzs7O0FBMU1DO0lBQ0UsOEJBQWEsQ0FBQyxlQUFlLENBQUMsZ0RBQWdCLEVBQUUsd0RBQXdCLENBQUMsQ0FBQztBQUM1RSxDQUFDLEdBQUEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXp1cmUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXIgSVBBTSBQb29sIFN0YXRpYyBDSURSIGltcGxlbWVudGF0aW9uIHVzaW5nIEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHVuaWZpZWQgaW1wbGVtZW50YXRpb24gZm9yIGV4cGxpY2l0bHkgYWxsb2NhdGluZyBzdGF0aWMgQ0lEUiBibG9ja3NcbiAqIHdpdGhpbiBhbiBJUEFNIHBvb2wuIFN0YXRpYyBDSURScyBhbGxvdyBwcmVjaXNlIGNvbnRyb2wgb3ZlciBJUCBhZGRyZXNzIHNwYWNlIGFsbG9jYXRpb25cbiAqIGFuZCBlbmFibGUgbWFudWFsIENJRFIgcmVzZXJ2YXRpb24gd2l0aGluIHRoZSBwb29sJ3MgYWRkcmVzcyBzcGFjZS5cbiAqXG4gKiBTdXBwb3J0ZWQgQVBJIFZlcnNpb25zOlxuICogLSAyMDIzLTExLTAxIChNYWludGVuYW5jZSlcbiAqIC0gMjAyNC0wNS0wMSAoQWN0aXZlLCBMYXRlc3QpXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyBsYXRlc3QgdmVyc2lvbiByZXNvbHV0aW9uIHdoZW4gbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAqIC0gRXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nIGZvciBzdGFiaWxpdHkgcmVxdWlyZW1lbnRzXG4gKiAtIFNjaGVtYS1kcml2ZW4gdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb25cbiAqIC0gQ0lEUiBmb3JtYXQgdmFsaWRhdGlvbiBhdCBjb25zdHJ1Y3QgY3JlYXRpb24gdGltZVxuICogLSBBdXRvbWF0aWMgSVAgYWRkcmVzcyBjb3VudCBjYWxjdWxhdGlvbiBmcm9tIENJRFIgcHJlZml4XG4gKiAtIEZ1bGwgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICogLSBKU0lJIGNvbXBsaWFuY2UgZm9yIG11bHRpLWxhbmd1YWdlIHN1cHBvcnRcbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBBTExfU1RBVElDX0NJRFJfVkVSU0lPTlMsXG4gIFNUQVRJQ19DSURSX1RZUEUsXG59IGZyb20gXCIuL2lwYW0tcG9vbC1zdGF0aWMtY2lkci1zY2hlbWFzXCI7XG5pbXBvcnQgeyBjYWxjdWxhdGVBZGRyZXNzQ291bnQsIHZhbGlkYXRlQ2lkciB9IGZyb20gXCIuL3V0aWxzL2NpZHItdmFsaWRhdG9yXCI7XG5pbXBvcnQge1xuICBBemFwaVJlc291cmNlLFxuICBBemFwaVJlc291cmNlUHJvcHMsXG59IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi9hemFwaS9hemFwaS1yZXNvdXJjZVwiO1xuaW1wb3J0IHsgQXBpU2NoZW1hIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9pbnRlcmZhY2VzL3ZlcnNpb24taW50ZXJmYWNlc1wiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBBenVyZSBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlciBJUEFNIFBvb2wgU3RhdGljIENJRFJcbiAqXG4gKiBFeHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB3aXRoIFN0YXRpYyBDSURSIHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJcGFtUG9vbFN0YXRpY0NpZHJQcm9wcyBleHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBSZXNvdXJjZSBJRCBvZiB0aGUgcGFyZW50IElQQU0gUG9vbFxuICAgKiBAZXhhbXBsZSBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy9yZy9wcm92aWRlcnMvTWljcm9zb2Z0Lk5ldHdvcmsvbmV0d29ya01hbmFnZXJzL3ZubS9pcGFtUG9vbHMvcHJvZC1wb29sXCJcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1Qb29sSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQXJyYXkgb2YgSVAgYWRkcmVzcyBwcmVmaXhlcyBpbiBDSURSIG5vdGF0aW9uXG4gICAqIE11c3QgYmUgdmFsaWQgQ0lEUiBmb3JtYXQgKGUuZy4sIFtcIjEwLjAuMC4wLzI0XCJdKVxuICAgKiBNdXN0IGJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHBhcmVudCBwb29sJ3MgYWRkcmVzcyBzcGFjZVxuICAgKiBAZXhhbXBsZSBbXCIxMC4wLjEuMC8yNFwiXVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkcmVzc1ByZWZpeGVzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIHN0YXRpYyBDSURSIGFsbG9jYXRpb25cbiAgICogQGV4YW1wbGUgXCJSZXNlcnZlZCBmb3IgcHJvZHVjdGlvbiB3ZWIgc2VydmVyc1wiXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBydWxlcyB0byBpZ25vcmUgY2hhbmdlc1xuICAgKiBAZXhhbXBsZSBbXCJ0YWdzXCJdXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVDaGFuZ2VzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgU3RhdGljIENJRFIgYm9keVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1Qb29sU3RhdGljQ2lkclByb3BlcnRpZXMge1xuICByZWFkb25seSBhZGRyZXNzUHJlZml4ZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVzb3VyY2UgYm9keSBpbnRlcmZhY2UgZm9yIEF6dXJlIFN0YXRpYyBDSURSIEFQSSBjYWxsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1Qb29sU3RhdGljQ2lkckJvZHkge1xuICByZWFkb25seSBwcm9wZXJ0aWVzOiBJcGFtUG9vbFN0YXRpY0NpZHJQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIEF6dXJlIFZpcnR1YWwgTmV0d29yayBNYW5hZ2VyIElQQU0gUG9vbCBTdGF0aWMgQ0lEUiBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFN0YXRpYyBDSURScyBleHBsaWNpdGx5IGFsbG9jYXRlIElQIGFkZHJlc3MgYmxvY2tzIHdpdGhpbiBhbiBJUEFNIHBvb2wsXG4gKiBwcm92aWRpbmcgcHJlY2lzZSBjb250cm9sIG92ZXIgYWRkcmVzcyBzcGFjZSByZXNlcnZhdGlvbnMuIFRoaXMgaXMgdXNlZnVsXG4gKiBmb3IgbWFudWFsIElQIGFkZHJlc3MgbWFuYWdlbWVudCBvciByZXNlcnZpbmcgc3BlY2lmaWMgcmFuZ2VzIGZvciBwYXJ0aWN1bGFyXG4gKiBwdXJwb3NlcyB3aXRoaW4gdGhlIGxhcmdlciBwb29sLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBbGxvY2F0ZSBhIHN0YXRpYyBDSURSIGJsb2NrIGluIGEgcG9vbDpcbiAqIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHRoaXMsIFwid2ViLXNlcnZlcnNcIiwge1xuICogICBuYW1lOiBcIndlYi1zZXJ2ZXJzLWNpZHJcIixcbiAqICAgaXBhbVBvb2xJZDogaXBhbVBvb2wuaWQsXG4gKiAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4xLjAvMjRcIl0sXG4gKiAgIGRlc2NyaXB0aW9uOiBcIlJlc2VydmVkIGZvciBwcm9kdWN0aW9uIHdlYiBzZXJ2ZXJzXCJcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBbGxvY2F0ZSB3aXRoIGV4cGxpY2l0IElQIGNvdW50OlxuICogY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIodGhpcywgXCJkYXRhYmFzZS1zZXJ2ZXJzXCIsIHtcbiAqICAgbmFtZTogXCJkYi1zZXJ2ZXJzLWNpZHJcIixcbiAqICAgaXBhbVBvb2xJZDogaXBhbVBvb2wuaWQsXG4gKiAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4yLjAvMjRcIl0sXG4gKiAgIGRlc2NyaXB0aW9uOiBcIlJlc2VydmVkIGZvciBkYXRhYmFzZSBzZXJ2ZXJzXCIsXG4gKiAgIGFwaVZlcnNpb246IFwiMjAyNC0wNS0wMVwiXG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgSXBhbVBvb2xTdGF0aWNDaWRyIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoU1RBVElDX0NJRFJfVFlQRSwgQUxMX1NUQVRJQ19DSURSX1ZFUlNJT05TKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYWRkcmVzcyBwcmVmaXggZm9yIGNvcnJlY3QgQ0lEUiBmb3JtYXRcbiAgICogVGhyb3dzIGRlc2NyaXB0aXZlIGVycm9ycyBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqXG4gICAqIEBwYXJhbSBhZGRyZXNzUHJlZml4IC0gQ0lEUiBibG9jayB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlQWRkcmVzc1ByZWZpeChhZGRyZXNzUHJlZml4OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWFkZHJlc3NQcmVmaXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFkZHJlc3MgcHJlZml4IGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZUNpZHIoYWRkcmVzc1ByZWZpeCk7XG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGFkZHJlc3MgcHJlZml4OiAke2FkZHJlc3NQcmVmaXh9LiAke3ZhbGlkYXRpb24uZXJyb3JzLmpvaW4oXCIsIFwiKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBMb2cgd2FybmluZ3MgaWYgYW55IChlLmcuLCBtaXNhbGlnbmVkIG5ldHdvcmsgYWRkcmVzcylcbiAgICBpZiAodmFsaWRhdGlvbi53YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBXYXJuaW5nIGZvciBhZGRyZXNzIHByZWZpeCAke2FkZHJlc3NQcmVmaXh9OiAke3ZhbGlkYXRpb24ud2FybmluZ3Muam9pbihcIiwgXCIpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgcHJvcGVydGllcyBmb3IgdGhpcyBTdGF0aWMgQ0lEUiBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBJcGFtUG9vbFN0YXRpY0NpZHJQcm9wcztcblxuICAvLyBPdXRwdXQgcHJvcGVydGllcyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nXG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZU91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgYWRkcmVzc1ByZWZpeE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIC8vIFB1YmxpYyBwcm9wZXJ0aWVzXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZU5hbWU6IHN0cmluZztcblxuICAvLyBTdG9yZSBjYWxjdWxhdGVkIGFkZHJlc3MgY291bnRcbiAgcHJpdmF0ZSByZWFkb25seSBfY2FsY3VsYXRlZEFkZHJlc3NDb3VudDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEF6dXJlIFZpcnR1YWwgTmV0d29yayBNYW5hZ2VyIElQQU0gUG9vbCBTdGF0aWMgQ0lEUiB1c2luZyB0aGUgQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgU3RhdGljIENJRFJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJcGFtUG9vbFN0YXRpY0NpZHJQcm9wcykge1xuICAgIC8vIFZhbGlkYXRlIENJRFIgZm9ybWF0cyBiZWZvcmUgY29uc3RydWN0aW9uXG4gICAgaWYgKCFwcm9wcy5hZGRyZXNzUHJlZml4ZXMgfHwgcHJvcHMuYWRkcmVzc1ByZWZpeGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXQgbGVhc3Qgb25lIGFkZHJlc3MgcHJlZml4IGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cbiAgICBwcm9wcy5hZGRyZXNzUHJlZml4ZXMuZm9yRWFjaCgocHJlZml4KSA9PiB7XG4gICAgICBJcGFtUG9vbFN0YXRpY0NpZHIudmFsaWRhdGVBZGRyZXNzUHJlZml4KHByZWZpeCk7XG4gICAgfSk7XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIC8vIENhbGN1bGF0ZSBhZGRyZXNzIGNvdW50IGZyb20gZmlyc3QgQ0lEUiBwcmVmaXhcbiAgICB0aGlzLl9jYWxjdWxhdGVkQWRkcmVzc0NvdW50ID0gY2FsY3VsYXRlQWRkcmVzc0NvdW50KFxuICAgICAgcHJvcHMuYWRkcmVzc1ByZWZpeGVzWzBdLFxuICAgICk7XG5cbiAgICAvLyBFeHRyYWN0IHByb3BlcnRpZXMgZnJvbSB0aGUgQVpBUEkgcmVzb3VyY2Ugb3V0cHV0cyB1c2luZyBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvblxuICAgIHRoaXMucmVzb3VyY2VOYW1lID0gYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWA7XG5cbiAgICAvLyBDcmVhdGUgVGVycmFmb3JtIG91dHB1dHMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZyBmcm9tIG90aGVyIHJlc291cmNlc1xuICAgIHRoaXMuaWRPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiaWRcIiwge1xuICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgSUQgb2YgdGhlIFN0YXRpYyBDSURSXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5yZXNvdXJjZU5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgU3RhdGljIENJRFJcIixcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkcmVzc1ByZWZpeE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQoXG4gICAgICB0aGlzLFxuICAgICAgXCJhZGRyZXNzUHJlZml4ZXNcIixcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHByb3BzLmFkZHJlc3NQcmVmaXhlcyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBhZGRyZXNzIHByZWZpeGVzIG9mIHRoZSBTdGF0aWMgQ0lEUlwiLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gT3ZlcnJpZGUgbG9naWNhbCBJRHMgdG8gbWF0Y2ggbmFtaW5nIGNvbnZlbnRpb25cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmFkZHJlc3NQcmVmaXhPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJhZGRyZXNzUHJlZml4ZXNcIik7XG5cbiAgICAvLyBBcHBseSBpZ25vcmUgY2hhbmdlcyBpZiBzcGVjaWZpZWRcbiAgICB0aGlzLl9hcHBseUlnbm9yZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFUVVJUkVEIEFCU1RSQUNUIE1FVEhPRFMgRlJPTSBBemFwaVJlc291cmNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBwYXJlbnQgcmVzb3VyY2UgSUQgZm9yIHRoZSBTdGF0aWMgQ0lEUlxuICAgKiBTdGF0aWMgQ0lEUnMgYXJlIHNjb3BlZCB0byBJUEFNIFBvb2xzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBJcGFtUG9vbFN0YXRpY0NpZHJQcm9wcztcbiAgICByZXR1cm4gdHlwZWRQcm9wcy5pcGFtUG9vbElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgQVBJIHZlcnNpb24gdG8gdXNlIHdoZW4gbm8gZXhwbGljaXQgdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjQtMDUtMDFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciBTdGF0aWMgQ0lEUnNcbiAgICovXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU1RBVElDX0NJRFJfVFlQRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBUEkgc2NoZW1hIGZvciB0aGUgcmVzb2x2ZWQgdmVyc2lvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICogTm90ZTogQ2hpbGQgcmVzb3VyY2VzIGRvIG5vdCBpbmNsdWRlIGxvY2F0aW9uIG9yIHRhZ3NcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIElwYW1Qb29sU3RhdGljQ2lkclByb3BzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiB0eXBlZFByb3BzLmFkZHJlc3NQcmVmaXhlcyxcbiAgICAgICAgZGVzY3JpcHRpb246IHR5cGVkUHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQVUJMSUMgTUVUSE9EUyBGT1IgU1RBVElDIENJRFIgT1BFUkFUSU9OU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGFkZHJlc3MgcHJlZml4ZXMgb2YgdGhpcyBTdGF0aWMgQ0lEUlxuICAgKiBSZXR1cm5zIHRoZSBpbnB1dCBhZGRyZXNzUHJlZml4ZXMgYXJyYXlcbiAgICovXG4gIHB1YmxpYyBnZXQgYWRkcmVzc1ByZWZpeGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5hZGRyZXNzUHJlZml4ZXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjYWxjdWxhdGVkIG51bWJlciBvZiBJUCBhZGRyZXNzZXMgaW4gdGhpcyBDSURSIGJsb2NrXG4gICAqIFRoaXMgaXMgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkIGZyb20gdGhlIENJRFIgcHJlZml4IGF0IGNvbnN0cnVjdCBjcmVhdGlvbiB0aW1lXG4gICAqXG4gICAqIEByZXR1cm5zIFRvdGFsIGNvdW50IG9mIElQIGFkZHJlc3NlcyBpbiB0aGUgQ0lEUiBibG9ja1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBzdGF0aWNDaWRyID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcih0aGlzLCBcImNpZHJcIiwge1xuICAgKiAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4xLjAvMjRcIl1cbiAgICogfSk7XG4gICAqIGNvbnNvbGUubG9nKHN0YXRpY0NpZHIuY2FsY3VsYXRlZEFkZHJlc3NDb3VudCk7IC8vIDI1NlxuICAgKi9cbiAgcHVibGljIGdldCBjYWxjdWxhdGVkQWRkcmVzc0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZWRBZGRyZXNzQ291bnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwcm92aXNpb25pbmcgc3RhdGUgb2YgdGhlIFN0YXRpYyBDSURSXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByb3Zpc2lvbmluZ1N0YXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMucHJvdmlzaW9uaW5nU3RhdGV9YDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgSEVMUEVSIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQXBwbGllcyBpZ25vcmUgY2hhbmdlcyBsaWZlY3ljbGUgcnVsZXMgaWYgc3BlY2lmaWVkIGluIHByb3BzXG4gICAqL1xuICBwcml2YXRlIF9hcHBseUlnbm9yZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyAmJiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5hZGRPdmVycmlkZShcImxpZmVjeWNsZVwiLCB7XG4gICAgICAgIGlnbm9yZV9jaGFuZ2VzOiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|