@microsoft/terraform-cdk-constructs 1.8.0 → 1.9.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 +21007 -16056
- package/API.md +37023 -29701
- 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-dnszone/lib/records/dns-records.js +10 -10
- package/lib/azure-loganalyticsworkspace/index.d.ts +6 -0
- package/lib/azure-loganalyticsworkspace/index.js +23 -0
- package/lib/azure-loganalyticsworkspace/lib/index.d.ts +5 -0
- package/lib/azure-loganalyticsworkspace/lib/index.js +22 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace-schemas.d.ts +51 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace-schemas.js +255 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.d.ts +301 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.js +213 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.d.ts +9 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.js +71 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.spec.d.ts +8 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.spec.js +504 -0
- 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-networkwatcher/index.d.ts +14 -0
- package/lib/azure-networkwatcher/index.js +31 -0
- package/lib/azure-networkwatcher/lib/index.d.ts +5 -0
- package/lib/azure-networkwatcher/lib/index.js +22 -0
- package/lib/azure-networkwatcher/lib/network-watcher-schemas.d.ts +47 -0
- package/lib/azure-networkwatcher/lib/network-watcher-schemas.js +167 -0
- package/lib/azure-networkwatcher/lib/network-watcher.d.ts +181 -0
- package/lib/azure-networkwatcher/lib/network-watcher.js +187 -0
- package/lib/azure-networkwatcher/test/network-watcher.integ.d.ts +12 -0
- package/lib/azure-networkwatcher/test/network-watcher.integ.js +84 -0
- package/lib/azure-networkwatcher/test/network-watcher.spec.d.ts +8 -0
- package/lib/azure-networkwatcher/test/network-watcher.spec.js +312 -0
- package/lib/azure-policyassignment/lib/policy-assignment.js +1 -1
- package/lib/azure-policydefinition/lib/policy-definition.js +1 -1
- package/lib/azure-policysetdefinition/index.d.ts +10 -0
- package/lib/azure-policysetdefinition/index.js +27 -0
- package/lib/azure-policysetdefinition/lib/index.d.ts +5 -0
- package/lib/azure-policysetdefinition/lib/index.js +22 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition-schemas.d.ts +50 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition-schemas.js +255 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition.d.ts +426 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition.js +255 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.integ.d.ts +9 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.integ.js +56 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.spec.d.ts +8 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.spec.js +745 -0
- package/lib/azure-privatednszone/lib/private-dns-zone.js +1 -1
- package/lib/azure-privatednszone/lib/records/private-dns-records.js +8 -8
- 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-virtualnetworkgateway/lib/virtual-network-gateway-schemas.js +2 -2
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.d.ts +4 -2
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.js +8 -5
- package/lib/azure-virtualnetworkgateway/test/virtual-network-gateway.spec.js +109 -1
- package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool.js +1 -1
- 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/virtual-network-manager.js +1 -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/index.d.ts +9 -0
- package/lib/index.js +11 -2
- 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,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Azure Log Analytics Workspace implementation using AzapiResource framework
|
|
3
|
+
*
|
|
4
|
+
* This class provides a version-aware implementation for Azure Log Analytics Workspace
|
|
5
|
+
* that automatically handles version management, schema validation, and property
|
|
6
|
+
* transformation across all supported API versions.
|
|
7
|
+
*
|
|
8
|
+
* Supported API Versions:
|
|
9
|
+
* - 2023-09-01 (Active, Latest)
|
|
10
|
+
* - 2022-10-01 (Active, Backward Compatibility)
|
|
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
|
+
* - Full JSII compliance for multi-language support
|
|
17
|
+
* - Configurable data retention, SKU, and workspace capping
|
|
18
|
+
* - Public network access controls
|
|
19
|
+
* - Workspace features configuration
|
|
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
|
+
* SKU configuration for Log Analytics Workspace
|
|
27
|
+
*/
|
|
28
|
+
export interface LogAnalyticsWorkspaceSku {
|
|
29
|
+
/**
|
|
30
|
+
* SKU name for the Log Analytics Workspace
|
|
31
|
+
*
|
|
32
|
+
* Available options:
|
|
33
|
+
* - "Free" - Free tier (limited to 500MB/day, 7 day retention)
|
|
34
|
+
* - "Standard" - Standard tier (legacy)
|
|
35
|
+
* - "Premium" - Premium tier (legacy)
|
|
36
|
+
* - "PerNode" - Per node pricing (legacy, for OMS customers)
|
|
37
|
+
* - "PerGB2018" - Pay-as-you-go pricing based on data ingestion
|
|
38
|
+
* - "Standalone" - Standalone tier (legacy)
|
|
39
|
+
* - "CapacityReservation" - Commitment tier with reserved capacity
|
|
40
|
+
*
|
|
41
|
+
* @defaultValue "PerGB2018"
|
|
42
|
+
*/
|
|
43
|
+
readonly name: "Free" | "Standard" | "Premium" | "PerNode" | "PerGB2018" | "Standalone" | "CapacityReservation";
|
|
44
|
+
/**
|
|
45
|
+
* Capacity reservation level in GB per day
|
|
46
|
+
* Only applicable when SKU name is "CapacityReservation"
|
|
47
|
+
* Valid values: 100, 200, 300, 400, 500, 1000, 2000, 5000
|
|
48
|
+
*/
|
|
49
|
+
readonly capacityReservationLevel?: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Workspace capping configuration for daily data ingestion limits
|
|
53
|
+
*/
|
|
54
|
+
export interface LogAnalyticsWorkspaceCapping {
|
|
55
|
+
/**
|
|
56
|
+
* Daily volume cap in GB
|
|
57
|
+
* A value of -1 means no cap
|
|
58
|
+
*/
|
|
59
|
+
readonly dailyQuotaGb: number;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Workspace features configuration
|
|
63
|
+
*/
|
|
64
|
+
export interface LogAnalyticsWorkspaceFeatures {
|
|
65
|
+
/**
|
|
66
|
+
* Flag indicating whether data export is enabled
|
|
67
|
+
*/
|
|
68
|
+
readonly enableDataExport?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Flag indicating whether data should be immediately purged after 30 days
|
|
71
|
+
* instead of the configured retention period
|
|
72
|
+
*/
|
|
73
|
+
readonly immediatePurgeDataOn30Days?: boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Flag indicating whether log access using AADIAM is disabled
|
|
76
|
+
*/
|
|
77
|
+
readonly disableLocalAuth?: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Flag indicating whether cluster resource permissions are enabled
|
|
80
|
+
*/
|
|
81
|
+
readonly enableLogAccessUsingOnlyResourcePermissions?: boolean;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Managed identity configuration for the workspace
|
|
85
|
+
*/
|
|
86
|
+
export interface LogAnalyticsWorkspaceIdentity {
|
|
87
|
+
/**
|
|
88
|
+
* Type of managed identity
|
|
89
|
+
*/
|
|
90
|
+
readonly type: "SystemAssigned" | "UserAssigned" | "SystemAssigned,UserAssigned" | "None";
|
|
91
|
+
/**
|
|
92
|
+
* User-assigned identity resource IDs
|
|
93
|
+
* Required when type includes UserAssigned
|
|
94
|
+
*/
|
|
95
|
+
readonly userAssignedIdentities?: {
|
|
96
|
+
[key: string]: any;
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Properties for the unified Azure Log Analytics Workspace
|
|
101
|
+
*
|
|
102
|
+
* Extends AzapiResourceProps with Log Analytics Workspace specific properties
|
|
103
|
+
*/
|
|
104
|
+
export interface LogAnalyticsWorkspaceProps extends AzapiResourceProps {
|
|
105
|
+
/**
|
|
106
|
+
* Resource Group ID where the workspace will be created
|
|
107
|
+
* The workspace will be created as a child of this resource group
|
|
108
|
+
*/
|
|
109
|
+
readonly resourceGroupId: string;
|
|
110
|
+
/**
|
|
111
|
+
* Data retention period in days
|
|
112
|
+
*
|
|
113
|
+
* Values between 30 and 730 are supported for pay-as-you-go pricing.
|
|
114
|
+
* Free tier is limited to 7 days.
|
|
115
|
+
*
|
|
116
|
+
* @defaultValue 30
|
|
117
|
+
*/
|
|
118
|
+
readonly retentionInDays?: number;
|
|
119
|
+
/**
|
|
120
|
+
* SKU configuration for the workspace
|
|
121
|
+
*
|
|
122
|
+
* Determines pricing tier and capabilities of the workspace.
|
|
123
|
+
*
|
|
124
|
+
* @defaultValue { name: "PerGB2018" }
|
|
125
|
+
*/
|
|
126
|
+
readonly sku?: LogAnalyticsWorkspaceSku;
|
|
127
|
+
/**
|
|
128
|
+
* Daily volume cap for data ingestion
|
|
129
|
+
*
|
|
130
|
+
* When the daily cap is reached, data ingestion stops until the next day.
|
|
131
|
+
* A value of dailyQuotaGb: -1 means no cap.
|
|
132
|
+
*/
|
|
133
|
+
readonly workspaceCapping?: LogAnalyticsWorkspaceCapping;
|
|
134
|
+
/**
|
|
135
|
+
* Public network access for data ingestion
|
|
136
|
+
*
|
|
137
|
+
* Controls whether data can be ingested over the public internet.
|
|
138
|
+
*
|
|
139
|
+
* @defaultValue "Enabled"
|
|
140
|
+
*/
|
|
141
|
+
readonly publicNetworkAccessForIngestion?: "Enabled" | "Disabled";
|
|
142
|
+
/**
|
|
143
|
+
* Public network access for querying data
|
|
144
|
+
*
|
|
145
|
+
* Controls whether queries can be executed over the public internet.
|
|
146
|
+
*
|
|
147
|
+
* @defaultValue "Enabled"
|
|
148
|
+
*/
|
|
149
|
+
readonly publicNetworkAccessForQuery?: "Enabled" | "Disabled";
|
|
150
|
+
/**
|
|
151
|
+
* Workspace features configuration
|
|
152
|
+
*
|
|
153
|
+
* Enables or disables specific workspace features like data export,
|
|
154
|
+
* immediate purge, and local authentication.
|
|
155
|
+
*/
|
|
156
|
+
readonly features?: LogAnalyticsWorkspaceFeatures;
|
|
157
|
+
/**
|
|
158
|
+
* Whether customer-managed keys are required for saved searches and alerts
|
|
159
|
+
*
|
|
160
|
+
* When enabled, all saved searches and alerts must use customer-managed keys.
|
|
161
|
+
*/
|
|
162
|
+
readonly forceCmkForQuery?: boolean;
|
|
163
|
+
/**
|
|
164
|
+
* Resource ID of the default Data Collection Rule
|
|
165
|
+
*
|
|
166
|
+
* Associates a default DCR with the workspace for data collection.
|
|
167
|
+
* Only available in API version 2023-09-01 and later.
|
|
168
|
+
*/
|
|
169
|
+
readonly defaultDataCollectionRuleResourceId?: string;
|
|
170
|
+
/**
|
|
171
|
+
* Managed identity configuration for the workspace
|
|
172
|
+
*
|
|
173
|
+
* Enables managed identity authentication for the workspace.
|
|
174
|
+
*/
|
|
175
|
+
readonly identity?: LogAnalyticsWorkspaceIdentity;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Properties for the Log Analytics Workspace request body
|
|
179
|
+
*/
|
|
180
|
+
export interface LogAnalyticsWorkspaceBodyProperties {
|
|
181
|
+
readonly retentionInDays?: number;
|
|
182
|
+
readonly sku?: LogAnalyticsWorkspaceSku;
|
|
183
|
+
readonly workspaceCapping?: LogAnalyticsWorkspaceCapping;
|
|
184
|
+
readonly publicNetworkAccessForIngestion?: string;
|
|
185
|
+
readonly publicNetworkAccessForQuery?: string;
|
|
186
|
+
readonly features?: LogAnalyticsWorkspaceFeatures;
|
|
187
|
+
readonly forceCmkForQuery?: boolean;
|
|
188
|
+
readonly defaultDataCollectionRuleResourceId?: string;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* The resource body interface for Azure Log Analytics Workspace API calls
|
|
192
|
+
*/
|
|
193
|
+
export interface LogAnalyticsWorkspaceBody {
|
|
194
|
+
readonly properties: LogAnalyticsWorkspaceBodyProperties;
|
|
195
|
+
readonly identity?: LogAnalyticsWorkspaceIdentity;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Unified Azure Log Analytics Workspace implementation
|
|
199
|
+
*
|
|
200
|
+
* This class provides a single, version-aware implementation that automatically handles version
|
|
201
|
+
* resolution, schema validation, and property transformation while maintaining full JSII compliance.
|
|
202
|
+
*
|
|
203
|
+
* Log Analytics Workspace is the central destination for log data from Azure resources,
|
|
204
|
+
* applications, and on-premises infrastructure. It enables querying, analysis, and
|
|
205
|
+
* visualization of log data using Kusto Query Language (KQL).
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* // Basic Log Analytics Workspace with default settings:
|
|
209
|
+
* const workspace = new LogAnalyticsWorkspace(this, "my-workspace", {
|
|
210
|
+
* name: "my-log-analytics",
|
|
211
|
+
* location: "eastus",
|
|
212
|
+
* resourceGroupId: resourceGroup.id,
|
|
213
|
+
* });
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* // Log Analytics Workspace with custom retention and SKU:
|
|
217
|
+
* const workspace = new LogAnalyticsWorkspace(this, "production-workspace", {
|
|
218
|
+
* name: "production-logs",
|
|
219
|
+
* location: "eastus",
|
|
220
|
+
* resourceGroupId: resourceGroup.id,
|
|
221
|
+
* retentionInDays: 90,
|
|
222
|
+
* sku: {
|
|
223
|
+
* name: "PerGB2018"
|
|
224
|
+
* },
|
|
225
|
+
* publicNetworkAccessForIngestion: "Enabled",
|
|
226
|
+
* publicNetworkAccessForQuery: "Enabled",
|
|
227
|
+
* tags: {
|
|
228
|
+
* environment: "production"
|
|
229
|
+
* }
|
|
230
|
+
* });
|
|
231
|
+
*
|
|
232
|
+
* @example
|
|
233
|
+
* // Log Analytics Workspace with capacity reservation:
|
|
234
|
+
* const workspace = new LogAnalyticsWorkspace(this, "high-volume-workspace", {
|
|
235
|
+
* name: "high-volume-logs",
|
|
236
|
+
* location: "eastus",
|
|
237
|
+
* resourceGroupId: resourceGroup.id,
|
|
238
|
+
* retentionInDays: 365,
|
|
239
|
+
* sku: {
|
|
240
|
+
* name: "CapacityReservation",
|
|
241
|
+
* capacityReservationLevel: 500
|
|
242
|
+
* },
|
|
243
|
+
* workspaceCapping: {
|
|
244
|
+
* dailyQuotaGb: 100
|
|
245
|
+
* }
|
|
246
|
+
* });
|
|
247
|
+
*
|
|
248
|
+
* @stability stable
|
|
249
|
+
*/
|
|
250
|
+
export declare class LogAnalyticsWorkspace extends AzapiResource {
|
|
251
|
+
/**
|
|
252
|
+
* The input properties for this Log Analytics Workspace instance
|
|
253
|
+
*/
|
|
254
|
+
readonly props: LogAnalyticsWorkspaceProps;
|
|
255
|
+
readonly idOutput: cdktf.TerraformOutput;
|
|
256
|
+
readonly nameOutput: cdktf.TerraformOutput;
|
|
257
|
+
readonly workspaceIdOutput: cdktf.TerraformOutput;
|
|
258
|
+
readonly customerIdOutput: cdktf.TerraformOutput;
|
|
259
|
+
/**
|
|
260
|
+
* Creates a new Azure Log Analytics Workspace using the AzapiResource framework
|
|
261
|
+
*
|
|
262
|
+
* The constructor automatically handles version resolution, schema registration,
|
|
263
|
+
* validation, and resource creation.
|
|
264
|
+
*
|
|
265
|
+
* @param scope - The scope in which to define this construct
|
|
266
|
+
* @param id - The unique identifier for this instance
|
|
267
|
+
* @param props - Configuration properties for the Log Analytics Workspace
|
|
268
|
+
*/
|
|
269
|
+
constructor(scope: Construct, id: string, props: LogAnalyticsWorkspaceProps);
|
|
270
|
+
/**
|
|
271
|
+
* Gets the default API version to use when no explicit version is specified
|
|
272
|
+
* Returns the latest stable version as the default
|
|
273
|
+
*/
|
|
274
|
+
protected defaultVersion(): string;
|
|
275
|
+
/**
|
|
276
|
+
* Gets the Azure resource type for Log Analytics Workspace
|
|
277
|
+
*/
|
|
278
|
+
protected resourceType(): string;
|
|
279
|
+
/**
|
|
280
|
+
* Gets the API schema for the resolved version
|
|
281
|
+
* Uses the framework's schema resolution to get the appropriate schema
|
|
282
|
+
*/
|
|
283
|
+
protected apiSchema(): ApiSchema;
|
|
284
|
+
/**
|
|
285
|
+
* Indicates that this resource type requires a location
|
|
286
|
+
*/
|
|
287
|
+
protected requiresLocation(): boolean;
|
|
288
|
+
/**
|
|
289
|
+
* Creates the resource body for the Azure API call
|
|
290
|
+
* Transforms the input properties into the JSON format expected by Azure REST API
|
|
291
|
+
*/
|
|
292
|
+
protected createResourceBody(props: any): any;
|
|
293
|
+
/**
|
|
294
|
+
* Resolves the parent resource ID for Log Analytics Workspace
|
|
295
|
+
* Log Analytics Workspace is a top-level resource within a resource group
|
|
296
|
+
*
|
|
297
|
+
* @param props - The resource properties
|
|
298
|
+
* @returns The parent resource ID (the resource group)
|
|
299
|
+
*/
|
|
300
|
+
protected resolveParentId(props: any): string;
|
|
301
|
+
}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.LogAnalyticsWorkspace = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
/**
|
|
7
|
+
* Unified Azure Log Analytics Workspace implementation using AzapiResource framework
|
|
8
|
+
*
|
|
9
|
+
* This class provides a version-aware implementation for Azure Log Analytics Workspace
|
|
10
|
+
* that automatically handles version management, schema validation, and property
|
|
11
|
+
* transformation across all supported API versions.
|
|
12
|
+
*
|
|
13
|
+
* Supported API Versions:
|
|
14
|
+
* - 2023-09-01 (Active, Latest)
|
|
15
|
+
* - 2022-10-01 (Active, Backward Compatibility)
|
|
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
|
+
* - Full JSII compliance for multi-language support
|
|
22
|
+
* - Configurable data retention, SKU, and workspace capping
|
|
23
|
+
* - Public network access controls
|
|
24
|
+
* - Workspace features configuration
|
|
25
|
+
*/
|
|
26
|
+
const cdktf = require("cdktf");
|
|
27
|
+
const log_analytics_workspace_schemas_1 = require("./log-analytics-workspace-schemas");
|
|
28
|
+
const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
|
|
29
|
+
/**
|
|
30
|
+
* Unified Azure Log Analytics Workspace implementation
|
|
31
|
+
*
|
|
32
|
+
* This class provides a single, version-aware implementation that automatically handles version
|
|
33
|
+
* resolution, schema validation, and property transformation while maintaining full JSII compliance.
|
|
34
|
+
*
|
|
35
|
+
* Log Analytics Workspace is the central destination for log data from Azure resources,
|
|
36
|
+
* applications, and on-premises infrastructure. It enables querying, analysis, and
|
|
37
|
+
* visualization of log data using Kusto Query Language (KQL).
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* // Basic Log Analytics Workspace with default settings:
|
|
41
|
+
* const workspace = new LogAnalyticsWorkspace(this, "my-workspace", {
|
|
42
|
+
* name: "my-log-analytics",
|
|
43
|
+
* location: "eastus",
|
|
44
|
+
* resourceGroupId: resourceGroup.id,
|
|
45
|
+
* });
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* // Log Analytics Workspace with custom retention and SKU:
|
|
49
|
+
* const workspace = new LogAnalyticsWorkspace(this, "production-workspace", {
|
|
50
|
+
* name: "production-logs",
|
|
51
|
+
* location: "eastus",
|
|
52
|
+
* resourceGroupId: resourceGroup.id,
|
|
53
|
+
* retentionInDays: 90,
|
|
54
|
+
* sku: {
|
|
55
|
+
* name: "PerGB2018"
|
|
56
|
+
* },
|
|
57
|
+
* publicNetworkAccessForIngestion: "Enabled",
|
|
58
|
+
* publicNetworkAccessForQuery: "Enabled",
|
|
59
|
+
* tags: {
|
|
60
|
+
* environment: "production"
|
|
61
|
+
* }
|
|
62
|
+
* });
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* // Log Analytics Workspace with capacity reservation:
|
|
66
|
+
* const workspace = new LogAnalyticsWorkspace(this, "high-volume-workspace", {
|
|
67
|
+
* name: "high-volume-logs",
|
|
68
|
+
* location: "eastus",
|
|
69
|
+
* resourceGroupId: resourceGroup.id,
|
|
70
|
+
* retentionInDays: 365,
|
|
71
|
+
* sku: {
|
|
72
|
+
* name: "CapacityReservation",
|
|
73
|
+
* capacityReservationLevel: 500
|
|
74
|
+
* },
|
|
75
|
+
* workspaceCapping: {
|
|
76
|
+
* dailyQuotaGb: 100
|
|
77
|
+
* }
|
|
78
|
+
* });
|
|
79
|
+
*
|
|
80
|
+
* @stability stable
|
|
81
|
+
*/
|
|
82
|
+
class LogAnalyticsWorkspace extends azapi_resource_1.AzapiResource {
|
|
83
|
+
/**
|
|
84
|
+
* Creates a new Azure Log Analytics Workspace using the AzapiResource framework
|
|
85
|
+
*
|
|
86
|
+
* The constructor automatically handles version resolution, schema registration,
|
|
87
|
+
* validation, and resource creation.
|
|
88
|
+
*
|
|
89
|
+
* @param scope - The scope in which to define this construct
|
|
90
|
+
* @param id - The unique identifier for this instance
|
|
91
|
+
* @param props - Configuration properties for the Log Analytics Workspace
|
|
92
|
+
*/
|
|
93
|
+
constructor(scope, id, props) {
|
|
94
|
+
// Validate retention days if provided
|
|
95
|
+
if (props.retentionInDays !== undefined) {
|
|
96
|
+
if (props.retentionInDays < 30 || props.retentionInDays > 730) {
|
|
97
|
+
throw new Error("retentionInDays must be between 30 and 730 days");
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Validate capacity reservation level if CapacityReservation SKU is used
|
|
101
|
+
if (props.sku?.name === "CapacityReservation") {
|
|
102
|
+
const validLevels = [100, 200, 300, 400, 500, 1000, 2000, 5000];
|
|
103
|
+
if (props.sku.capacityReservationLevel === undefined ||
|
|
104
|
+
!validLevels.includes(props.sku.capacityReservationLevel)) {
|
|
105
|
+
throw new Error(`capacityReservationLevel must be one of ${validLevels.join(", ")} when using CapacityReservation SKU`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
super(scope, id, props);
|
|
109
|
+
this.props = props;
|
|
110
|
+
// Create Terraform outputs for easy access and referencing from other resources
|
|
111
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
112
|
+
value: this.id,
|
|
113
|
+
description: "The ID of the Log Analytics Workspace",
|
|
114
|
+
});
|
|
115
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
116
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
117
|
+
description: "The name of the Log Analytics Workspace",
|
|
118
|
+
});
|
|
119
|
+
this.workspaceIdOutput = new cdktf.TerraformOutput(this, "workspace_id", {
|
|
120
|
+
value: `\${${this.terraformResource.fqn}.output.properties.customerId}`,
|
|
121
|
+
description: "The unique identifier (workspace ID) of the Log Analytics Workspace",
|
|
122
|
+
});
|
|
123
|
+
this.customerIdOutput = new cdktf.TerraformOutput(this, "customer_id", {
|
|
124
|
+
value: `\${${this.terraformResource.fqn}.output.properties.customerId}`,
|
|
125
|
+
description: "The customer ID (same as workspace ID) of the Log Analytics Workspace",
|
|
126
|
+
});
|
|
127
|
+
// Override logical IDs
|
|
128
|
+
this.idOutput.overrideLogicalId("id");
|
|
129
|
+
this.nameOutput.overrideLogicalId("name");
|
|
130
|
+
this.workspaceIdOutput.overrideLogicalId("workspace_id");
|
|
131
|
+
this.customerIdOutput.overrideLogicalId("customer_id");
|
|
132
|
+
}
|
|
133
|
+
// =============================================================================
|
|
134
|
+
// REQUIRED ABSTRACT METHODS FROM AzapiResource
|
|
135
|
+
// =============================================================================
|
|
136
|
+
/**
|
|
137
|
+
* Gets the default API version to use when no explicit version is specified
|
|
138
|
+
* Returns the latest stable version as the default
|
|
139
|
+
*/
|
|
140
|
+
defaultVersion() {
|
|
141
|
+
return "2023-09-01";
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Gets the Azure resource type for Log Analytics Workspace
|
|
145
|
+
*/
|
|
146
|
+
resourceType() {
|
|
147
|
+
return log_analytics_workspace_schemas_1.LOG_ANALYTICS_WORKSPACE_TYPE;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Gets the API schema for the resolved version
|
|
151
|
+
* Uses the framework's schema resolution to get the appropriate schema
|
|
152
|
+
*/
|
|
153
|
+
apiSchema() {
|
|
154
|
+
return this.resolveSchema();
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Indicates that this resource type requires a location
|
|
158
|
+
*/
|
|
159
|
+
requiresLocation() {
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Creates the resource body for the Azure API call
|
|
164
|
+
* Transforms the input properties into the JSON format expected by Azure REST API
|
|
165
|
+
*/
|
|
166
|
+
createResourceBody(props) {
|
|
167
|
+
const typedProps = props;
|
|
168
|
+
const body = {
|
|
169
|
+
properties: {
|
|
170
|
+
retentionInDays: typedProps.retentionInDays ?? 30,
|
|
171
|
+
sku: typedProps.sku ?? { name: "PerGB2018" },
|
|
172
|
+
publicNetworkAccessForIngestion: typedProps.publicNetworkAccessForIngestion ?? "Enabled",
|
|
173
|
+
publicNetworkAccessForQuery: typedProps.publicNetworkAccessForQuery ?? "Enabled",
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
// Add optional properties only if specified
|
|
177
|
+
if (typedProps.workspaceCapping) {
|
|
178
|
+
body.properties.workspaceCapping = typedProps.workspaceCapping;
|
|
179
|
+
}
|
|
180
|
+
if (typedProps.features) {
|
|
181
|
+
body.properties.features = typedProps.features;
|
|
182
|
+
}
|
|
183
|
+
if (typedProps.forceCmkForQuery !== undefined) {
|
|
184
|
+
body.properties.forceCmkForQuery = typedProps.forceCmkForQuery;
|
|
185
|
+
}
|
|
186
|
+
if (typedProps.defaultDataCollectionRuleResourceId) {
|
|
187
|
+
body.properties.defaultDataCollectionRuleResourceId =
|
|
188
|
+
typedProps.defaultDataCollectionRuleResourceId;
|
|
189
|
+
}
|
|
190
|
+
// Add identity at the top level if specified
|
|
191
|
+
if (typedProps.identity) {
|
|
192
|
+
body.identity = typedProps.identity;
|
|
193
|
+
}
|
|
194
|
+
return body;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Resolves the parent resource ID for Log Analytics Workspace
|
|
198
|
+
* Log Analytics Workspace is a top-level resource within a resource group
|
|
199
|
+
*
|
|
200
|
+
* @param props - The resource properties
|
|
201
|
+
* @returns The parent resource ID (the resource group)
|
|
202
|
+
*/
|
|
203
|
+
resolveParentId(props) {
|
|
204
|
+
return props.resourceGroupId;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
exports.LogAnalyticsWorkspace = LogAnalyticsWorkspace;
|
|
208
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
209
|
+
LogAnalyticsWorkspace[_a] = { fqn: "@microsoft/terraform-cdk-constructs.LogAnalyticsWorkspace", version: "1.9.0" };
|
|
210
|
+
(() => {
|
|
211
|
+
azapi_resource_1.AzapiResource.registerSchemas(log_analytics_workspace_schemas_1.LOG_ANALYTICS_WORKSPACE_TYPE, log_analytics_workspace_schemas_1.ALL_LOG_ANALYTICS_WORKSPACE_VERSIONS);
|
|
212
|
+
})();
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWFuYWx5dGljcy13b3Jrc3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtbG9nYW5hbHl0aWNzd29ya3NwYWNlL2xpYi9sb2ctYW5hbHl0aWNzLXdvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsK0JBQStCO0FBRS9CLHVGQUcyQztBQUMzQyw4RUFHbUQ7QUE2TW5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0RHO0FBQ0gsTUFBYSxxQkFBc0IsU0FBUSw4QkFBYTtJQW1CdEQ7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQztRQUN6RSxzQ0FBc0M7UUFDdEMsSUFBSSxLQUFLLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLElBQUksS0FBSyxDQUFDLGVBQWUsR0FBRyxFQUFFLElBQUksS0FBSyxDQUFDLGVBQWUsR0FBRyxHQUFHLEVBQUUsQ0FBQztnQkFDOUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1lBQ3JFLENBQUM7UUFDSCxDQUFDO1FBRUQseUVBQXlFO1FBQ3pFLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztZQUM5QyxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRSxJQUNFLEtBQUssQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEtBQUssU0FBUztnQkFDaEQsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsRUFDekQsQ0FBQztnQkFDRCxNQUFNLElBQUksS0FBSyxDQUNiLDJDQUEyQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FDdkcsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLHVDQUF1QztTQUNyRCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLHlDQUF5QztTQUN2RCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDdkUsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsZ0NBQWdDO1lBQ3ZFLFdBQVcsRUFDVCxxRUFBcUU7U0FDeEUsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ3JFLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGdDQUFnQztZQUN2RSxXQUFXLEVBQ1QsdUVBQXVFO1NBQzFFLENBQUMsQ0FBQztRQUVILHVCQUF1QjtRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLCtDQUErQztJQUMvQyxnRkFBZ0Y7SUFFaEY7OztPQUdHO0lBQ08sY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxZQUFZO1FBQ3BCLE9BQU8sOERBQTRCLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFNBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ08sZ0JBQWdCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGtCQUFrQixDQUFDLEtBQVU7UUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBbUMsQ0FBQztRQUV2RCxNQUFNLElBQUksR0FBUTtZQUNoQixVQUFVLEVBQUU7Z0JBQ1YsZUFBZSxFQUFFLFVBQVUsQ0FBQyxlQUFlLElBQUksRUFBRTtnQkFDakQsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUM1QywrQkFBK0IsRUFDN0IsVUFBVSxDQUFDLCtCQUErQixJQUFJLFNBQVM7Z0JBQ3pELDJCQUEyQixFQUN6QixVQUFVLENBQUMsMkJBQTJCLElBQUksU0FBUzthQUN0RDtTQUNGLENBQUM7UUFFRiw0Q0FBNEM7UUFDNUMsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqRSxDQUFDO1FBRUQsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNqRCxDQUFDO1FBRUQsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7UUFDakUsQ0FBQztRQUVELElBQUksVUFBVSxDQUFDLG1DQUFtQyxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQ0FBbUM7Z0JBQ2pELFVBQVUsQ0FBQyxtQ0FBbUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsNkNBQTZDO1FBQzdDLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUN0QyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sZUFBZSxDQUFDLEtBQVU7UUFDbEMsT0FBUSxLQUFvQyxDQUFDLGVBQWUsQ0FBQztJQUMvRCxDQUFDOztBQTNLSCxzREE0S0M7OztBQTNLQztJQUNFLDhCQUFhLENBQUMsZUFBZSxDQUMzQiw4REFBNEIsRUFDNUIsc0VBQW9DLENBQ3JDLENBQUM7QUFDSixDQUFDLEdBQUEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCBBenVyZSBMb2cgQW5hbHl0aWNzIFdvcmtzcGFjZSBpbXBsZW1lbnRhdGlvbiB1c2luZyBBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIGZvciBBenVyZSBMb2cgQW5hbHl0aWNzIFdvcmtzcGFjZVxuICogdGhhdCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvbiBtYW5hZ2VtZW50LCBzY2hlbWEgdmFsaWRhdGlvbiwgYW5kIHByb3BlcnR5XG4gKiB0cmFuc2Zvcm1hdGlvbiBhY3Jvc3MgYWxsIHN1cHBvcnRlZCBBUEkgdmVyc2lvbnMuXG4gKlxuICogU3VwcG9ydGVkIEFQSSBWZXJzaW9uczpcbiAqIC0gMjAyMy0wOS0wMSAoQWN0aXZlLCBMYXRlc3QpXG4gKiAtIDIwMjItMTAtMDEgKEFjdGl2ZSwgQmFja3dhcmQgQ29tcGF0aWJpbGl0eSlcbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gQXV0b21hdGljIGxhdGVzdCB2ZXJzaW9uIHJlc29sdXRpb24gd2hlbiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICogLSBFeHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmcgZm9yIHN0YWJpbGl0eSByZXF1aXJlbWVudHNcbiAqIC0gU2NoZW1hLWRyaXZlbiB2YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvblxuICogLSBGdWxsIEpTSUkgY29tcGxpYW5jZSBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICogLSBDb25maWd1cmFibGUgZGF0YSByZXRlbnRpb24sIFNLVSwgYW5kIHdvcmtzcGFjZSBjYXBwaW5nXG4gKiAtIFB1YmxpYyBuZXR3b3JrIGFjY2VzcyBjb250cm9sc1xuICogLSBXb3Jrc3BhY2UgZmVhdHVyZXMgY29uZmlndXJhdGlvblxuICovXG5cbmltcG9ydCAqIGFzIGNka3RmIGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIEFMTF9MT0dfQU5BTFlUSUNTX1dPUktTUEFDRV9WRVJTSU9OUyxcbiAgTE9HX0FOQUxZVElDU19XT1JLU1BBQ0VfVFlQRSxcbn0gZnJvbSBcIi4vbG9nLWFuYWx5dGljcy13b3Jrc3BhY2Utc2NoZW1hc1wiO1xuaW1wb3J0IHtcbiAgQXphcGlSZXNvdXJjZSxcbiAgQXphcGlSZXNvdXJjZVByb3BzLFxufSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvYXphcGkvYXphcGktcmVzb3VyY2VcIjtcbmltcG9ydCB7IEFwaVNjaGVtYSB9IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi92ZXJzaW9uLW1hbmFnZXIvaW50ZXJmYWNlcy92ZXJzaW9uLWludGVyZmFjZXNcIjtcblxuLyoqXG4gKiBTS1UgY29uZmlndXJhdGlvbiBmb3IgTG9nIEFuYWx5dGljcyBXb3Jrc3BhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dBbmFseXRpY3NXb3Jrc3BhY2VTa3Uge1xuICAvKipcbiAgICogU0tVIG5hbWUgZm9yIHRoZSBMb2cgQW5hbHl0aWNzIFdvcmtzcGFjZVxuICAgKlxuICAgKiBBdmFpbGFibGUgb3B0aW9uczpcbiAgICogLSBcIkZyZWVcIiAtIEZyZWUgdGllciAobGltaXRlZCB0byA1MDBNQi9kYXksIDcgZGF5IHJldGVudGlvbilcbiAgICogLSBcIlN0YW5kYXJkXCIgLSBTdGFuZGFyZCB0aWVyIChsZWdhY3kpXG4gICAqIC0gXCJQcmVtaXVtXCIgLSBQcmVtaXVtIHRpZXIgKGxlZ2FjeSlcbiAgICogLSBcIlBlck5vZGVcIiAtIFBlciBub2RlIHByaWNpbmcgKGxlZ2FjeSwgZm9yIE9NUyBjdXN0b21lcnMpXG4gICAqIC0gXCJQZXJHQjIwMThcIiAtIFBheS1hcy15b3UtZ28gcHJpY2luZyBiYXNlZCBvbiBkYXRhIGluZ2VzdGlvblxuICAgKiAtIFwiU3RhbmRhbG9uZVwiIC0gU3RhbmRhbG9uZSB0aWVyIChsZWdhY3kpXG4gICAqIC0gXCJDYXBhY2l0eVJlc2VydmF0aW9uXCIgLSBDb21taXRtZW50IHRpZXIgd2l0aCByZXNlcnZlZCBjYXBhY2l0eVxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIFwiUGVyR0IyMDE4XCJcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6XG4gICAgfCBcIkZyZWVcIlxuICAgIHwgXCJTdGFuZGFyZFwiXG4gICAgfCBcIlByZW1pdW1cIlxuICAgIHwgXCJQZXJOb2RlXCJcbiAgICB8IFwiUGVyR0IyMDE4XCJcbiAgICB8IFwiU3RhbmRhbG9uZVwiXG4gICAgfCBcIkNhcGFjaXR5UmVzZXJ2YXRpb25cIjtcblxuICAvKipcbiAgICogQ2FwYWNpdHkgcmVzZXJ2YXRpb24gbGV2ZWwgaW4gR0IgcGVyIGRheVxuICAgKiBPbmx5IGFwcGxpY2FibGUgd2hlbiBTS1UgbmFtZSBpcyBcIkNhcGFjaXR5UmVzZXJ2YXRpb25cIlxuICAgKiBWYWxpZCB2YWx1ZXM6IDEwMCwgMjAwLCAzMDAsIDQwMCwgNTAwLCAxMDAwLCAyMDAwLCA1MDAwXG4gICAqL1xuICByZWFkb25seSBjYXBhY2l0eVJlc2VydmF0aW9uTGV2ZWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogV29ya3NwYWNlIGNhcHBpbmcgY29uZmlndXJhdGlvbiBmb3IgZGFpbHkgZGF0YSBpbmdlc3Rpb24gbGltaXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nQW5hbHl0aWNzV29ya3NwYWNlQ2FwcGluZyB7XG4gIC8qKlxuICAgKiBEYWlseSB2b2x1bWUgY2FwIGluIEdCXG4gICAqIEEgdmFsdWUgb2YgLTEgbWVhbnMgbm8gY2FwXG4gICAqL1xuICByZWFkb25seSBkYWlseVF1b3RhR2I6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXb3Jrc3BhY2UgZmVhdHVyZXMgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0FuYWx5dGljc1dvcmtzcGFjZUZlYXR1cmVzIHtcbiAgLyoqXG4gICAqIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGRhdGEgZXhwb3J0IGlzIGVuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZURhdGFFeHBvcnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciBkYXRhIHNob3VsZCBiZSBpbW1lZGlhdGVseSBwdXJnZWQgYWZ0ZXIgMzAgZGF5c1xuICAgKiBpbnN0ZWFkIG9mIHRoZSBjb25maWd1cmVkIHJldGVudGlvbiBwZXJpb2RcbiAgICovXG4gIHJlYWRvbmx5IGltbWVkaWF0ZVB1cmdlRGF0YU9uMzBEYXlzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgbG9nIGFjY2VzcyB1c2luZyBBQURJQU0gaXMgZGlzYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGRpc2FibGVMb2NhbEF1dGg/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciBjbHVzdGVyIHJlc291cmNlIHBlcm1pc3Npb25zIGFyZSBlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVMb2dBY2Nlc3NVc2luZ09ubHlSZXNvdXJjZVBlcm1pc3Npb25zPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNYW5hZ2VkIGlkZW50aXR5IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB3b3Jrc3BhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dBbmFseXRpY3NXb3Jrc3BhY2VJZGVudGl0eSB7XG4gIC8qKlxuICAgKiBUeXBlIG9mIG1hbmFnZWQgaWRlbnRpdHlcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6XG4gICAgfCBcIlN5c3RlbUFzc2lnbmVkXCJcbiAgICB8IFwiVXNlckFzc2lnbmVkXCJcbiAgICB8IFwiU3lzdGVtQXNzaWduZWQsVXNlckFzc2lnbmVkXCJcbiAgICB8IFwiTm9uZVwiO1xuXG4gIC8qKlxuICAgKiBVc2VyLWFzc2lnbmVkIGlkZW50aXR5IHJlc291cmNlIElEc1xuICAgKiBSZXF1aXJlZCB3aGVuIHR5cGUgaW5jbHVkZXMgVXNlckFzc2lnbmVkXG4gICAqL1xuICByZWFkb25seSB1c2VyQXNzaWduZWRJZGVudGl0aWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgdW5pZmllZCBBenVyZSBMb2cgQW5hbHl0aWNzIFdvcmtzcGFjZVxuICpcbiAqIEV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHdpdGggTG9nIEFuYWx5dGljcyBXb3Jrc3BhY2Ugc3BlY2lmaWMgcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0FuYWx5dGljc1dvcmtzcGFjZVByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIFJlc291cmNlIEdyb3VwIElEIHdoZXJlIHRoZSB3b3Jrc3BhY2Ugd2lsbCBiZSBjcmVhdGVkXG4gICAqIFRoZSB3b3Jrc3BhY2Ugd2lsbCBiZSBjcmVhdGVkIGFzIGEgY2hpbGQgb2YgdGhpcyByZXNvdXJjZSBncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VHcm91cElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERhdGEgcmV0ZW50aW9uIHBlcmlvZCBpbiBkYXlzXG4gICAqXG4gICAqIFZhbHVlcyBiZXR3ZWVuIDMwIGFuZCA3MzAgYXJlIHN1cHBvcnRlZCBmb3IgcGF5LWFzLXlvdS1nbyBwcmljaW5nLlxuICAgKiBGcmVlIHRpZXIgaXMgbGltaXRlZCB0byA3IGRheXMuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgMzBcbiAgICovXG4gIHJlYWRvbmx5IHJldGVudGlvbkluRGF5cz86IG51bWJlcjtcblxuICAvKipcbiAgICogU0tVIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB3b3Jrc3BhY2VcbiAgICpcbiAgICogRGV0ZXJtaW5lcyBwcmljaW5nIHRpZXIgYW5kIGNhcGFiaWxpdGllcyBvZiB0aGUgd29ya3NwYWNlLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHsgbmFtZTogXCJQZXJHQjIwMThcIiB9XG4gICAqL1xuICByZWFkb25seSBza3U/OiBMb2dBbmFseXRpY3NXb3Jrc3BhY2VTa3U7XG5cbiAgLyoqXG4gICAqIERhaWx5IHZvbHVtZSBjYXAgZm9yIGRhdGEgaW5nZXN0aW9uXG4gICAqXG4gICAqIFdoZW4gdGhlIGRhaWx5IGNhcCBpcyByZWFjaGVkLCBkYXRhIGluZ2VzdGlvbiBzdG9wcyB1bnRpbCB0aGUgbmV4dCBkYXkuXG4gICAqIEEgdmFsdWUgb2YgZGFpbHlRdW90YUdiOiAtMSBtZWFucyBubyBjYXAuXG4gICAqL1xuICByZWFkb25seSB3b3Jrc3BhY2VDYXBwaW5nPzogTG9nQW5hbHl0aWNzV29ya3NwYWNlQ2FwcGluZztcblxuICAvKipcbiAgICogUHVibGljIG5ldHdvcmsgYWNjZXNzIGZvciBkYXRhIGluZ2VzdGlvblxuICAgKlxuICAgKiBDb250cm9scyB3aGV0aGVyIGRhdGEgY2FuIGJlIGluZ2VzdGVkIG92ZXIgdGhlIHB1YmxpYyBpbnRlcm5ldC5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBcIkVuYWJsZWRcIlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljTmV0d29ya0FjY2Vzc0ZvckluZ2VzdGlvbj86IFwiRW5hYmxlZFwiIHwgXCJEaXNhYmxlZFwiO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgbmV0d29yayBhY2Nlc3MgZm9yIHF1ZXJ5aW5nIGRhdGFcbiAgICpcbiAgICogQ29udHJvbHMgd2hldGhlciBxdWVyaWVzIGNhbiBiZSBleGVjdXRlZCBvdmVyIHRoZSBwdWJsaWMgaW50ZXJuZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgXCJFbmFibGVkXCJcbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY05ldHdvcmtBY2Nlc3NGb3JRdWVyeT86IFwiRW5hYmxlZFwiIHwgXCJEaXNhYmxlZFwiO1xuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgZmVhdHVyZXMgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHNwZWNpZmljIHdvcmtzcGFjZSBmZWF0dXJlcyBsaWtlIGRhdGEgZXhwb3J0LFxuICAgKiBpbW1lZGlhdGUgcHVyZ2UsIGFuZCBsb2NhbCBhdXRoZW50aWNhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmVzPzogTG9nQW5hbHl0aWNzV29ya3NwYWNlRmVhdHVyZXM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgY3VzdG9tZXItbWFuYWdlZCBrZXlzIGFyZSByZXF1aXJlZCBmb3Igc2F2ZWQgc2VhcmNoZXMgYW5kIGFsZXJ0c1xuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIGFsbCBzYXZlZCBzZWFyY2hlcyBhbmQgYWxlcnRzIG11c3QgdXNlIGN1c3RvbWVyLW1hbmFnZWQga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IGZvcmNlQ21rRm9yUXVlcnk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBJRCBvZiB0aGUgZGVmYXVsdCBEYXRhIENvbGxlY3Rpb24gUnVsZVxuICAgKlxuICAgKiBBc3NvY2lhdGVzIGEgZGVmYXVsdCBEQ1Igd2l0aCB0aGUgd29ya3NwYWNlIGZvciBkYXRhIGNvbGxlY3Rpb24uXG4gICAqIE9ubHkgYXZhaWxhYmxlIGluIEFQSSB2ZXJzaW9uIDIwMjMtMDktMDEgYW5kIGxhdGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdERhdGFDb2xsZWN0aW9uUnVsZVJlc291cmNlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1hbmFnZWQgaWRlbnRpdHkgY29uZmlndXJhdGlvbiBmb3IgdGhlIHdvcmtzcGFjZVxuICAgKlxuICAgKiBFbmFibGVzIG1hbmFnZWQgaWRlbnRpdHkgYXV0aGVudGljYXRpb24gZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICByZWFkb25seSBpZGVudGl0eT86IExvZ0FuYWx5dGljc1dvcmtzcGFjZUlkZW50aXR5O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBMb2cgQW5hbHl0aWNzIFdvcmtzcGFjZSByZXF1ZXN0IGJvZHlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dBbmFseXRpY3NXb3Jrc3BhY2VCb2R5UHJvcGVydGllcyB7XG4gIHJlYWRvbmx5IHJldGVudGlvbkluRGF5cz86IG51bWJlcjtcbiAgcmVhZG9ubHkgc2t1PzogTG9nQW5hbHl0aWNzV29ya3NwYWNlU2t1O1xuICByZWFkb25seSB3b3Jrc3BhY2VDYXBwaW5nPzogTG9nQW5hbHl0aWNzV29ya3NwYWNlQ2FwcGluZztcbiAgcmVhZG9ubHkgcHVibGljTmV0d29ya0FjY2Vzc0ZvckluZ2VzdGlvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgcHVibGljTmV0d29ya0FjY2Vzc0ZvclF1ZXJ5Pzogc3RyaW5nO1xuICByZWFkb25seSBmZWF0dXJlcz86IExvZ0FuYWx5dGljc1dvcmtzcGFjZUZlYXR1cmVzO1xuICByZWFkb25seSBmb3JjZUNta0ZvclF1ZXJ5PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGVmYXVsdERhdGFDb2xsZWN0aW9uUnVsZVJlc291cmNlSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHJlc291cmNlIGJvZHkgaW50ZXJmYWNlIGZvciBBenVyZSBMb2cgQW5hbHl0aWNzIFdvcmtzcGFjZSBBUEkgY2FsbHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dBbmFseXRpY3NXb3Jrc3BhY2VCb2R5IHtcbiAgcmVhZG9ubHkgcHJvcGVydGllczogTG9nQW5hbHl0aWNzV29ya3NwYWNlQm9keVByb3BlcnRpZXM7XG4gIHJlYWRvbmx5IGlkZW50aXR5PzogTG9nQW5hbHl0aWNzV29ya3NwYWNlSWRlbnRpdHk7XG59XG5cbi8qKlxuICogVW5pZmllZCBBenVyZSBMb2cgQW5hbHl0aWNzIFdvcmtzcGFjZSBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBzaW5nbGUsIHZlcnNpb24tYXdhcmUgaW1wbGVtZW50YXRpb24gdGhhdCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvblxuICogcmVzb2x1dGlvbiwgc2NoZW1hIHZhbGlkYXRpb24sIGFuZCBwcm9wZXJ0eSB0cmFuc2Zvcm1hdGlvbiB3aGlsZSBtYWludGFpbmluZyBmdWxsIEpTSUkgY29tcGxpYW5jZS5cbiAqXG4gKiBMb2cgQW5hbHl0aWNzIFdvcmtzcGFjZSBpcyB0aGUgY2VudHJhbCBkZXN0aW5hdGlvbiBmb3IgbG9nIGRhdGEgZnJvbSBBenVyZSByZXNvdXJjZXMsXG4gKiBhcHBsaWNhdGlvbnMsIGFuZCBvbi1wcmVtaXNlcyBpbmZyYXN0cnVjdHVyZS4gSXQgZW5hYmxlcyBxdWVyeWluZywgYW5hbHlzaXMsIGFuZFxuICogdmlzdWFsaXphdGlvbiBvZiBsb2cgZGF0YSB1c2luZyBLdXN0byBRdWVyeSBMYW5ndWFnZSAoS1FMKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQmFzaWMgTG9nIEFuYWx5dGljcyBXb3Jrc3BhY2Ugd2l0aCBkZWZhdWx0IHNldHRpbmdzOlxuICogY29uc3Qgd29ya3NwYWNlID0gbmV3IExvZ0FuYWx5dGljc1dvcmtzcGFjZSh0aGlzLCBcIm15LXdvcmtzcGFjZVwiLCB7XG4gKiAgIG5hbWU6IFwibXktbG9nLWFuYWx5dGljc1wiLFxuICogICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAqICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIExvZyBBbmFseXRpY3MgV29ya3NwYWNlIHdpdGggY3VzdG9tIHJldGVudGlvbiBhbmQgU0tVOlxuICogY29uc3Qgd29ya3NwYWNlID0gbmV3IExvZ0FuYWx5dGljc1dvcmtzcGFjZSh0aGlzLCBcInByb2R1Y3Rpb24td29ya3NwYWNlXCIsIHtcbiAqICAgbmFtZTogXCJwcm9kdWN0aW9uLWxvZ3NcIixcbiAqICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gKiAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAqICAgcmV0ZW50aW9uSW5EYXlzOiA5MCxcbiAqICAgc2t1OiB7XG4gKiAgICAgbmFtZTogXCJQZXJHQjIwMThcIlxuICogICB9LFxuICogICBwdWJsaWNOZXR3b3JrQWNjZXNzRm9ySW5nZXN0aW9uOiBcIkVuYWJsZWRcIixcbiAqICAgcHVibGljTmV0d29ya0FjY2Vzc0ZvclF1ZXJ5OiBcIkVuYWJsZWRcIixcbiAqICAgdGFnczoge1xuICogICAgIGVudmlyb25tZW50OiBcInByb2R1Y3Rpb25cIlxuICogICB9XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTG9nIEFuYWx5dGljcyBXb3Jrc3BhY2Ugd2l0aCBjYXBhY2l0eSByZXNlcnZhdGlvbjpcbiAqIGNvbnN0IHdvcmtzcGFjZSA9IG5ldyBMb2dBbmFseXRpY3NXb3Jrc3BhY2UodGhpcywgXCJoaWdoLXZvbHVtZS13b3Jrc3BhY2VcIiwge1xuICogICBuYW1lOiBcImhpZ2gtdm9sdW1lLWxvZ3NcIixcbiAqICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gKiAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAqICAgcmV0ZW50aW9uSW5EYXlzOiAzNjUsXG4gKiAgIHNrdToge1xuICogICAgIG5hbWU6IFwiQ2FwYWNpdHlSZXNlcnZhdGlvblwiLFxuICogICAgIGNhcGFjaXR5UmVzZXJ2YXRpb25MZXZlbDogNTAwXG4gKiAgIH0sXG4gKiAgIHdvcmtzcGFjZUNhcHBpbmc6IHtcbiAqICAgICBkYWlseVF1b3RhR2I6IDEwMFxuICogICB9XG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgTG9nQW5hbHl0aWNzV29ya3NwYWNlIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAgICBMT0dfQU5BTFlUSUNTX1dPUktTUEFDRV9UWVBFLFxuICAgICAgQUxMX0xPR19BTkFMWVRJQ1NfV09SS1NQQUNFX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoaXMgTG9nIEFuYWx5dGljcyBXb3Jrc3BhY2UgaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogTG9nQW5hbHl0aWNzV29ya3NwYWNlUHJvcHM7XG5cbiAgLy8gT3V0cHV0IHByb3BlcnRpZXMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZ1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IHdvcmtzcGFjZUlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBjdXN0b21lcklkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQXp1cmUgTG9nIEFuYWx5dGljcyBXb3Jrc3BhY2UgdXNpbmcgdGhlIEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gICAqXG4gICAqIFRoZSBjb25zdHJ1Y3RvciBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvbiByZXNvbHV0aW9uLCBzY2hlbWEgcmVnaXN0cmF0aW9uLFxuICAgKiB2YWxpZGF0aW9uLCBhbmQgcmVzb3VyY2UgY3JlYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGluc3RhbmNlXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIExvZyBBbmFseXRpY3MgV29ya3NwYWNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTG9nQW5hbHl0aWNzV29ya3NwYWNlUHJvcHMpIHtcbiAgICAvLyBWYWxpZGF0ZSByZXRlbnRpb24gZGF5cyBpZiBwcm92aWRlZFxuICAgIGlmIChwcm9wcy5yZXRlbnRpb25JbkRheXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHByb3BzLnJldGVudGlvbkluRGF5cyA8IDMwIHx8IHByb3BzLnJldGVudGlvbkluRGF5cyA+IDczMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZXRlbnRpb25JbkRheXMgbXVzdCBiZSBiZXR3ZWVuIDMwIGFuZCA3MzAgZGF5c1wiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBjYXBhY2l0eSByZXNlcnZhdGlvbiBsZXZlbCBpZiBDYXBhY2l0eVJlc2VydmF0aW9uIFNLVSBpcyB1c2VkXG4gICAgaWYgKHByb3BzLnNrdT8ubmFtZSA9PT0gXCJDYXBhY2l0eVJlc2VydmF0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHZhbGlkTGV2ZWxzID0gWzEwMCwgMjAwLCAzMDAsIDQwMCwgNTAwLCAxMDAwLCAyMDAwLCA1MDAwXTtcbiAgICAgIGlmIChcbiAgICAgICAgcHJvcHMuc2t1LmNhcGFjaXR5UmVzZXJ2YXRpb25MZXZlbCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICF2YWxpZExldmVscy5pbmNsdWRlcyhwcm9wcy5za3UuY2FwYWNpdHlSZXNlcnZhdGlvbkxldmVsKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgY2FwYWNpdHlSZXNlcnZhdGlvbkxldmVsIG11c3QgYmUgb25lIG9mICR7dmFsaWRMZXZlbHMuam9pbihcIiwgXCIpfSB3aGVuIHVzaW5nIENhcGFjaXR5UmVzZXJ2YXRpb24gU0tVYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIC8vIENyZWF0ZSBUZXJyYWZvcm0gb3V0cHV0cyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nIGZyb20gb3RoZXIgcmVzb3VyY2VzXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgTG9nIEFuYWx5dGljcyBXb3Jrc3BhY2VcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBMb2cgQW5hbHl0aWNzIFdvcmtzcGFjZVwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy53b3Jrc3BhY2VJZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJ3b3Jrc3BhY2VfaWRcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuY3VzdG9tZXJJZH1gLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiVGhlIHVuaXF1ZSBpZGVudGlmaWVyICh3b3Jrc3BhY2UgSUQpIG9mIHRoZSBMb2cgQW5hbHl0aWNzIFdvcmtzcGFjZVwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jdXN0b21lcklkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImN1c3RvbWVyX2lkXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmN1c3RvbWVySWR9YCxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlRoZSBjdXN0b21lciBJRCAoc2FtZSBhcyB3b3Jrc3BhY2UgSUQpIG9mIHRoZSBMb2cgQW5hbHl0aWNzIFdvcmtzcGFjZVwiLFxuICAgIH0pO1xuXG4gICAgLy8gT3ZlcnJpZGUgbG9naWNhbCBJRHNcbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLndvcmtzcGFjZUlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwid29ya3NwYWNlX2lkXCIpO1xuICAgIHRoaXMuY3VzdG9tZXJJZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImN1c3RvbWVyX2lkXCIpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVRVUlSRUQgQUJTVFJBQ1QgTUVUSE9EUyBGUk9NIEF6YXBpUmVzb3VyY2VcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZGVmYXVsdCBBUEkgdmVyc2lvbiB0byB1c2Ugd2hlbiBubyBleHBsaWNpdCB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICAgKiBSZXR1cm5zIHRoZSBsYXRlc3Qgc3RhYmxlIHZlcnNpb24gYXMgdGhlIGRlZmF1bHRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjMtMDktMDFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciBMb2cgQW5hbHl0aWNzIFdvcmtzcGFjZVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc291cmNlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBMT0dfQU5BTFlUSUNTX1dPUktTUEFDRV9UWVBFO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIEFQSSBzY2hlbWEgZm9yIHRoZSByZXNvbHZlZCB2ZXJzaW9uXG4gICAqIFVzZXMgdGhlIGZyYW1ld29yaydzIHNjaGVtYSByZXNvbHV0aW9uIHRvIGdldCB0aGUgYXBwcm9wcmlhdGUgc2NoZW1hXG4gICAqL1xuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoaXMgcmVzb3VyY2UgdHlwZSByZXF1aXJlcyBhIGxvY2F0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVxdWlyZXNMb2NhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICogVHJhbnNmb3JtcyB0aGUgaW5wdXQgcHJvcGVydGllcyBpbnRvIHRoZSBKU09OIGZvcm1hdCBleHBlY3RlZCBieSBBenVyZSBSRVNUIEFQSVxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgTG9nQW5hbHl0aWNzV29ya3NwYWNlUHJvcHM7XG5cbiAgICBjb25zdCBib2R5OiBhbnkgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHJldGVudGlvbkluRGF5czogdHlwZWRQcm9wcy5yZXRlbnRpb25JbkRheXMgPz8gMzAsXG4gICAgICAgIHNrdTogdHlwZWRQcm9wcy5za3UgPz8geyBuYW1lOiBcIlBlckdCMjAxOFwiIH0sXG4gICAgICAgIHB1YmxpY05ldHdvcmtBY2Nlc3NGb3JJbmdlc3Rpb246XG4gICAgICAgICAgdHlwZWRQcm9wcy5wdWJsaWNOZXR3b3JrQWNjZXNzRm9ySW5nZXN0aW9uID8/IFwiRW5hYmxlZFwiLFxuICAgICAgICBwdWJsaWNOZXR3b3JrQWNjZXNzRm9yUXVlcnk6XG4gICAgICAgICAgdHlwZWRQcm9wcy5wdWJsaWNOZXR3b3JrQWNjZXNzRm9yUXVlcnkgPz8gXCJFbmFibGVkXCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBBZGQgb3B0aW9uYWwgcHJvcGVydGllcyBvbmx5IGlmIHNwZWNpZmllZFxuICAgIGlmICh0eXBlZFByb3BzLndvcmtzcGFjZUNhcHBpbmcpIHtcbiAgICAgIGJvZHkucHJvcGVydGllcy53b3Jrc3BhY2VDYXBwaW5nID0gdHlwZWRQcm9wcy53b3Jrc3BhY2VDYXBwaW5nO1xuICAgIH1cblxuICAgIGlmICh0eXBlZFByb3BzLmZlYXR1cmVzKSB7XG4gICAgICBib2R5LnByb3BlcnRpZXMuZmVhdHVyZXMgPSB0eXBlZFByb3BzLmZlYXR1cmVzO1xuICAgIH1cblxuICAgIGlmICh0eXBlZFByb3BzLmZvcmNlQ21rRm9yUXVlcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5wcm9wZXJ0aWVzLmZvcmNlQ21rRm9yUXVlcnkgPSB0eXBlZFByb3BzLmZvcmNlQ21rRm9yUXVlcnk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVkUHJvcHMuZGVmYXVsdERhdGFDb2xsZWN0aW9uUnVsZVJlc291cmNlSWQpIHtcbiAgICAgIGJvZHkucHJvcGVydGllcy5kZWZhdWx0RGF0YUNvbGxlY3Rpb25SdWxlUmVzb3VyY2VJZCA9XG4gICAgICAgIHR5cGVkUHJvcHMuZGVmYXVsdERhdGFDb2xsZWN0aW9uUnVsZVJlc291cmNlSWQ7XG4gICAgfVxuXG4gICAgLy8gQWRkIGlkZW50aXR5IGF0IHRoZSB0b3AgbGV2ZWwgaWYgc3BlY2lmaWVkXG4gICAgaWYgKHR5cGVkUHJvcHMuaWRlbnRpdHkpIHtcbiAgICAgIGJvZHkuaWRlbnRpdHkgPSB0eXBlZFByb3BzLmlkZW50aXR5O1xuICAgIH1cblxuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBwYXJlbnQgcmVzb3VyY2UgSUQgZm9yIExvZyBBbmFseXRpY3MgV29ya3NwYWNlXG4gICAqIExvZyBBbmFseXRpY3MgV29ya3NwYWNlIGlzIGEgdG9wLWxldmVsIHJlc291cmNlIHdpdGhpbiBhIHJlc291cmNlIGdyb3VwXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSByZXNvdXJjZSBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFRoZSBwYXJlbnQgcmVzb3VyY2UgSUQgKHRoZSByZXNvdXJjZSBncm91cClcbiAgICovXG4gIHByb3RlY3RlZCByZXNvbHZlUGFyZW50SWQocHJvcHM6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChwcm9wcyBhcyBMb2dBbmFseXRpY3NXb3Jrc3BhY2VQcm9wcykucmVzb3VyY2VHcm91cElkO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration test for Azure Log Analytics Workspace
|
|
3
|
+
*
|
|
4
|
+
* This test demonstrates basic usage of the LogAnalyticsWorkspace construct
|
|
5
|
+
* and validates deployment, idempotency, and cleanup.
|
|
6
|
+
*
|
|
7
|
+
* Run with: npm run integration:nostream
|
|
8
|
+
*/
|
|
9
|
+
import "cdktf/lib/testing/adapters/jest";
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Integration test for Azure Log Analytics Workspace
|
|
4
|
+
*
|
|
5
|
+
* This test demonstrates basic usage of the LogAnalyticsWorkspace construct
|
|
6
|
+
* and validates deployment, idempotency, and cleanup.
|
|
7
|
+
*
|
|
8
|
+
* Run with: npm run integration:nostream
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
const cdktf_1 = require("cdktf");
|
|
12
|
+
require("cdktf/lib/testing/adapters/jest");
|
|
13
|
+
const azure_resourcegroup_1 = require("../../azure-resourcegroup");
|
|
14
|
+
const provider_1 = require("../../core-azure/lib/azapi/providers-azapi/provider");
|
|
15
|
+
const testing_1 = require("../../testing");
|
|
16
|
+
const log_analytics_workspace_1 = require("../lib/log-analytics-workspace");
|
|
17
|
+
/**
|
|
18
|
+
* Example stack demonstrating Log Analytics Workspace usage
|
|
19
|
+
*/
|
|
20
|
+
class LogAnalyticsWorkspaceExampleStack extends cdktf_1.TerraformStack {
|
|
21
|
+
constructor(scope, id) {
|
|
22
|
+
super(scope, id);
|
|
23
|
+
// Configure AZAPI provider
|
|
24
|
+
new provider_1.AzapiProvider(this, "azapi", {});
|
|
25
|
+
// Create a resource group
|
|
26
|
+
const resourceGroup = new azure_resourcegroup_1.ResourceGroup(this, "example-rg", {
|
|
27
|
+
name: "law-example-rg",
|
|
28
|
+
location: "eastus",
|
|
29
|
+
tags: {
|
|
30
|
+
environment: "example",
|
|
31
|
+
purpose: "integration-test",
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
// Example 1: Basic Log Analytics Workspace
|
|
35
|
+
new log_analytics_workspace_1.LogAnalyticsWorkspace(this, "basic-workspace", {
|
|
36
|
+
name: "law-basic-example",
|
|
37
|
+
location: resourceGroup.props.location,
|
|
38
|
+
resourceGroupId: resourceGroup.id,
|
|
39
|
+
tags: {
|
|
40
|
+
example: "basic",
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
// Example 2: Log Analytics Workspace with specific version
|
|
44
|
+
new log_analytics_workspace_1.LogAnalyticsWorkspace(this, "versioned-workspace", {
|
|
45
|
+
name: "law-versioned-example",
|
|
46
|
+
location: resourceGroup.props.location,
|
|
47
|
+
resourceGroupId: resourceGroup.id,
|
|
48
|
+
retentionInDays: 60,
|
|
49
|
+
sku: {
|
|
50
|
+
name: "PerGB2018",
|
|
51
|
+
},
|
|
52
|
+
apiVersion: "2023-09-01",
|
|
53
|
+
tags: {
|
|
54
|
+
example: "versioned",
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
describe("Log Analytics Workspace Integration Test", () => {
|
|
60
|
+
it("should deploy, validate idempotency, and cleanup Log Analytics Workspace resources", () => {
|
|
61
|
+
const app = cdktf_1.Testing.app();
|
|
62
|
+
const stack = new LogAnalyticsWorkspaceExampleStack(app, "test-log-analytics-workspace");
|
|
63
|
+
const synthesized = cdktf_1.Testing.fullSynth(stack);
|
|
64
|
+
// This will:
|
|
65
|
+
// 1. Run terraform apply to deploy resources
|
|
66
|
+
// 2. Run terraform plan to check idempotency (no changes expected)
|
|
67
|
+
// 3. Run terraform destroy to cleanup resources
|
|
68
|
+
(0, testing_1.TerraformApplyCheckAndDestroy)(synthesized);
|
|
69
|
+
}, 600000); // 10 minute timeout for deployment and cleanup
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWFuYWx5dGljcy13b3Jrc3BhY2UuaW50ZWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtbG9nYW5hbHl0aWNzd29ya3NwYWNlL3Rlc3QvbG9nLWFuYWx5dGljcy13b3Jrc3BhY2UuaW50ZWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7O0FBRUgsaUNBQWdEO0FBRWhELDJDQUF5QztBQUN6QyxtRUFBMEQ7QUFDMUQsa0ZBQW9GO0FBQ3BGLDJDQUE4RDtBQUM5RCw0RUFBdUU7QUFFdkU7O0dBRUc7QUFDSCxNQUFNLGlDQUFrQyxTQUFRLHNCQUFjO0lBQzVELFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsMkJBQTJCO1FBQzNCLElBQUksd0JBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXJDLDBCQUEwQjtRQUMxQixNQUFNLGFBQWEsR0FBRyxJQUFJLG1DQUFhLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUMxRCxJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLElBQUksRUFBRTtnQkFDSixXQUFXLEVBQUUsU0FBUztnQkFDdEIsT0FBTyxFQUFFLGtCQUFrQjthQUM1QjtTQUNGLENBQUMsQ0FBQztRQUVILDJDQUEyQztRQUMzQyxJQUFJLCtDQUFxQixDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRTtZQUNqRCxJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLFFBQVEsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVM7WUFDdkMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxFQUFFO1lBQ2pDLElBQUksRUFBRTtnQkFDSixPQUFPLEVBQUUsT0FBTzthQUNqQjtTQUNGLENBQUMsQ0FBQztRQUVILDJEQUEyRDtRQUMzRCxJQUFJLCtDQUFxQixDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUNyRCxJQUFJLEVBQUUsdUJBQXVCO1lBQzdCLFFBQVEsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVM7WUFDdkMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxFQUFFO1lBQ2pDLGVBQWUsRUFBRSxFQUFFO1lBQ25CLEdBQUcsRUFBRTtnQkFDSCxJQUFJLEVBQUUsV0FBVzthQUNsQjtZQUNELFVBQVUsRUFBRSxZQUFZO1lBQ3hCLElBQUksRUFBRTtnQkFDSixPQUFPLEVBQUUsV0FBVzthQUNyQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVELFFBQVEsQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7SUFDeEQsRUFBRSxDQUFDLG9GQUFvRixFQUFFLEdBQUcsRUFBRTtRQUM1RixNQUFNLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxpQ0FBaUMsQ0FDakQsR0FBRyxFQUNILDhCQUE4QixDQUMvQixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsZUFBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QyxhQUFhO1FBQ2IsNkNBQTZDO1FBQzdDLG1FQUFtRTtRQUNuRSxnREFBZ0Q7UUFDaEQsSUFBQSx1Q0FBNkIsRUFBQyxXQUFXLENBQUMsQ0FBQztJQUM3QyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQywrQ0FBK0M7QUFDN0QsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVncmF0aW9uIHRlc3QgZm9yIEF6dXJlIExvZyBBbmFseXRpY3MgV29ya3NwYWNlXG4gKlxuICogVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyBiYXNpYyB1c2FnZSBvZiB0aGUgTG9nQW5hbHl0aWNzV29ya3NwYWNlIGNvbnN0cnVjdFxuICogYW5kIHZhbGlkYXRlcyBkZXBsb3ltZW50LCBpZGVtcG90ZW5jeSwgYW5kIGNsZWFudXAuXG4gKlxuICogUnVuIHdpdGg6IG5wbSBydW4gaW50ZWdyYXRpb246bm9zdHJlYW1cbiAqL1xuXG5pbXBvcnQgeyBUZXN0aW5nLCBUZXJyYWZvcm1TdGFjayB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCBcImNka3RmL2xpYi90ZXN0aW5nL2FkYXB0ZXJzL2plc3RcIjtcbmltcG9ydCB7IFJlc291cmNlR3JvdXAgfSBmcm9tIFwiLi4vLi4vYXp1cmUtcmVzb3VyY2Vncm91cFwiO1xuaW1wb3J0IHsgQXphcGlQcm92aWRlciB9IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi9hemFwaS9wcm92aWRlcnMtYXphcGkvcHJvdmlkZXJcIjtcbmltcG9ydCB7IFRlcnJhZm9ybUFwcGx5Q2hlY2tBbmREZXN0cm95IH0gZnJvbSBcIi4uLy4uL3Rlc3RpbmdcIjtcbmltcG9ydCB7IExvZ0FuYWx5dGljc1dvcmtzcGFjZSB9IGZyb20gXCIuLi9saWIvbG9nLWFuYWx5dGljcy13b3Jrc3BhY2VcIjtcblxuLyoqXG4gKiBFeGFtcGxlIHN0YWNrIGRlbW9uc3RyYXRpbmcgTG9nIEFuYWx5dGljcyBXb3Jrc3BhY2UgdXNhZ2VcbiAqL1xuY2xhc3MgTG9nQW5hbHl0aWNzV29ya3NwYWNlRXhhbXBsZVN0YWNrIGV4dGVuZHMgVGVycmFmb3JtU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIENvbmZpZ3VyZSBBWkFQSSBwcm92aWRlclxuICAgIG5ldyBBemFwaVByb3ZpZGVyKHRoaXMsIFwiYXphcGlcIiwge30pO1xuXG4gICAgLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZ3JvdXBcbiAgICBjb25zdCByZXNvdXJjZUdyb3VwID0gbmV3IFJlc291cmNlR3JvdXAodGhpcywgXCJleGFtcGxlLXJnXCIsIHtcbiAgICAgIG5hbWU6IFwibGF3LWV4YW1wbGUtcmdcIixcbiAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgdGFnczoge1xuICAgICAgICBlbnZpcm9ubWVudDogXCJleGFtcGxlXCIsXG4gICAgICAgIHB1cnBvc2U6IFwiaW50ZWdyYXRpb24tdGVzdFwiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEV4YW1wbGUgMTogQmFzaWMgTG9nIEFuYWx5dGljcyBXb3Jrc3BhY2VcbiAgICBuZXcgTG9nQW5hbHl0aWNzV29ya3NwYWNlKHRoaXMsIFwiYmFzaWMtd29ya3NwYWNlXCIsIHtcbiAgICAgIG5hbWU6IFwibGF3LWJhc2ljLWV4YW1wbGVcIixcbiAgICAgIGxvY2F0aW9uOiByZXNvdXJjZUdyb3VwLnByb3BzLmxvY2F0aW9uISxcbiAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgZXhhbXBsZTogXCJiYXNpY1wiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEV4YW1wbGUgMjogTG9nIEFuYWx5dGljcyBXb3Jrc3BhY2Ugd2l0aCBzcGVjaWZpYyB2ZXJzaW9uXG4gICAgbmV3IExvZ0FuYWx5dGljc1dvcmtzcGFjZSh0aGlzLCBcInZlcnNpb25lZC13b3Jrc3BhY2VcIiwge1xuICAgICAgbmFtZTogXCJsYXctdmVyc2lvbmVkLWV4YW1wbGVcIixcbiAgICAgIGxvY2F0aW9uOiByZXNvdXJjZUdyb3VwLnByb3BzLmxvY2F0aW9uISxcbiAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgIHJldGVudGlvbkluRGF5czogNjAsXG4gICAgICBza3U6IHtcbiAgICAgICAgbmFtZTogXCJQZXJHQjIwMThcIixcbiAgICAgIH0sXG4gICAgICBhcGlWZXJzaW9uOiBcIjIwMjMtMDktMDFcIixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgZXhhbXBsZTogXCJ2ZXJzaW9uZWRcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZGVzY3JpYmUoXCJMb2cgQW5hbHl0aWNzIFdvcmtzcGFjZSBJbnRlZ3JhdGlvbiBUZXN0XCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgZGVwbG95LCB2YWxpZGF0ZSBpZGVtcG90ZW5jeSwgYW5kIGNsZWFudXAgTG9nIEFuYWx5dGljcyBXb3Jrc3BhY2UgcmVzb3VyY2VzXCIsICgpID0+IHtcbiAgICBjb25zdCBhcHAgPSBUZXN0aW5nLmFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IExvZ0FuYWx5dGljc1dvcmtzcGFjZUV4YW1wbGVTdGFjayhcbiAgICAgIGFwcCxcbiAgICAgIFwidGVzdC1sb2ctYW5hbHl0aWNzLXdvcmtzcGFjZVwiLFxuICAgICk7XG4gICAgY29uc3Qgc3ludGhlc2l6ZWQgPSBUZXN0aW5nLmZ1bGxTeW50aChzdGFjayk7XG5cbiAgICAvLyBUaGlzIHdpbGw6XG4gICAgLy8gMS4gUnVuIHRlcnJhZm9ybSBhcHBseSB0byBkZXBsb3kgcmVzb3VyY2VzXG4gICAgLy8gMi4gUnVuIHRlcnJhZm9ybSBwbGFuIHRvIGNoZWNrIGlkZW1wb3RlbmN5IChubyBjaGFuZ2VzIGV4cGVjdGVkKVxuICAgIC8vIDMuIFJ1biB0ZXJyYWZvcm0gZGVzdHJveSB0byBjbGVhbnVwIHJlc291cmNlc1xuICAgIFRlcnJhZm9ybUFwcGx5Q2hlY2tBbmREZXN0cm95KHN5bnRoZXNpemVkKTtcbiAgfSwgNjAwMDAwKTsgLy8gMTAgbWludXRlIHRpbWVvdXQgZm9yIGRlcGxveW1lbnQgYW5kIGNsZWFudXBcbn0pO1xuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive tests for the LogAnalyticsWorkspace implementation
|
|
3
|
+
*
|
|
4
|
+
* This test suite validates the LogAnalyticsWorkspace class using the AzapiResource framework.
|
|
5
|
+
* Tests cover automatic version resolution, explicit version pinning, schema validation,
|
|
6
|
+
* property configurations, and resource creation.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|