@microsoft/terraform-cdk-constructs 0.0.3-pre.10 → 0.0.3-pre.12
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 +858 -681
- package/API.md +499 -405
- package/README.md +4 -5
- package/docs/testing.md +39 -137
- package/lib/azure-actiongroup/lib/actiongroup.d.ts +1 -1
- package/lib/azure-actiongroup/lib/actiongroup.js +4 -4
- package/lib/azure-actiongroup/model/action-group-props.d.ts +3 -2
- package/lib/azure-actiongroup/model/action-group-props.js +1 -1
- package/lib/azure-actiongroup/test/AzureActionGroup.integ.js +66 -0
- package/lib/azure-actiongroup/test/AzureActionGroup.spec.js +5 -33
- package/lib/azure-applicationgateway/lib/gateway.d.ts +5 -3
- package/lib/azure-applicationgateway/lib/gateway.js +14 -7
- package/lib/azure-applicationgateway/test/AzureApplicationGateway.integ.d.ts +1 -0
- package/lib/azure-applicationgateway/test/AzureApplicationGateway.integ.js +272 -0
- package/lib/azure-applicationgateway/test/AzureApplicationGateway.spec.js +3 -35
- package/lib/azure-applicationinsights/lib/appinsights.d.ts +4 -3
- package/lib/azure-applicationinsights/lib/appinsights.js +6 -6
- package/lib/azure-applicationinsights/test/AzureAppInsights.integ.d.ts +1 -0
- package/lib/azure-applicationinsights/test/AzureAppInsights.integ.js +101 -0
- package/lib/azure-applicationinsights/test/AzureAppInsights.spec.js +4 -27
- package/lib/azure-containerregistry/lib/registry.d.ts +4 -3
- package/lib/azure-containerregistry/lib/registry.js +5 -5
- package/lib/azure-containerregistry/test/AzureContainerRegistry.integ.d.ts +1 -0
- package/lib/azure-containerregistry/test/AzureContainerRegistry.integ.js +68 -0
- package/lib/azure-containerregistry/test/AzureContainerRegistry.spec.js +4 -23
- package/lib/azure-datalake/lib/datalake.d.ts +1 -0
- package/lib/azure-datalake/lib/datalake.js +2 -1
- package/lib/azure-datalake/test/AzureDatalake.spec.d.ts +1 -0
- package/lib/azure-datalake/test/AzureDatalake.spec.js +32 -0
- package/lib/azure-datalake/test/AzureStorageAccount.integ.d.ts +1 -0
- package/lib/azure-datalake/test/AzureStorageAccount.integ.js +60 -0
- package/lib/azure-eventhub/lib/authorization.js +1 -1
- package/lib/azure-eventhub/lib/consumer.js +1 -1
- package/lib/azure-eventhub/lib/{cluster.d.ts → eventhubcluster.d.ts} +11 -7
- package/lib/azure-eventhub/lib/eventhubcluster.js +64 -0
- package/lib/azure-eventhub/lib/index.d.ts +1 -1
- package/lib/azure-eventhub/lib/index.js +2 -2
- package/lib/azure-eventhub/lib/instance.d.ts +1 -0
- package/lib/azure-eventhub/lib/instance.js +5 -4
- package/lib/azure-eventhub/lib/kusto-connection.js +1 -1
- package/lib/azure-eventhub/lib/namespace.d.ts +7 -6
- package/lib/azure-eventhub/lib/namespace.js +24 -26
- package/lib/azure-eventhub/test/AzureEventhub.integ.d.ts +1 -0
- package/lib/azure-eventhub/test/AzureEventhub.integ.js +72 -0
- package/lib/azure-eventhub/test/AzureEventhub.spec.js +4 -27
- package/lib/azure-functionapp/lib/functionapplinux.js +1 -1
- package/lib/azure-functionapp/test/AzureLinuxFunctionApp.integ.d.ts +1 -0
- package/lib/azure-functionapp/test/AzureLinuxFunctionApp.integ.js +117 -0
- package/lib/azure-functionapp/test/AzureLinuxFunctionApp.spec.js +4 -21
- package/lib/azure-keyvault/lib/certificate.js +2 -2
- package/lib/azure-keyvault/lib/key.js +1 -1
- package/lib/azure-keyvault/lib/policy.js +1 -1
- package/lib/azure-keyvault/lib/secret.js +1 -1
- package/lib/azure-keyvault/lib/vault.d.ts +3 -2
- package/lib/azure-keyvault/lib/vault.js +4 -4
- package/lib/azure-keyvault/test/AzureKeyVault.integ.d.ts +1 -0
- package/lib/azure-keyvault/test/AzureKeyVault.integ.js +119 -0
- package/lib/azure-keyvault/test/AzureKeyVault.spec.js +4 -35
- package/lib/azure-kubernetes/lib/cluster.js +1 -1
- package/lib/azure-kubernetes/test/AzureKubernetesCluster.integ.d.ts +1 -0
- package/lib/azure-kubernetes/test/AzureKubernetesCluster.integ.js +75 -0
- package/lib/azure-kubernetes/test/AzureKubernetesCluster.spec.js +4 -21
- package/lib/azure-kusto/lib/cluster.d.ts +9 -5
- package/lib/azure-kusto/lib/cluster.js +66 -42
- package/lib/azure-kusto/lib/compute-specification.js +1 -1
- package/lib/azure-kusto/lib/database.d.ts +7 -8
- package/lib/azure-kusto/lib/database.js +23 -25
- package/lib/azure-kusto/test/AzureKusto.integ.d.ts +1 -0
- package/lib/azure-kusto/test/AzureKusto.integ.js +74 -0
- package/lib/azure-kusto/test/AzureKusto.spec.js +3 -22
- package/lib/azure-loganalytics/lib/workspace.d.ts +6 -3
- package/lib/azure-loganalytics/lib/workspace.js +7 -6
- package/lib/azure-loganalytics/test/AzureLogAnalytics.integ.d.ts +1 -0
- package/lib/azure-loganalytics/test/AzureLogAnalytics.integ.js +117 -0
- package/lib/azure-loganalytics/test/AzureLogAnalytics.spec.js +4 -23
- package/lib/azure-metricalert/lib/metric-alert.js +1 -1
- package/lib/azure-metricalert/test/AzureMetricAlert.integ.d.ts +1 -0
- package/lib/azure-metricalert/test/AzureMetricAlert.integ.js +85 -0
- package/lib/azure-metricalert/test/AzureMetricAlert.spec.js +4 -21
- package/lib/azure-networksecuritygroup/lib/preconfigured-rules.js +1 -1
- package/lib/azure-networksecuritygroup/lib/securitygroup.d.ts +4 -3
- package/lib/azure-networksecuritygroup/lib/securitygroup.js +7 -7
- package/lib/azure-networksecuritygroup/test/AzureNetworkSecurityGroup.integ.d.ts +1 -0
- package/lib/azure-networksecuritygroup/test/AzureNetworkSecurityGroup.integ.js +85 -0
- package/lib/azure-networksecuritygroup/test/AzureNetworkSecurityGroup.spec.js +4 -23
- package/lib/azure-queryrulealert/lib/query-rule-alert.js +1 -1
- package/lib/azure-queryrulealert/test/AzureQueryRuleAlert.integ.d.ts +1 -0
- package/lib/azure-queryrulealert/test/AzureQueryRuleAlert.integ.js +63 -0
- package/lib/azure-queryrulealert/test/AzureQueryRuleAlert.spec.js +4 -21
- package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
- package/lib/azure-resourcegroup/test/AzureResourceGroup.integ.d.ts +1 -0
- package/lib/azure-resourcegroup/test/AzureResourceGroup.integ.js +41 -0
- package/lib/azure-resourcegroup/test/AzureResourceGroup.spec.js +4 -17
- package/lib/azure-storageaccount/lib/account.d.ts +5 -0
- package/lib/azure-storageaccount/lib/account.js +3 -2
- package/lib/azure-storageaccount/lib/container.js +2 -2
- package/lib/azure-storageaccount/lib/fileshare.js +2 -2
- package/lib/azure-storageaccount/lib/queue.js +1 -1
- package/lib/azure-storageaccount/lib/table.js +1 -1
- package/lib/azure-storageaccount/test/AzureStorageAccount.integ.d.ts +1 -0
- package/lib/azure-storageaccount/test/AzureStorageAccount.integ.js +84 -0
- package/lib/azure-storageaccount/test/AzureStorageAccount.spec.js +4 -17
- package/lib/azure-virtualmachine/lib/image-references.js +2 -2
- package/lib/azure-virtualmachine/lib/vm.d.ts +29 -6
- package/lib/azure-virtualmachine/lib/vm.js +17 -15
- package/lib/azure-virtualmachine/test/AzureLinuxVirtualMachine.integ.d.ts +1 -0
- package/lib/azure-virtualmachine/test/AzureLinuxVirtualMachine.integ.js +109 -0
- package/lib/azure-virtualmachine/test/AzureLinuxVirtualMachine.spec.js +5 -25
- package/lib/azure-virtualmachine/test/AzureWindowsVirtualMachine.integ.d.ts +1 -0
- package/lib/azure-virtualmachine/test/AzureWindowsVirtualMachine.integ.js +105 -0
- package/lib/azure-virtualmachine/test/AzureWindowsVirtualMachine.spec.js +4 -23
- package/lib/azure-virtualmachinescaleset/lib/cluster.d.ts +28 -6
- package/lib/azure-virtualmachinescaleset/lib/cluster.js +13 -11
- package/lib/azure-virtualmachinescaleset/test/AzureLinuxVirtualMachineScaleSet.integ.d.ts +1 -0
- package/lib/azure-virtualmachinescaleset/test/AzureLinuxVirtualMachineScaleSet.integ.js +113 -0
- package/lib/azure-virtualmachinescaleset/test/AzureLinuxVirtualMachineScaleSet.spec.js +5 -25
- package/lib/azure-virtualmachinescaleset/test/AzureWindowsVirtualMachineScaleSet.integ.d.ts +1 -0
- package/lib/azure-virtualmachinescaleset/test/AzureWindowsVirtualMachineScaleSet.integ.js +109 -0
- package/lib/azure-virtualmachinescaleset/test/AzureWindowsVirtualMachineScaleSet.spec.js +4 -23
- package/lib/azure-virtualnetwork/lib/network.d.ts +4 -3
- package/lib/azure-virtualnetwork/lib/network.js +7 -6
- package/lib/azure-virtualnetwork/lib/peering.js +1 -1
- package/lib/azure-virtualnetwork/test/AzureVirtualNetwork.integ.d.ts +1 -0
- package/lib/azure-virtualnetwork/test/AzureVirtualNetwork.integ.js +92 -0
- package/lib/azure-virtualnetwork/test/AzureVirtualNetwork.spec.js +5 -25
- package/lib/core-azure/lib/diagsettings.d.ts +3 -2
- package/lib/core-azure/lib/diagsettings.js +15 -21
- package/lib/core-azure/lib/rbac.js +1 -1
- package/lib/core-azure/lib/resource.js +6 -4
- package/lib/core-azure/test/AzureResource.integ.d.ts +1 -0
- package/lib/core-azure/test/AzureResource.integ.js +75 -0
- package/lib/testing/index.d.ts +34 -0
- package/lib/testing/index.js +235 -2
- package/package.json +32 -11
- package/cdktf.out/manifest.json +0 -13
- package/cdktf.out/stacks/testAzureActionGroup/cdk.tf.json +0 -111
- package/cdktf.out/stacks/testAzureApplicationGateway/cdk.tf.json +0 -588
- package/cdktf.out/stacks/testAzureApplicationInsights/cdk.tf.json +0 -245
- package/cdktf.out/stacks/testAzureContainerRegistry/cdk.tf.json +0 -179
- package/cdktf.out/stacks/testAzureEventhub/cdk.tf.json +0 -236
- package/cdktf.out/stacks/testAzureKeyVault/cdk.tf.json +0 -436
- package/cdktf.out/stacks/testAzureKubernetesCluster/cdk.tf.json +0 -152
- package/cdktf.out/stacks/testAzureKusto/cdk.tf.json +0 -209
- package/cdktf.out/stacks/testAzureLinuxFunctionApp/cdk.tf.json +0 -439
- package/cdktf.out/stacks/testAzureLinuxVirtualMachineExample/cdk.tf.json +0 -283
- package/cdktf.out/stacks/testAzureLinuxVirtualMachineScaleSetExample/cdk.tf.json +0 -261
- package/cdktf.out/stacks/testAzureLogAnalytics/cdk.tf.json +0 -309
- package/cdktf.out/stacks/testAzureMetricAlert/cdk.tf.json +0 -161
- package/cdktf.out/stacks/testAzureNetworkSecurityGroup/cdk.tf.json +0 -271
- package/cdktf.out/stacks/testAzureQueryRuleAlert/cdk.tf.json +0 -122
- package/cdktf.out/stacks/testAzureResourceGroup/cdk.tf.json +0 -88
- package/cdktf.out/stacks/testAzureStorageAccount/cdk.tf.json +0 -339
- package/cdktf.out/stacks/testAzureVirtualNetwork/cdk.tf.json +0 -264
- package/cdktf.out/stacks/testAzureWindowVirtualMachineScaleSetExample/cdk.tf.json +0 -261
- package/cdktf.out/stacks/testAzureWindowsVirtualMachineExample/cdk.tf.json +0 -280
- package/cdktf.out/stacks/testExampleAzureResource/cdk.tf.json +0 -167
- package/lib/azure-actiongroup/test/ExampleAzureActionGroup.d.ts +0 -5
- package/lib/azure-actiongroup/test/ExampleAzureActionGroup.js +0 -66
- package/lib/azure-applicationgateway/test/ExampleAzureApplicationGateway.d.ts +0 -5
- package/lib/azure-applicationgateway/test/ExampleAzureApplicationGateway.js +0 -267
- package/lib/azure-applicationinsights/test/ExampleAzureApplicationInsights.d.ts +0 -5
- package/lib/azure-applicationinsights/test/ExampleAzureApplicationInsights.js +0 -87
- package/lib/azure-containerregistry/test/ExampleAzureContainerRegistry.d.ts +0 -5
- package/lib/azure-containerregistry/test/ExampleAzureContainerRegistry.js +0 -57
- package/lib/azure-eventhub/lib/cluster.js +0 -64
- package/lib/azure-eventhub/test/ExampleAzureEventhub.d.ts +0 -5
- package/lib/azure-eventhub/test/ExampleAzureEventhub.js +0 -72
- package/lib/azure-functionapp/test/ExampleAzureLinuxFunctionApp.d.ts +0 -5
- package/lib/azure-functionapp/test/ExampleAzureLinuxFunctionApp.js +0 -123
- package/lib/azure-keyvault/test/ExampleAzureKeyVault.d.ts +0 -5
- package/lib/azure-keyvault/test/ExampleAzureKeyVault.js +0 -112
- package/lib/azure-kubernetes/test/ExampleAzureKubernetesCluster.d.ts +0 -5
- package/lib/azure-kubernetes/test/ExampleAzureKubernetesCluster.js +0 -65
- package/lib/azure-kusto/test/ExampleAzureKusto.d.ts +0 -5
- package/lib/azure-kusto/test/ExampleAzureKusto.js +0 -71
- package/lib/azure-loganalytics/test/ExampleAzureLogAnalytics.d.ts +0 -5
- package/lib/azure-loganalytics/test/ExampleAzureLogAnalytics.js +0 -115
- package/lib/azure-metricalert/test/ExampleAzureMetricAlert.d.ts +0 -5
- package/lib/azure-metricalert/test/ExampleAzureMetricAlert.js +0 -81
- package/lib/azure-networksecuritygroup/test/ExampleAzureNetworkSecurityGroup.d.ts +0 -5
- package/lib/azure-networksecuritygroup/test/ExampleAzureNetworkSecurityGroup.js +0 -97
- package/lib/azure-queryrulealert/test/ExampleAzureQueryRuleAlert.d.ts +0 -5
- package/lib/azure-queryrulealert/test/ExampleAzureQueryRuleAlert.js +0 -67
- package/lib/azure-resourcegroup/test/ExampleAzureResourceGroup.d.ts +0 -5
- package/lib/azure-resourcegroup/test/ExampleAzureResourceGroup.js +0 -29
- package/lib/azure-storageaccount/test/ExampleAzureStorageAccount.d.ts +0 -5
- package/lib/azure-storageaccount/test/ExampleAzureStorageAccount.js +0 -102
- package/lib/azure-virtualmachine/test/ExampleAzureLinuxVirtualMachine.d.ts +0 -5
- package/lib/azure-virtualmachine/test/ExampleAzureLinuxVirtualMachine.js +0 -106
- package/lib/azure-virtualmachine/test/ExampleAzureWindowsVirtualMachine.d.ts +0 -5
- package/lib/azure-virtualmachine/test/ExampleAzureWindowsVirtualMachine.js +0 -102
- package/lib/azure-virtualmachinescaleset/test/ExampleAzureLinuxVirtualMachineScaleSet.d.ts +0 -5
- package/lib/azure-virtualmachinescaleset/test/ExampleAzureLinuxVirtualMachineScaleSet.js +0 -107
- package/lib/azure-virtualmachinescaleset/test/ExampleAzureWindowsVirtualMachineScaleSet.d.ts +0 -5
- package/lib/azure-virtualmachinescaleset/test/ExampleAzureWindowsVirtualMachineScaleSet.js +0 -103
- package/lib/azure-virtualnetwork/test/ExampleAzureVirtualNetwork.d.ts +0 -5
- package/lib/azure-virtualnetwork/test/ExampleAzureVirtualNetwork.js +0 -88
- package/lib/core-azure/test/AzureResource.spec.js +0 -19
- package/lib/core-azure/test/ExampleAzureResource.d.ts +0 -5
- package/lib/core-azure/test/ExampleAzureResource.js +0 -67
- package/tfsec.json +0 -4
- /package/lib/{core-azure/test/AzureResource.spec.d.ts → azure-actiongroup/test/AzureActionGroup.integ.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ With L2 Constructs, you get the following benefits:
|
|
|
8
8
|
- **Abstraction**: Higher-level abstractions over Azure resources make your infrastructure code more declarative and easier to understand.
|
|
9
9
|
- **Reusability**: Encapsulate common patterns and best practices in your infrastructure code, promoting reusability across different projects and teams.
|
|
10
10
|
- **Rapid Development**: Accelerate your cloud development process with pre-built constructs that have been tested for common use cases, allowing you to focus on your unique application logic.
|
|
11
|
-
- **Direct IDE Integration**: Access detailed documentation directly within your Integrated Development Environment (IDE), streamlining your development workflow: , streamlining your development workflow: 
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
## Quick Example
|
|
@@ -112,11 +112,10 @@ Currently, our CDK L2 constructs are available in the following languages:
|
|
|
112
112
|
|
|
113
113
|
| Language | Status |
|
|
114
114
|
|------------|--------------|
|
|
115
|
-
| TypeScript | Available |
|
|
116
|
-
| Python |
|
|
115
|
+
| TypeScript | [Available](https://www.npmjs.com/package/@microsoft/terraform-cdk-constructs) |
|
|
116
|
+
| Python | [Available](https://pypi.org/project/microsoft-cdktfconstructs/) |
|
|
117
117
|
| Java | Coming soon |
|
|
118
|
-
|
|
|
119
|
-
| C# | Coming soon |
|
|
118
|
+
| C# | [Available](https://www.nuget.org/packages/Microsoft.Cdktf.Azure.TFConstructs) |
|
|
120
119
|
|
|
121
120
|
Stay tuned for updates as we work to expand support to other popular programming languages!
|
|
122
121
|
|
package/docs/testing.md
CHANGED
|
@@ -18,6 +18,29 @@ The purpose of this document is to provide guidelines for writing tests in the C
|
|
|
18
18
|
- [Randomizing Globally Unique Resource Names](#randomizing-globally-unique-resource-names)
|
|
19
19
|
- [End to End Tests](#end-to-end-tests-1)
|
|
20
20
|
|
|
21
|
+
# How to run tests
|
|
22
|
+
|
|
23
|
+
### How to run any single test:
|
|
24
|
+
1. Must be logged in with Az Login
|
|
25
|
+
2. Run the following command:
|
|
26
|
+
```
|
|
27
|
+
jest ./pathtotestfile/filename.ts
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### How to run all unit tests at same time:
|
|
31
|
+
1. Must be logged in with Az Login
|
|
32
|
+
2. Run the following command:
|
|
33
|
+
```
|
|
34
|
+
npx projen test
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### How to run all integration tests at same time:
|
|
38
|
+
1. Must be logged in with Az Login
|
|
39
|
+
2. Run the following command:
|
|
40
|
+
```
|
|
41
|
+
npm run integration:nostream
|
|
42
|
+
```
|
|
43
|
+
|
|
21
44
|
|
|
22
45
|
## Writing Tests
|
|
23
46
|
|
|
@@ -67,6 +90,7 @@ The tests will use AZ CLI for authentication. Make sure to set the Azure subscri
|
|
|
67
90
|
az account set -s MySubscription
|
|
68
91
|
```
|
|
69
92
|
|
|
93
|
+
|
|
70
94
|
## How to Write Unit Tests
|
|
71
95
|
Unit tests are written in Typescript using Jest. They consist of a `spec` test file within the module folder under the `test` folder:
|
|
72
96
|
|
|
@@ -83,13 +107,13 @@ Below is a spec test for the resource group construct:
|
|
|
83
107
|
|
|
84
108
|
```
|
|
85
109
|
# index.ts
|
|
86
|
-
import {
|
|
87
|
-
import
|
|
88
|
-
import {
|
|
89
|
-
import
|
|
90
|
-
|
|
110
|
+
import { AzurermProvider } from "@cdktf/provider-azurerm/lib/provider";
|
|
111
|
+
import { Testing, TerraformStack } from "cdktf";
|
|
112
|
+
import { TerraformPlan } from "../../testing";
|
|
113
|
+
import "cdktf/lib/testing/adapters/jest";
|
|
114
|
+
import * as rg from "..";
|
|
91
115
|
|
|
92
|
-
describe(
|
|
116
|
+
describe("Resource Group With Defaults", () => {
|
|
93
117
|
let stack: TerraformStack;
|
|
94
118
|
let fullSynthResult: any;
|
|
95
119
|
|
|
@@ -97,24 +121,22 @@ describe('Resource Group With Defaults', () => {
|
|
|
97
121
|
const app = Testing.app();
|
|
98
122
|
stack = new TerraformStack(app, "test");
|
|
99
123
|
|
|
100
|
-
new AzurermProvider(stack, "azureFeature", {features: {}});
|
|
101
|
-
new
|
|
124
|
+
new AzurermProvider(stack, "azureFeature", { features: {} });
|
|
125
|
+
new rg.Group(stack, "testRG");
|
|
102
126
|
|
|
103
|
-
fullSynthResult = Testing.fullSynth(stack);
|
|
127
|
+
fullSynthResult = Testing.fullSynth(stack);
|
|
104
128
|
});
|
|
105
129
|
|
|
106
130
|
it("renders a Resource Group with defaults and checks snapshot", () => {
|
|
107
|
-
expect(
|
|
108
|
-
Testing.synth(stack)
|
|
109
|
-
).toMatchSnapshot(); // Compare the already prepared stack
|
|
131
|
+
expect(Testing.synth(stack)).toMatchSnapshot();
|
|
110
132
|
});
|
|
111
133
|
|
|
112
134
|
it("check if the produced terraform configuration is valid", () => {
|
|
113
|
-
expect(fullSynthResult).toBeValidTerraform();
|
|
135
|
+
expect(fullSynthResult).toBeValidTerraform();
|
|
114
136
|
});
|
|
115
137
|
|
|
116
138
|
it("check if this can be planned", () => {
|
|
117
|
-
|
|
139
|
+
TerraformPlan(fullSynthResult);
|
|
118
140
|
});
|
|
119
141
|
});
|
|
120
142
|
```
|
|
@@ -199,22 +221,21 @@ npm test src/azure-resourcegroup/test/AzureResourceGroup.spec.ts -- -u
|
|
|
199
221
|
|
|
200
222
|
|
|
201
223
|
## Integration Tests
|
|
202
|
-
Integration tests are written in
|
|
224
|
+
Integration tests are written in typescript and end in `.integ.ts`:
|
|
203
225
|
|
|
204
226
|
|
|
205
227
|
```plaintext
|
|
206
228
|
src
|
|
207
229
|
└── azure-resourcegroup
|
|
208
230
|
├── test
|
|
209
|
-
│
|
|
210
|
-
│ └── ExampleAzureResourceGroup.ts
|
|
231
|
+
│ └── AzureResourceGroup.integ.ts
|
|
211
232
|
│
|
|
212
233
|
└── index.ts
|
|
213
234
|
```
|
|
214
235
|
|
|
215
236
|
The integration test will perform the following against the example file:
|
|
216
237
|
|
|
217
|
-
1. **terraform apply**: The integration test starts by executing a terraform apply
|
|
238
|
+
1. **terraform apply**: The integration test starts by executing a terraform apply.
|
|
218
239
|
2. **terraform plan**: After setup, a terraform plan is run to:
|
|
219
240
|
- Confirm there are no additional changes needed.
|
|
220
241
|
- Ensure the setup is stable and consistent (idempotent).
|
|
@@ -223,125 +244,6 @@ The integration test will perform the following against the example file:
|
|
|
223
244
|
- This step removes the test environment and ensures the infrastructure can be cleanly deleted.
|
|
224
245
|
- It's designed to catch common problems that occur when removing infrastructure, especially those related to resource dependencies.
|
|
225
246
|
|
|
226
|
-
You may also checkout the [Terratest](https://github.com/gruntwork-io/terratest/tree/master/test/azure) library for test examples to use against the Azure resources.
|
|
227
|
-
|
|
228
|
-
### Running the Integration Tests
|
|
229
|
-
|
|
230
|
-
To run integration tests, use the following command in the test directory:
|
|
231
|
-
```
|
|
232
|
-
/workspaces/…/azure-resourcegroup/test$ go test -v .
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
This will kick off the integration test to synthesize the example file into Terraform configuration files within the `.tempstacks` folder in the module directory:
|
|
236
|
-
|
|
237
|
-
```plaintext
|
|
238
|
-
src
|
|
239
|
-
└── azure-resourcegroup
|
|
240
|
-
├── test
|
|
241
|
-
│ ├── .tempstacks
|
|
242
|
-
│ │ └── stacks
|
|
243
|
-
│ │ └── testAzureResourceGroup
|
|
244
|
-
│ │ └── cdk.tf.json
|
|
245
|
-
│ ├── ExampleAzureResourceGroupStack.ts
|
|
246
|
-
│ └── AzureResourceGroup_test.go
|
|
247
|
-
└── index.ts
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
The test will then run `tfcdk deploy *` to deploy all stacks, then it will run any API checks to validate the deployed resource followed by a `tfcdk destroy` to clean up all the resources.
|
|
251
|
-
|
|
252
|
-
After the test runs, the `.tempstacks` directory is automatically deleted.
|
|
253
|
-
|
|
254
|
-
#### Further Troubleshooting of Tests
|
|
255
|
-
|
|
256
|
-
If there is a need to troubleshoot the stacks, you can comment out the `defer` block within the Go test and re-run the test:
|
|
257
|
-
|
|
258
|
-
```
|
|
259
|
-
// Comment this out to stop .tempstacks from being deleted
|
|
260
|
-
defer func() {
|
|
261
|
-
util.CdkTFDestroyAll(t, terraformOptions, example_file)
|
|
262
|
-
os.RemoveAll("./.tempstacks")
|
|
263
|
-
}()
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
### Randomizing Globally Unique Resource Names
|
|
268
|
-
|
|
269
|
-
**Goal**: Ensure each resource has a unique name to prevent conflicts, especially useful in test environments or when deploying multiple instances of the same infrastructure.
|
|
270
|
-
|
|
271
|
-
**Method**: Use a base class in TypeScript to set up a naming pattern, and then use Golang to generate a random name for each test run.
|
|
272
|
-
|
|
273
|
-
**Step 1**: Create a Base Class in TypeScript
|
|
274
|
-
First, you'll need a base class, BaseTestStack, which includes a variable for the resource name. This class sets up a default name, which you can later override with a random value.
|
|
275
|
-
|
|
276
|
-
```typescript
|
|
277
|
-
import {BaseTestStack} from "../../testing";
|
|
278
|
-
|
|
279
|
-
const app = new App();
|
|
280
|
-
|
|
281
|
-
export class exampleAzureResourceGroup extends BaseTestStack {
|
|
282
|
-
constructor(scope: Construct, id: string) {
|
|
283
|
-
super(scope, id);
|
|
284
|
-
|
|
285
|
-
new AzurermProvider(this, "azure", {
|
|
286
|
-
features: {},
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
new AzureResourceGroup(this, 'testRG', {
|
|
290
|
-
name: `rg-${this.name}`,
|
|
291
|
-
location: 'eastus',
|
|
292
|
-
tags: {
|
|
293
|
-
name: 'test',
|
|
294
|
-
Env: "NonProd",
|
|
295
|
-
},
|
|
296
|
-
ignoreChanges: ['tags["Environment"]'],
|
|
297
|
-
|
|
298
|
-
});
|
|
299
|
-
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
```
|
|
304
|
-
**Step 2**: Extend the Base Class for Specific Resources
|
|
305
|
-
When creating specific resources, extend the BaseTestStack class. Use this.name to create a unique name for each resource.
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
```typescript
|
|
309
|
-
import {BaseTestStack} from "../../testing";
|
|
310
|
-
|
|
311
|
-
export class exampleAzureResourceGroup extends BaseTestStack {
|
|
312
|
-
constructor(scope: Construct, id: string) {
|
|
313
|
-
super(scope, id);
|
|
314
|
-
|
|
315
|
-
new AzureResourceGroup(this, 'testRG', {
|
|
316
|
-
name: `rg-${this.name}`, // Unique name for the resource
|
|
317
|
-
// ... other configurations ...
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
**Step 3**: Use Golang to Generate a Random Name During Tests
|
|
324
|
-
In your Golang tests, generate a random string to use as the resource name. This ensures that every test run has a different name for its resources.
|
|
325
|
-
```typescript
|
|
326
|
-
// Randomize System Name
|
|
327
|
-
rndName := strings.ToLower(random.UniqueId())
|
|
328
|
-
|
|
329
|
-
terraformOptions := &terraform.Options{
|
|
330
|
-
TerraformBinary: "cdktf",
|
|
331
|
-
//Terraform Variables
|
|
332
|
-
Vars: map[string]interface{}{
|
|
333
|
-
"name": rndName,
|
|
334
|
-
},
|
|
335
|
-
TerraformDir: "../../../",
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
```
|
|
340
|
-
|
|
341
|
-
When the test kicks off it will perform a `terraform -var=name=<RandomString>` to randomize the names of all the resources.
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
247
|
## End to End Tests
|
|
346
248
|
|
|
347
249
|
End to End tests are used when testing a class that contains multiple stacks. The workflow is the same as with integration tests, however the test will take much longer.
|
|
@@ -15,7 +15,7 @@ export declare class ActionGroup extends AzureResource {
|
|
|
15
15
|
* @param id - The unique identifier for this instance of the Action Group.
|
|
16
16
|
* @param props - Configuration properties for the Action Group. These properties may include:
|
|
17
17
|
* - `name`: The name of the Action Group.
|
|
18
|
-
* - `resourceGroup`:
|
|
18
|
+
* - `resourceGroup`: Optional. Reference to the resource group for deployment.
|
|
19
19
|
* - `shortName`: A shorter name for the Action Group used in notifications.
|
|
20
20
|
* - `enabled`: Specifies if the Action Group is active. Defaults to true.
|
|
21
21
|
* - `location`: The Azure region where the Action Group is hosted. Defaults to global.
|
|
@@ -15,7 +15,7 @@ class ActionGroup extends lib_1.AzureResource {
|
|
|
15
15
|
* @param id - The unique identifier for this instance of the Action Group.
|
|
16
16
|
* @param props - Configuration properties for the Action Group. These properties may include:
|
|
17
17
|
* - `name`: The name of the Action Group.
|
|
18
|
-
* - `resourceGroup`:
|
|
18
|
+
* - `resourceGroup`: Optional. Reference to the resource group for deployment.
|
|
19
19
|
* - `shortName`: A shorter name for the Action Group used in notifications.
|
|
20
20
|
* - `enabled`: Specifies if the Action Group is active. Defaults to true.
|
|
21
21
|
* - `location`: The Azure region where the Action Group is hosted. Defaults to global.
|
|
@@ -48,7 +48,7 @@ class ActionGroup extends lib_1.AzureResource {
|
|
|
48
48
|
constructor(scope, id, props) {
|
|
49
49
|
super(scope, id);
|
|
50
50
|
this.props = props;
|
|
51
|
-
this.resourceGroup = props
|
|
51
|
+
this.resourceGroup = this.setupResourceGroup(props);
|
|
52
52
|
/**
|
|
53
53
|
* Define default values.
|
|
54
54
|
*/
|
|
@@ -61,7 +61,7 @@ class ActionGroup extends lib_1.AzureResource {
|
|
|
61
61
|
const azurermMonitorActionGroup = new monitor_action_group_1.MonitorActionGroup(this, "actiongroup", {
|
|
62
62
|
...defaults,
|
|
63
63
|
name: props.name,
|
|
64
|
-
resourceGroupName:
|
|
64
|
+
resourceGroupName: this.resourceGroup.name,
|
|
65
65
|
shortName: props.shortName,
|
|
66
66
|
armRoleReceiver: cdktf.listMapper(model.monitorActionGroupArmRoleReceiverToTerraform, true)(this.props.armRoleReceivers),
|
|
67
67
|
emailReceiver: cdktf.listMapper(model.monitorActionGroupEmailReceiverToTerraform, true)(this.props.emailReceivers),
|
|
@@ -82,4 +82,4 @@ class ActionGroup extends lib_1.AzureResource {
|
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
exports.ActionGroup = ActionGroup;
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtYWN0aW9uZ3JvdXAvbGliL2FjdGlvbmdyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJGQUFzRjtBQUV0RiwrQkFBK0I7QUFFL0IsOENBQXFEO0FBQ3JELGtDQUFrQztBQUVsQyxNQUFhLFdBQVksU0FBUSxtQkFBYTtJQUk1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FzQ0c7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEQ7O1dBRUc7UUFDSCxNQUFNLFFBQVEsR0FBRztZQUNmLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUk7WUFDOUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksUUFBUTtZQUNwQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFO1NBQ3ZCLENBQUM7UUFFRix1REFBdUQ7UUFDdkQsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLHlDQUFrQixDQUN0RCxJQUFJLEVBQ0osYUFBYSxFQUNiO1lBQ0UsR0FBRyxRQUFRO1lBQ1gsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSTtZQUMxQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsZUFBZSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQy9CLEtBQUssQ0FBQyw0Q0FBNEMsRUFDbEQsSUFBSSxDQUNMLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztZQUU5QixhQUFhLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FDN0IsS0FBSyxDQUFDLDBDQUEwQyxFQUNoRCxJQUFJLENBQ0wsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUU1QixhQUFhLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FDN0IsS0FBSyxDQUFDLDBDQUEwQyxFQUNoRCxJQUFJLENBQ0wsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUU1QixXQUFXLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FDM0IsS0FBSyxDQUFDLHdDQUF3QyxFQUM5QyxJQUFJLENBQ0wsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUUxQixlQUFlLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FDL0IsS0FBSyxDQUFDLDRDQUE0QyxFQUNsRCxJQUFJLENBQ0wsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1lBRTlCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxVQUFVLENBQ2hDLEtBQUssQ0FBQyw2Q0FBNkMsRUFDbkQsSUFBSSxDQUNMLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztZQUUvQixvQkFBb0IsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUNwQyxLQUFLLENBQUMsaURBQWlELEVBQ3ZELElBQUksQ0FDTCxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUM7WUFFbkMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FDaEMsS0FBSyxDQUFDLDZDQUE2QyxFQUNuRCxJQUFJLENBQ0wsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1NBQ2hDLENBQ0YsQ0FBQztRQUVGLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsRUFBRSxHQUFHLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztRQUV2QyxNQUFNLGlDQUFpQyxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FDakUsSUFBSSxFQUNKLElBQUksRUFDSjtZQUNFLEtBQUssRUFBRSx5QkFBeUIsQ0FBQyxFQUFFO1NBQ3BDLENBQ0YsQ0FBQztRQUVGLGdJQUFnSTtRQUNoSSxpQ0FBaUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1RCxDQUFDO0NBQ0Y7QUEzSEQsa0NBMkhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9uaXRvckFjdGlvbkdyb3VwIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1henVyZXJtL2xpYi9tb25pdG9yLWFjdGlvbi1ncm91cFwiO1xuaW1wb3J0IHsgUmVzb3VyY2VHcm91cCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvcmVzb3VyY2UtZ3JvdXBcIjtcbmltcG9ydCAqIGFzIGNka3RmIGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEF6dXJlUmVzb3VyY2UgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWJcIjtcbmltcG9ydCAqIGFzIG1vZGVsIGZyb20gXCIuLi9tb2RlbFwiO1xuXG5leHBvcnQgY2xhc3MgQWN0aW9uR3JvdXAgZXh0ZW5kcyBBenVyZVJlc291cmNlIHtcbiAgcmVhZG9ubHkgcHJvcHM6IG1vZGVsLkFjdGlvbkdyb3VwUHJvcHM7XG4gIHB1YmxpYyByZXNvdXJjZUdyb3VwOiBSZXNvdXJjZUdyb3VwO1xuICBwdWJsaWMgaWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIE1hbmFnZXMgYW4gQXp1cmUgTW9uaXRvciBBY3Rpb24gR3JvdXAsIHdoaWNoIGlzIHVzZWQgdG8gdHJpZ2dlciBhY3Rpb25zIG9yIG5vdGlmaWNhdGlvbnMgYmFzZWQgb24gYWxlcnRzIG9yIGNvbmRpdGlvbnMgbWV0IHdpdGhpbiBBenVyZSBNb25pdG9yLlxuICAgKlxuICAgKiBBbiBBY3Rpb24gR3JvdXAgaW4gQXp1cmUgTW9uaXRvciBkZWZpbmVzIGEgY29sbGVjdGlvbiBvZiBpbmRpdmlkdWFsIGFjdGlvbnMgdGhhdCBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGNvbmRpdGlvbnMgb2YgYW4gYXNzb2NpYXRlZCBhbGVydCBydWxlIGFyZSBtZXQuIEFjdGlvbnMgY2FuIGluY2x1ZGUgc2VuZGluZyBlbWFpbHMsIHRyaWdnZXJpbmcgQXp1cmUgRnVuY3Rpb25zLCBjYWxsaW5nIHdlYmhvb2tzLCBhbmQgbW9yZS4gVGhpcyBjbGFzcyBhbGxvd3MgZm9yIGNvbmZpZ3VyaW5nIGFuZCBtYW5hZ2luZyB0aGVzZSBhY3Rpb25zLCBtYWtpbmcgaXQgZXNzZW50aWFsIGZvciBzZXR0aW5nIHVwIGNvbXByZWhlbnNpdmUgbW9uaXRvcmluZyBhbmQgcmVzcG9uc2Ugc3lzdGVtcyBpbiBBenVyZSBhcHBsaWNhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3QsIHR5cGljYWxseSByZXByZXNlbnRpbmcgdGhlIENsb3VkIERldmVsb3BtZW50IEtpdCAoQ0RLKSBzdGFjay5cbiAgICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGluc3RhbmNlIG9mIHRoZSBBY3Rpb24gR3JvdXAuXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIEFjdGlvbiBHcm91cC4gVGhlc2UgcHJvcGVydGllcyBtYXkgaW5jbHVkZTpcbiAgICogICAgICAgICAgICAgICAgLSBgbmFtZWA6IFRoZSBuYW1lIG9mIHRoZSBBY3Rpb24gR3JvdXAuXG4gICAqICAgICAgICAgICAgICAgIC0gYHJlc291cmNlR3JvdXBgOiBPcHRpb25hbC4gUmVmZXJlbmNlIHRvIHRoZSByZXNvdXJjZSBncm91cCBmb3IgZGVwbG95bWVudC5cbiAgICogICAgICAgICAgICAgICAgLSBgc2hvcnROYW1lYDogQSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBBY3Rpb24gR3JvdXAgdXNlZCBpbiBub3RpZmljYXRpb25zLlxuICAgKiAgICAgICAgICAgICAgICAtIGBlbmFibGVkYDogU3BlY2lmaWVzIGlmIHRoZSBBY3Rpb24gR3JvdXAgaXMgYWN0aXZlLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKiAgICAgICAgICAgICAgICAtIGBsb2NhdGlvbmA6IFRoZSBBenVyZSByZWdpb24gd2hlcmUgdGhlIEFjdGlvbiBHcm91cCBpcyBob3N0ZWQuIERlZmF1bHRzIHRvIGdsb2JhbC5cbiAgICogICAgICAgICAgICAgICAgLSBgdGFnc2A6IEEgZGljdGlvbmFyeSBvZiB0YWdzIHRvIGFwcGx5IHRvIHRoZSBBY3Rpb24gR3JvdXAgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuXG4gICAqICAgICAgICAgICAgICAgIC0gUmVjZWl2ZXJzOiBDb25maWd1cmF0aW9ucyBmb3IgdmFyaW91cyB0eXBlcyBvZiBub3RpZmljYXRpb25zIChlLmcuLCBlbWFpbCwgU01TLCB3ZWJob29rKS5cbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBhY3Rpb25Hcm91cCA9IG5ldyBBY3Rpb25Hcm91cCh0aGlzLCAnbXlBY3Rpb25Hcm91cCcsIHtcbiAgICogICBuYW1lOiAnY3JpdGljYWxBbGVydHNHcm91cCcsXG4gICAqICAgcmVzb3VyY2VHcm91cDogbXlSZXNvdXJjZUdyb3VwLFxuICAgKiAgIHNob3J0TmFtZTogJ0FsZXJ0cycsXG4gICAqICAgbG9jYXRpb246ICdFYXN0IFVTJyxcbiAgICogICBlbWFpbFJlY2VpdmVyczogW3tcbiAgICogICAgIG5hbWU6ICdhZG1pbicsXG4gICAqICAgICBlbWFpbEFkZHJlc3M6ICdhZG1pbkBleGFtcGxlLmNvbSdcbiAgICogICB9XSxcbiAgICogICBzbXNSZWNlaXZlcnM6IFt7XG4gICAqICAgICBuYW1lOiAnYWRtaW5TbXMnLFxuICAgKiAgICAgY291bnRyeUNvZGU6ICcxJyxcbiAgICogICAgIHBob25lTnVtYmVyOiAnNTU1MTIzNDU2NydcbiAgICogICB9XSxcbiAgICogICB0YWdzOiB7XG4gICAqICAgICBlbnZpcm9ubWVudDogJ3Byb2R1Y3Rpb24nXG4gICAqICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqIFRoaXMgc2V0dXAgY3JlYXRlcyBhbiBBY3Rpb24gR3JvdXAgdGhhdCBzZW5kcyBlbWFpbCBhbmQgU01TIG5vdGlmaWNhdGlvbnMgd2hlbiB0cmlnZ2VyZWQgYnkgYW4gYWxlcnQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogbW9kZWwuQWN0aW9uR3JvdXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5yZXNvdXJjZUdyb3VwID0gdGhpcy5zZXR1cFJlc291cmNlR3JvdXAocHJvcHMpO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lIGRlZmF1bHQgdmFsdWVzLlxuICAgICAqL1xuICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgZW5hYmxlZDogcHJvcHMuZW5hYmxlZCA/PyB0cnVlLFxuICAgICAgbG9jYXRpb246IHByb3BzLmxvY2F0aW9uID8/IFwiZ2xvYmFsXCIsXG4gICAgICB0YWdzOiBwcm9wcy50YWdzID8/IHt9LFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgdGhlIEFjdGlvbiBHcm91cCB3aXRoIHRoZSBwcm92aWRlZCBwcm9wZXJ0aWVzXG4gICAgY29uc3QgYXp1cmVybU1vbml0b3JBY3Rpb25Hcm91cCA9IG5ldyBNb25pdG9yQWN0aW9uR3JvdXAoXG4gICAgICB0aGlzLFxuICAgICAgXCJhY3Rpb25ncm91cFwiLFxuICAgICAge1xuICAgICAgICAuLi5kZWZhdWx0cyxcbiAgICAgICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICAgICAgcmVzb3VyY2VHcm91cE5hbWU6IHRoaXMucmVzb3VyY2VHcm91cC5uYW1lLFxuICAgICAgICBzaG9ydE5hbWU6IHByb3BzLnNob3J0TmFtZSxcbiAgICAgICAgYXJtUm9sZVJlY2VpdmVyOiBjZGt0Zi5saXN0TWFwcGVyKFxuICAgICAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cEFybVJvbGVSZWNlaXZlclRvVGVycmFmb3JtLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICkodGhpcy5wcm9wcy5hcm1Sb2xlUmVjZWl2ZXJzKSxcblxuICAgICAgICBlbWFpbFJlY2VpdmVyOiBjZGt0Zi5saXN0TWFwcGVyKFxuICAgICAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cEVtYWlsUmVjZWl2ZXJUb1RlcnJhZm9ybSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApKHRoaXMucHJvcHMuZW1haWxSZWNlaXZlcnMpLFxuXG4gICAgICAgIHZvaWNlUmVjZWl2ZXI6IGNka3RmLmxpc3RNYXBwZXIoXG4gICAgICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwVm9pY2VSZWNlaXZlclRvVGVycmFmb3JtLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICkodGhpcy5wcm9wcy52b2ljZVJlY2VpdmVycyksXG5cbiAgICAgICAgc21zUmVjZWl2ZXI6IGNka3RmLmxpc3RNYXBwZXIoXG4gICAgICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwU21zUmVjZWl2ZXJUb1RlcnJhZm9ybSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApKHRoaXMucHJvcHMuc21zUmVjZWl2ZXJzKSxcblxuICAgICAgICB3ZWJob29rUmVjZWl2ZXI6IGNka3RmLmxpc3RNYXBwZXIoXG4gICAgICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwV2ViaG9va1JlY2VpdmVyVG9UZXJyYWZvcm0sXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKSh0aGlzLnByb3BzLndlYmhvb2tSZWNlaXZlcnMpLFxuXG4gICAgICAgIGV2ZW50SHViUmVjZWl2ZXI6IGNka3RmLmxpc3RNYXBwZXIoXG4gICAgICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwRXZlbnRIdWJSZWNlaXZlclRvVGVycmFmb3JtLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICkodGhpcy5wcm9wcy5ldmVudEh1YlJlY2VpdmVycyksXG5cbiAgICAgICAgYXp1cmVBcHBQdXNoUmVjZWl2ZXI6IGNka3RmLmxpc3RNYXBwZXIoXG4gICAgICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwQXp1cmVBcHBQdXNoUmVjZWl2ZXJUb1RlcnJhZm9ybSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApKHRoaXMucHJvcHMuYXp1cmVBcHBQdXNoUmVjZWl2ZXJzKSxcblxuICAgICAgICBsb2dpY0FwcFJlY2VpdmVyOiBjZGt0Zi5saXN0TWFwcGVyKFxuICAgICAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cExvZ2ljQXBwUmVjZWl2ZXJUb1RlcnJhZm9ybSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApKHRoaXMucHJvcHMubG9naWNBcHBSZWNlaXZlcnMpLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gVGVycmFmb3JtIE91dHB1dHNcbiAgICB0aGlzLmlkID0gYXp1cmVybU1vbml0b3JBY3Rpb25Hcm91cC5pZDtcblxuICAgIGNvbnN0IGNka3RmVGVycmFmb3JtT3V0cHV0QWN0aW9uR3JvdXBJZCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQoXG4gICAgICB0aGlzLFxuICAgICAgXCJpZFwiLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogYXp1cmVybU1vbml0b3JBY3Rpb25Hcm91cC5pZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8qVGhpcyBhbGxvd3MgdGhlIFRlcnJhZm9ybSByZXNvdXJjZSBuYW1lIHRvIG1hdGNoIHRoZSBvcmlnaW5hbCBuYW1lLiBZb3UgY2FuIHJlbW92ZSB0aGUgY2FsbCBpZiB5b3UgZG9uJ3QgbmVlZCB0aGVtIHRvIG1hdGNoLiovXG4gICAgY2RrdGZUZXJyYWZvcm1PdXRwdXRBY3Rpb25Hcm91cElkLm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -13,9 +13,10 @@ export interface ActionGroupProps {
|
|
|
13
13
|
*/
|
|
14
14
|
readonly name: string;
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
16
|
+
* An optional reference to the resource group in which to deploy the Action Group.
|
|
17
|
+
* If not provided, the Action Group will be deployed in the default resource group.
|
|
17
18
|
*/
|
|
18
|
-
readonly resourceGroup
|
|
19
|
+
readonly resourceGroup?: ResourceGroup;
|
|
19
20
|
/**
|
|
20
21
|
* The short name of the action group. This will be used in SMS messages. The length should be in the range (1 - 12).
|
|
21
22
|
*/
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWdyb3VwLXByb3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLWFjdGlvbmdyb3VwL21vZGVsL2FjdGlvbi1ncm91cC1wcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzb3VyY2VHcm91cCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvcmVzb3VyY2UtZ3JvdXBcIjtcbmltcG9ydCB7IEFybVJvbGVSZWNlaXZlclByb3BzIH0gZnJvbSBcIi4vYXJtLXJvbGUtcmVjZWl2ZXItcHJvcHNcIjtcbmltcG9ydCB7IEF6dXJlQXBwUHVzaFJlY2VpdmVyUHJvcHMgfSBmcm9tIFwiLi9henVyZS1hcHAtcHVzaC1yZWNlaXZlci1wcm9wc1wiO1xuaW1wb3J0IHsgRW1haWxSZWNlaXZlcnNQcm9wcyB9IGZyb20gXCIuL2VtYWlsLXJlY2VpdmVyLXByb3BzXCI7XG5pbXBvcnQgeyBFdmVudGh1YlJlY2VpdmVyUHJvcHMgfSBmcm9tIFwiLi9ldmVudGh1Yi1yZWNlaXZlci1wcm9wc1wiO1xuaW1wb3J0IHsgTG9naWNBcHBSZWNlaXZlclByb3BzIH0gZnJvbSBcIi4vbG9naWMtYXBwLXJlY2VpdmVyLXByb3BzXCI7XG5pbXBvcnQgeyBTbXNSZWNlaXZlclByb3BzIH0gZnJvbSBcIi4vc21zLXJlY2VpdmVyLXByb3BzXCI7XG5pbXBvcnQgeyBWb2ljZVJlY2VpdmVyUHJvcHMgfSBmcm9tIFwiLi92b2ljZS1yZWNlaXZlci1wcm9wc1wiO1xuaW1wb3J0IHsgV2ViaG9va1JlY2VpdmVyUHJvcHMgfSBmcm9tIFwiLi93ZWJob29rLXJlY2VpdmVyLXByb3BzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uR3JvdXBQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQWN0aW9uIEdyb3VwLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCByZWZlcmVuY2UgdG8gdGhlIHJlc291cmNlIGdyb3VwIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgQWN0aW9uIEdyb3VwLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBBY3Rpb24gR3JvdXAgd2lsbCBiZSBkZXBsb3llZCBpbiB0aGUgZGVmYXVsdCByZXNvdXJjZSBncm91cC5cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlR3JvdXA/OiBSZXNvdXJjZUdyb3VwO1xuICAvKipcbiAgICogVGhlIHNob3J0IG5hbWUgb2YgdGhlIGFjdGlvbiBncm91cC4gVGhpcyB3aWxsIGJlIHVzZWQgaW4gU01TIG1lc3NhZ2VzLiBUaGUgbGVuZ3RoIHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgKDEgLSAxMikuXG4gICAqL1xuICByZWFkb25seSBzaG9ydE5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBhY3Rpb24gZ3JvdXAgaXMgZW5hYmxlZC4gSWYgYW4gYWN0aW9uIGdyb3VwIGlzIG5vdCBlbmFibGVkLCB0aGVuIG5vbmUgb2YgaXRzIHJlY2VpdmVycyB3aWxsIHJlY2VpdmUgY29tbXVuaWNhdGlvbnMuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIEF6dXJlIFJlZ2lvbiB3aGVyZSB0aGUgQWN0aW9uIEdyb3VwIHNob3VsZCBleGlzdC5cbiAgICogQGRlZmF1bHQgZ2xvYmFsXG4gICAqL1xuICByZWFkb25seSBsb2NhdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiB0YWdzIHRvIGFzc2lnbiB0byB0aGUgcmVzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICByZWFkb25seSBhcm1Sb2xlUmVjZWl2ZXJzPzogQXJtUm9sZVJlY2VpdmVyUHJvcHNbXTtcblxuICByZWFkb25seSBlbWFpbFJlY2VpdmVycz86IEVtYWlsUmVjZWl2ZXJzUHJvcHNbXTtcblxuICByZWFkb25seSB2b2ljZVJlY2VpdmVycz86IFZvaWNlUmVjZWl2ZXJQcm9wc1tdO1xuXG4gIHJlYWRvbmx5IHNtc1JlY2VpdmVycz86IFNtc1JlY2VpdmVyUHJvcHNbXTtcblxuICByZWFkb25seSB3ZWJob29rUmVjZWl2ZXJzPzogV2ViaG9va1JlY2VpdmVyUHJvcHNbXTtcblxuICByZWFkb25seSBldmVudEh1YlJlY2VpdmVycz86IEV2ZW50aHViUmVjZWl2ZXJQcm9wc1tdO1xuXG4gIHJlYWRvbmx5IGF6dXJlQXBwUHVzaFJlY2VpdmVycz86IEF6dXJlQXBwUHVzaFJlY2VpdmVyUHJvcHNbXTtcblxuICByZWFkb25seSBsb2dpY0FwcFJlY2VpdmVycz86IExvZ2ljQXBwUmVjZWl2ZXJQcm9wc1tdO1xuXG4gIC8vIFRPRE86XG4gIC8vIHJlYWRvbmx5IGl0c21SZWNlaXZlcnM7XG4gIC8vIHJlYWRvbmx5IGF1dG9tYXRpb25SdW5ib29rUmVjZWl2ZXJzO1xuICAvLyByZWFkb25seSBhenVyZUZ1bmN0aW9uUmVjZWl2ZXJzO1xufVxuIl19
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const provider_1 = require("@cdktf/provider-azurerm/lib/provider");
|
|
4
|
+
const resource_group_1 = require("@cdktf/provider-azurerm/lib/resource-group");
|
|
5
|
+
const cdktf_1 = require("cdktf");
|
|
6
|
+
const ag = require("..");
|
|
7
|
+
const testing_1 = require("../../testing");
|
|
8
|
+
const randomName_1 = require("../../util/randomName");
|
|
9
|
+
require("cdktf/lib/testing/adapters/jest");
|
|
10
|
+
describe("Example of deploying Action Group", () => {
|
|
11
|
+
let stack;
|
|
12
|
+
let fullSynthResult;
|
|
13
|
+
const streamOutput = process.env.STREAM_OUTPUT !== "false";
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
const app = cdktf_1.Testing.app();
|
|
16
|
+
stack = new cdktf_1.TerraformStack(app, "test");
|
|
17
|
+
const randomName = (0, randomName_1.generateRandomName)(12);
|
|
18
|
+
new provider_1.AzurermProvider(stack, "azureFeature", { features: {} });
|
|
19
|
+
// Create a resource group
|
|
20
|
+
const resourceGroup = new resource_group_1.ResourceGroup(stack, "rg", {
|
|
21
|
+
name: `rg-${randomName}`,
|
|
22
|
+
location: "eastus",
|
|
23
|
+
});
|
|
24
|
+
new ag.ActionGroup(stack, "testAzureActionGroup", {
|
|
25
|
+
name: "testactiongroup",
|
|
26
|
+
location: "global",
|
|
27
|
+
resourceGroup: resourceGroup,
|
|
28
|
+
shortName: "testshortn",
|
|
29
|
+
emailReceivers: [
|
|
30
|
+
{
|
|
31
|
+
name: "testemail1",
|
|
32
|
+
emailAddress: "test1@email.com",
|
|
33
|
+
useCommonAlertSchema: true,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: "testemail2",
|
|
37
|
+
emailAddress: "test2@email.com",
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
webhookReceivers: [
|
|
41
|
+
{
|
|
42
|
+
name: "testwebhook1",
|
|
43
|
+
serviceUri: "https://www.example1.com",
|
|
44
|
+
useCommonAlertSchema: true,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: "testwebhook2",
|
|
48
|
+
serviceUri: "https://www.example2.com",
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
});
|
|
52
|
+
fullSynthResult = cdktf_1.Testing.fullSynth(stack); // Save the result for reuse
|
|
53
|
+
});
|
|
54
|
+
afterEach(() => {
|
|
55
|
+
try {
|
|
56
|
+
(0, testing_1.TerraformDestroy)(fullSynthResult, streamOutput);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.error("Error during Terraform destroy:", error);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
it("check if this can be deployed", () => {
|
|
63
|
+
(0, testing_1.TerraformApplyAndCheckIdempotency)(fullSynthResult, streamOutput); // Set to true to stream output
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXp1cmVBY3Rpb25Hcm91cC5pbnRlZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9henVyZS1hY3Rpb25ncm91cC90ZXN0L0F6dXJlQWN0aW9uR3JvdXAuaW50ZWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtRUFBdUU7QUFDdkUsK0VBQTJFO0FBQzNFLGlDQUFnRDtBQUNoRCx5QkFBeUI7QUFFekIsMkNBR3VCO0FBQ3ZCLHNEQUEyRDtBQUMzRCwyQ0FBeUM7QUFFekMsUUFBUSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtJQUNqRCxJQUFJLEtBQXFCLENBQUM7SUFDMUIsSUFBSSxlQUFvQixDQUFDO0lBQ3pCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxLQUFLLE9BQU8sQ0FBQztJQUUzRCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsTUFBTSxHQUFHLEdBQUcsZUFBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzFCLEtBQUssR0FBRyxJQUFJLHNCQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUEsK0JBQWtCLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFFMUMsSUFBSSwwQkFBZSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU3RCwwQkFBMEI7UUFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSw4QkFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUU7WUFDbkQsSUFBSSxFQUFFLE1BQU0sVUFBVSxFQUFFO1lBQ3hCLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztRQUVILElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7WUFDaEQsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixRQUFRLEVBQUUsUUFBUTtZQUNsQixhQUFhLEVBQUUsYUFBYTtZQUM1QixTQUFTLEVBQUUsWUFBWTtZQUN2QixjQUFjLEVBQUU7Z0JBQ2Q7b0JBQ0UsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLFlBQVksRUFBRSxpQkFBaUI7b0JBQy9CLG9CQUFvQixFQUFFLElBQUk7aUJBQzNCO2dCQUNEO29CQUNFLElBQUksRUFBRSxZQUFZO29CQUNsQixZQUFZLEVBQUUsaUJBQWlCO2lCQUNoQzthQUNGO1lBQ0QsZ0JBQWdCLEVBQUU7Z0JBQ2hCO29CQUNFLElBQUksRUFBRSxjQUFjO29CQUNwQixVQUFVLEVBQUUsMEJBQTBCO29CQUN0QyxvQkFBb0IsRUFBRSxJQUFJO2lCQUMzQjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsY0FBYztvQkFDcEIsVUFBVSxFQUFFLDBCQUEwQjtpQkFDdkM7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILGVBQWUsR0FBRyxlQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNEJBQTRCO0lBQzFFLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUk7WUFDRixJQUFBLDBCQUFnQixFQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUNqRDtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN6RDtJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtRQUN2QyxJQUFBLDJDQUFpQyxFQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtJQUNuRyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXp1cmVybVByb3ZpZGVyIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1henVyZXJtL2xpYi9wcm92aWRlclwiO1xuaW1wb3J0IHsgUmVzb3VyY2VHcm91cCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvcmVzb3VyY2UtZ3JvdXBcIjtcbmltcG9ydCB7IFRlc3RpbmcsIFRlcnJhZm9ybVN0YWNrIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgKiBhcyBhZyBmcm9tIFwiLi5cIjtcblxuaW1wb3J0IHtcbiAgVGVycmFmb3JtQXBwbHlBbmRDaGVja0lkZW1wb3RlbmN5LFxuICBUZXJyYWZvcm1EZXN0cm95LFxufSBmcm9tIFwiLi4vLi4vdGVzdGluZ1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVSYW5kb21OYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWwvcmFuZG9tTmFtZVwiO1xuaW1wb3J0IFwiY2RrdGYvbGliL3Rlc3RpbmcvYWRhcHRlcnMvamVzdFwiO1xuXG5kZXNjcmliZShcIkV4YW1wbGUgb2YgZGVwbG95aW5nIEFjdGlvbiBHcm91cFwiLCAoKSA9PiB7XG4gIGxldCBzdGFjazogVGVycmFmb3JtU3RhY2s7XG4gIGxldCBmdWxsU3ludGhSZXN1bHQ6IGFueTtcbiAgY29uc3Qgc3RyZWFtT3V0cHV0ID0gcHJvY2Vzcy5lbnYuU1RSRUFNX09VVFBVVCAhPT0gXCJmYWxzZVwiO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGNvbnN0IGFwcCA9IFRlc3RpbmcuYXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgVGVycmFmb3JtU3RhY2soYXBwLCBcInRlc3RcIik7XG4gICAgY29uc3QgcmFuZG9tTmFtZSA9IGdlbmVyYXRlUmFuZG9tTmFtZSgxMik7XG5cbiAgICBuZXcgQXp1cmVybVByb3ZpZGVyKHN0YWNrLCBcImF6dXJlRmVhdHVyZVwiLCB7IGZlYXR1cmVzOiB7fSB9KTtcblxuICAgIC8vIENyZWF0ZSBhIHJlc291cmNlIGdyb3VwXG4gICAgY29uc3QgcmVzb3VyY2VHcm91cCA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcInJnXCIsIHtcbiAgICAgIG5hbWU6IGByZy0ke3JhbmRvbU5hbWV9YCxcbiAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgIH0pO1xuXG4gICAgbmV3IGFnLkFjdGlvbkdyb3VwKHN0YWNrLCBcInRlc3RBenVyZUFjdGlvbkdyb3VwXCIsIHtcbiAgICAgIG5hbWU6IFwidGVzdGFjdGlvbmdyb3VwXCIsXG4gICAgICBsb2NhdGlvbjogXCJnbG9iYWxcIixcbiAgICAgIHJlc291cmNlR3JvdXA6IHJlc291cmNlR3JvdXAsXG4gICAgICBzaG9ydE5hbWU6IFwidGVzdHNob3J0blwiLFxuICAgICAgZW1haWxSZWNlaXZlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdGVtYWlsMVwiLFxuICAgICAgICAgIGVtYWlsQWRkcmVzczogXCJ0ZXN0MUBlbWFpbC5jb21cIixcbiAgICAgICAgICB1c2VDb21tb25BbGVydFNjaGVtYTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdGVtYWlsMlwiLFxuICAgICAgICAgIGVtYWlsQWRkcmVzczogXCJ0ZXN0MkBlbWFpbC5jb21cIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB3ZWJob29rUmVjZWl2ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3R3ZWJob29rMVwiLFxuICAgICAgICAgIHNlcnZpY2VVcmk6IFwiaHR0cHM6Ly93d3cuZXhhbXBsZTEuY29tXCIsXG4gICAgICAgICAgdXNlQ29tbW9uQWxlcnRTY2hlbWE6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3R3ZWJob29rMlwiLFxuICAgICAgICAgIHNlcnZpY2VVcmk6IFwiaHR0cHM6Ly93d3cuZXhhbXBsZTIuY29tXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZnVsbFN5bnRoUmVzdWx0ID0gVGVzdGluZy5mdWxsU3ludGgoc3RhY2spOyAvLyBTYXZlIHRoZSByZXN1bHQgZm9yIHJldXNlXG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIFRlcnJhZm9ybURlc3Ryb3koZnVsbFN5bnRoUmVzdWx0LCBzdHJlYW1PdXRwdXQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZHVyaW5nIFRlcnJhZm9ybSBkZXN0cm95OlwiLCBlcnJvcik7XG4gICAgfVxuICB9KTtcblxuICBpdChcImNoZWNrIGlmIHRoaXMgY2FuIGJlIGRlcGxveWVkXCIsICgpID0+IHtcbiAgICBUZXJyYWZvcm1BcHBseUFuZENoZWNrSWRlbXBvdGVuY3koZnVsbFN5bnRoUmVzdWx0LCBzdHJlYW1PdXRwdXQpOyAvLyBTZXQgdG8gdHJ1ZSB0byBzdHJlYW0gb3V0cHV0XG4gIH0pO1xufSk7XG4iXX0=
|