@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
|
@@ -75,6 +75,8 @@ class AzureResource extends constructs_1.Construct {
|
|
|
75
75
|
storageAccountId: props.storageAccountId,
|
|
76
76
|
targetResourceId: this.id,
|
|
77
77
|
logAnalyticsDestinationType: undefined,
|
|
78
|
+
log: props?.log,
|
|
79
|
+
metric: props?.metric,
|
|
78
80
|
});
|
|
79
81
|
}
|
|
80
82
|
setupResourceGroup(props) {
|
|
@@ -82,7 +84,7 @@ class AzureResource extends constructs_1.Construct {
|
|
|
82
84
|
// Create a new resource group
|
|
83
85
|
const newResourceGroup = new resource_group_1.ResourceGroup(this, "rg", {
|
|
84
86
|
name: `rg-${props.name}`,
|
|
85
|
-
location: props.location,
|
|
87
|
+
location: props.location || "eastus",
|
|
86
88
|
tags: props.tags,
|
|
87
89
|
});
|
|
88
90
|
// Use the name of the new resource group
|
|
@@ -96,7 +98,7 @@ class AzureResource extends constructs_1.Construct {
|
|
|
96
98
|
}
|
|
97
99
|
exports.AzureResource = AzureResource;
|
|
98
100
|
_a = JSII_RTTI_SYMBOL_1;
|
|
99
|
-
AzureResource[_a] = { fqn: "@microsoft/terraform-cdk-constructs.core_azure.AzureResource", version: "0.0.3-pre.
|
|
101
|
+
AzureResource[_a] = { fqn: "@microsoft/terraform-cdk-constructs.core_azure.AzureResource", version: "0.0.3-pre.12" };
|
|
100
102
|
class AzureResourceWithAlert extends AzureResource {
|
|
101
103
|
addQueryRuleAlert(props) {
|
|
102
104
|
new queryalert.QueryRuleAlert(this, "queryrulealert", {
|
|
@@ -114,5 +116,5 @@ class AzureResourceWithAlert extends AzureResource {
|
|
|
114
116
|
}
|
|
115
117
|
exports.AzureResourceWithAlert = AzureResourceWithAlert;
|
|
116
118
|
_b = JSII_RTTI_SYMBOL_1;
|
|
117
|
-
AzureResourceWithAlert[_b] = { fqn: "@microsoft/terraform-cdk-constructs.core_azure.AzureResourceWithAlert", version: "0.0.3-pre.
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
119
|
+
AzureResourceWithAlert[_b] = { fqn: "@microsoft/terraform-cdk-constructs.core_azure.AzureResourceWithAlert", version: "0.0.3-pre.12" };
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS1henVyZS9saWIvcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrRUFBMkU7QUFDM0UsMkNBQXVDO0FBQ3ZDLGlEQUd3QjtBQUN4QixpQ0FBOEI7QUFDOUIsdURBQXVEO0FBQ3ZELHlEQUF5RDtBQUV6RCxNQUFzQixhQUFjLFNBQVEsc0JBQVM7SUFJbkQsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSSxTQUFTLENBQUMsUUFBZ0IsRUFBRSxjQUFzQjtRQUN2RCxJQUFJLFdBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxHQUFHLGNBQWMsRUFBRTtZQUN4QyxRQUFRLEVBQUUsUUFBUTtZQUNsQixrQkFBa0IsRUFBRSxjQUFjO1lBQ2xDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTRCRztJQUNJLGVBQWUsQ0FDcEIsS0FBa0M7UUFFbEMsT0FBTyxJQUFJLGlDQUFrQixDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDbEQsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksZUFBZTtZQUNuQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsdUJBQXVCO1lBQ3RELDJCQUEyQixFQUFFLEtBQUssQ0FBQywyQkFBMkI7WUFDOUQsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7WUFDeEMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDekIsMkJBQTJCLEVBQUUsU0FBUztZQUN0QyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUc7WUFDZixNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU07U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLGtCQUFrQixDQUFDLEtBQVU7UUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDeEIsOEJBQThCO1lBQzlCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSw4QkFBYSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQ3JELElBQUksRUFBRSxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUU7Z0JBQ3hCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLFFBQVE7Z0JBQ3BDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTthQUNqQixDQUFDLENBQUM7WUFDSCx5Q0FBeUM7WUFDekMsT0FBTyxnQkFBZ0IsQ0FBQztTQUN6QjthQUFNO1lBQ0wsdUNBQXVDO1lBQ3ZDLE9BQU8sS0FBSyxDQUFDLGFBQWEsQ0FBQztTQUM1QjtJQUNILENBQUM7O0FBNUZILHNDQTZGQzs7O0FBRUQsTUFBc0Isc0JBQXVCLFNBQVEsYUFBYTtJQUN6RCxpQkFBaUIsQ0FBQyxLQUE4QztRQUNyRSxJQUFJLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ3BELEdBQUcsS0FBSztZQUNSLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDbEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGNBQWMsQ0FBQyxLQUF3QztRQUM1RCxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUMvQyxHQUFHLEtBQUs7WUFDUixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztTQUNsQixDQUFDLENBQUM7SUFDTCxDQUFDOztBQWRILHdEQWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzb3VyY2VHcm91cCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvcmVzb3VyY2UtZ3JvdXBcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBEaWFnbm9zdGljU2V0dGluZ3MsXG4gIEJhc2VEaWFnbm9zdGljU2V0dGluZ3NQcm9wcyxcbn0gZnJvbSBcIi4vZGlhZ3NldHRpbmdzXCI7XG5pbXBvcnQgeyBSYmFjIH0gZnJvbSBcIi4vcmJhY1wiO1xuaW1wb3J0ICogYXMgbWV0cmljYWxlcnQgZnJvbSBcIi4uLy4uL2F6dXJlLW1ldHJpY2FsZXJ0XCI7XG5pbXBvcnQgKiBhcyBxdWVyeWFsZXJ0IGZyb20gXCIuLi8uLi9henVyZS1xdWVyeXJ1bGVhbGVydFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXp1cmVSZXNvdXJjZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyBpZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVzb3VyY2VHcm91cDogUmVzb3VyY2VHcm91cDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBhY2Nlc3Mgcm9sZSBhc3NpZ25tZW50IGZvciBhIHNwZWNpZmllZCBBenVyZSBBRCBvYmplY3QgKGUuZy4sIHVzZXIsIGdyb3VwLCBzZXJ2aWNlIHByaW5jaXBhbCkgd2l0aGluIHRoaXMgUkJBQyBjb25zdHJ1Y3QncyBzY29wZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIG5ldyByb2xlIGFzc2lnbm1lbnQgd2hpY2ggZ3JhbnRzIHRoZSBzcGVjaWZpZWQgQXp1cmUgQUQgb2JqZWN0IGFjY2VzcyB0byByZXNvdXJjZXNcbiAgICogYXQgdGhlIHNjb3BlIGRlZmluZWQgYnkgdGhpcyBjb25zdHJ1Y3QuIFRoaXMgaXMgdXNlZnVsIGZvciBwcm9ncmFtbWF0aWNhbGx5IG1hbmFnaW5nIGFjY2VzcyBjb250cm9scyxcbiAgICogZW5zdXJpbmcgb25seSBhdXRob3JpemVkIHVzZXJzIG9yIHN5c3RlbXMgY2FuIHBlcmZvcm0gc3BlY2lmaWMgYWN0aW9ucyBvbiBBenVyZSByZXNvdXJjZXMuXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3RJZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgQXp1cmUgQUQgb2JqZWN0ICh1c2VyLCBncm91cCwgb3Igc2VydmljZSBwcmluY2lwYWwpIHRoYXQgd2lsbCByZWNlaXZlIHRoZSByb2xlIGFzc2lnbm1lbnQuXG4gICAqIEBwYXJhbSBjdXN0b21Sb2xlTmFtZSAtIFRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIG9mIHRoZSBBenVyZSBSQkFDIHJvbGUgdG8gYmUgYXNzaWduZWQuIFRoaXMgcm9sZSBkZWZpbmVzIHRoZSBwZXJtaXNzaW9ucyB0aGF0IHRoZSBvYmplY3Qgd2lsbCBoYXZlLlxuICAgKlxuICAgKiBFeGFtcGxlIHVzYWdlOlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIEV4YW1wbGU6IEFzc2lnbiBhIFwiUmVhZGVyXCIgcm9sZSB0byBhIHVzZXIgZm9yIHRoZSBjdXJyZW50IFJCQUMgc2NvcGVcbiAgICogcmJhY0luc3RhbmNlLmFkZEFjY2VzcygndXNlci1vYmplY3QtaWQnLCAnUmVhZGVyJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFkZEFjY2VzcyhvYmplY3RJZDogc3RyaW5nLCBjdXN0b21Sb2xlTmFtZTogc3RyaW5nKSB7XG4gICAgbmV3IFJiYWModGhpcywgb2JqZWN0SWQgKyBjdXN0b21Sb2xlTmFtZSwge1xuICAgICAgb2JqZWN0SWQ6IG9iamVjdElkLFxuICAgICAgcm9sZURlZmluaXRpb25OYW1lOiBjdXN0b21Sb2xlTmFtZSxcbiAgICAgIHNjb3BlOiB0aGlzLmlkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZGlhZ25vc3RpYyBzZXR0aW5ncyB0byBhIHNwZWNpZmllZCByZXNvdXJjZSB3aXRoaW4gdGhpcyBjb25zdHJ1Y3QuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYW5kIGNvbmZpZ3VyZXMgYSBuZXcgRGlhZ25vc3RpY1NldHRpbmdzIGluc3RhbmNlIHdoaWNoIGNhcHR1cmVzIGFuZCByb3V0ZXNcbiAgICogZGlhZ25vc3RpYyBkYXRhIChsb2dzIGFuZCBtZXRyaWNzKSB0byB0aGUgc3BlY2lmaWVkIGRlc3RpbmF0aW9ucyBzdWNoIGFzIEF6dXJlIE1vbml0b3IsXG4gICAqIGFuIEV2ZW50IEh1YnMgaW5zdGFuY2UsIGEgTG9nIEFuYWx5dGljcyB3b3Jrc3BhY2UsIG9yIGFuIEF6dXJlIFN0b3JhZ2UgYWNjb3VudC5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIHByb3BlcnRpZXMgcmVxdWlyZWQgdG8gY29uZmlndXJlIHRoZSBkaWFnbm9zdGljIHNldHRpbmdzLiBUaGVzZSBpbmNsdWRlOlxuICAgKiAgICAgICAgICAgICAgICAtIGBuYW1lYDogT3B0aW9uYWwuIFRoZSBuYW1lIG9mIHRoZSBkaWFnbm9zdGljIHNldHRpbmdzIHJlc291cmNlLiBEZWZhdWx0cyB0byAnZGlhZy1zZXR0aW5ncycuXG4gICAqICAgICAgICAgICAgICAgIC0gYGxvZ0FuYWx5dGljc1dvcmtzcGFjZUlkYDogT3B0aW9uYWwuIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBMb2cgQW5hbHl0aWNzIHdvcmtzcGFjZSB0byBzZW5kIGxvZ3MuXG4gICAqICAgICAgICAgICAgICAgIC0gYGV2ZW50aHViQXV0aG9yaXphdGlvblJ1bGVJZGA6IE9wdGlvbmFsLiBUaGUgYXV0aG9yaXphdGlvbiBydWxlIElEIGZvciBhbiBFdmVudCBIdWIgd2hlcmUgbG9ncyB3aWxsIGJlIGZvcndhcmRlZC5cbiAgICogICAgICAgICAgICAgICAgLSBgZXZlbnRodWJOYW1lYDogT3B0aW9uYWwuIFRoZSBuYW1lIG9mIHRoZSBFdmVudCBIdWIgdG8gd2hpY2ggbG9ncyB3aWxsIGJlIHNlbnQuXG4gICAqICAgICAgICAgICAgICAgIC0gYHN0b3JhZ2VBY2NvdW50SWRgOiBPcHRpb25hbC4gVGhlIGlkZW50aWZpZXIgb2YgdGhlIEF6dXJlIFN0b3JhZ2UgYWNjb3VudCB3aGVyZSBsb2dzIHdpbGwgYmUgc3RvcmVkLlxuICAgKiAgICAgICAgICAgICAgICAtIGBsb2dBbmFseXRpY3NEZXN0aW5hdGlvblR5cGVgOiBPcHRpb25hbC4gRGV0ZXJtaW5lcyBpZiBsb2dzIGFyZSBzZW50IHRvIGRlZGljYXRlZCBvciBsZWdhY3kgdGFibGVzIGluIExvZyBBbmFseXRpY3MuIERlZmF1bHRzIHRvIHVuZGVmaW5lZCB3aGljaCB1c2VzIHRoZSBkZWZhdWx0IHNldHRpbmdzLlxuICAgKiAgICAgICAgICAgICAgICBUaGUgYHRhcmdldFJlc291cmNlSWRgIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIHRoZSBJRCBvZiB0aGlzIGNvbnN0cnVjdCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIERpYWdub3N0aWNTZXR0aW5ncyBjbGFzcywgY29uZmlndXJlZCB3aXRoIHRoZSBwcm92aWRlZCBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBFeGFtcGxlIHVzYWdlOlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGRpYWdTZXR0aW5ncyA9IHJlc291cmNlLmFkZERpYWdTZXR0aW5ncyh7XG4gICAqICAgbmFtZTogJ2N1c3RvbS1kaWFnLXNldHRpbmdzJyxcbiAgICogICBsb2dBbmFseXRpY3NXb3Jrc3BhY2VJZDogJ3dvcmtzcGFjZS1pZCcsXG4gICAqICAgZXZlbnRodWJBdXRob3JpemF0aW9uUnVsZUlkOiAnYXV0aC1ydWxlLWlkJyxcbiAgICogICBldmVudGh1Yk5hbWU6ICdldmVudGh1Yi1uYW1lJyxcbiAgICogICBzdG9yYWdlQWNjb3VudElkOiAnc3RvcmFnZS1hY2NvdW50LWlkJ1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYWRkRGlhZ1NldHRpbmdzKFxuICAgIHByb3BzOiBCYXNlRGlhZ25vc3RpY1NldHRpbmdzUHJvcHMsXG4gICk6IERpYWdub3N0aWNTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBEaWFnbm9zdGljU2V0dGluZ3ModGhpcywgXCJkaWFnc2V0dGluZ3NcIiwge1xuICAgICAgbmFtZTogcHJvcHMubmFtZSB8fCBcImRpYWctc2V0dGluZ3NcIixcbiAgICAgIGxvZ0FuYWx5dGljc1dvcmtzcGFjZUlkOiBwcm9wcy5sb2dBbmFseXRpY3NXb3Jrc3BhY2VJZCxcbiAgICAgIGV2ZW50aHViQXV0aG9yaXphdGlvblJ1bGVJZDogcHJvcHMuZXZlbnRodWJBdXRob3JpemF0aW9uUnVsZUlkLFxuICAgICAgZXZlbnRodWJOYW1lOiBwcm9wcy5ldmVudGh1Yk5hbWUsXG4gICAgICBzdG9yYWdlQWNjb3VudElkOiBwcm9wcy5zdG9yYWdlQWNjb3VudElkLFxuICAgICAgdGFyZ2V0UmVzb3VyY2VJZDogdGhpcy5pZCxcbiAgICAgIGxvZ0FuYWx5dGljc0Rlc3RpbmF0aW9uVHlwZTogdW5kZWZpbmVkLFxuICAgICAgbG9nOiBwcm9wcz8ubG9nLFxuICAgICAgbWV0cmljOiBwcm9wcz8ubWV0cmljLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwUmVzb3VyY2VHcm91cChwcm9wczogYW55KTogUmVzb3VyY2VHcm91cCB7XG4gICAgaWYgKCFwcm9wcy5yZXNvdXJjZUdyb3VwKSB7XG4gICAgICAvLyBDcmVhdGUgYSBuZXcgcmVzb3VyY2UgZ3JvdXBcbiAgICAgIGNvbnN0IG5ld1Jlc291cmNlR3JvdXAgPSBuZXcgUmVzb3VyY2VHcm91cCh0aGlzLCBcInJnXCIsIHtcbiAgICAgICAgbmFtZTogYHJnLSR7cHJvcHMubmFtZX1gLFxuICAgICAgICBsb2NhdGlvbjogcHJvcHMubG9jYXRpb24gfHwgXCJlYXN0dXNcIixcbiAgICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIH0pO1xuICAgICAgLy8gVXNlIHRoZSBuYW1lIG9mIHRoZSBuZXcgcmVzb3VyY2UgZ3JvdXBcbiAgICAgIHJldHVybiBuZXdSZXNvdXJjZUdyb3VwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVc2UgdGhlIHByb3ZpZGVkIHJlc291cmNlIGdyb3VwIG5hbWVcbiAgICAgIHJldHVybiBwcm9wcy5yZXNvdXJjZUdyb3VwO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXp1cmVSZXNvdXJjZVdpdGhBbGVydCBleHRlbmRzIEF6dXJlUmVzb3VyY2Uge1xuICBwdWJsaWMgYWRkUXVlcnlSdWxlQWxlcnQocHJvcHM6IHF1ZXJ5YWxlcnQuQmFzZUF6dXJlUXVlcnlSdWxlQWxlcnRQcm9wcykge1xuICAgIG5ldyBxdWVyeWFsZXJ0LlF1ZXJ5UnVsZUFsZXJ0KHRoaXMsIFwicXVlcnlydWxlYWxlcnRcIiwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBzY29wZXM6IFt0aGlzLmlkXSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRNZXRyaWNBbGVydChwcm9wczogbWV0cmljYWxlcnQuSUJhc2VNZXRyaWNBbGVydFByb3BzKSB7XG4gICAgbmV3IG1ldHJpY2FsZXJ0Lk1ldHJpY0FsZXJ0KHRoaXMsIFwibWV0cmljYWxlcnRcIiwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZXNvdXJjZUdyb3VwOiB0aGlzLnJlc291cmNlR3JvdXAsXG4gICAgICBzY29wZXM6IFt0aGlzLmlkXSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "cdktf/lib/testing/adapters/jest";
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const container_registry_1 = require("@cdktf/provider-azurerm/lib/container-registry");
|
|
4
|
+
const data_azurerm_client_config_1 = require("@cdktf/provider-azurerm/lib/data-azurerm-client-config");
|
|
5
|
+
const log_analytics_workspace_1 = require("@cdktf/provider-azurerm/lib/log-analytics-workspace");
|
|
6
|
+
const provider_1 = require("@cdktf/provider-azurerm/lib/provider");
|
|
7
|
+
const resource_group_1 = require("@cdktf/provider-azurerm/lib/resource-group");
|
|
8
|
+
const cdktf_1 = require("cdktf");
|
|
9
|
+
const testing_1 = require("../../testing");
|
|
10
|
+
const randomName_1 = require("../../util/randomName");
|
|
11
|
+
const lib_1 = require("../lib");
|
|
12
|
+
require("cdktf/lib/testing/adapters/jest");
|
|
13
|
+
describe("Example of deploying an Azure Resource", () => {
|
|
14
|
+
let stack;
|
|
15
|
+
let fullSynthResult;
|
|
16
|
+
const streamOutput = process.env.STREAM_OUTPUT !== "false";
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
const app = cdktf_1.Testing.app();
|
|
19
|
+
stack = new cdktf_1.TerraformStack(app, "test");
|
|
20
|
+
const randomName = (0, randomName_1.generateRandomName)(12);
|
|
21
|
+
class TestACR extends lib_1.AzureResource {
|
|
22
|
+
constructor(scope, name, resourceGroup, location) {
|
|
23
|
+
super(scope, name);
|
|
24
|
+
const containerRegistry = new container_registry_1.ContainerRegistry(this, "containerRegistry", {
|
|
25
|
+
name: `acr${name}8898`,
|
|
26
|
+
resourceGroupName: resourceGroup.name,
|
|
27
|
+
location: location,
|
|
28
|
+
sku: "Basic",
|
|
29
|
+
adminEnabled: true,
|
|
30
|
+
});
|
|
31
|
+
this.id = containerRegistry.id;
|
|
32
|
+
this.resourceGroup = resourceGroup;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const clientConfig = new data_azurerm_client_config_1.DataAzurermClientConfig(stack, "CurrentClientConfig", {});
|
|
36
|
+
new provider_1.AzurermProvider(stack, "azureFeature", { features: {} });
|
|
37
|
+
// Create a resource group
|
|
38
|
+
const resourceGroup = new resource_group_1.ResourceGroup(stack, "rg", {
|
|
39
|
+
name: `rg-${randomName}`,
|
|
40
|
+
location: "eastus",
|
|
41
|
+
});
|
|
42
|
+
const acr = new TestACR(stack, `${randomName}`, resourceGroup, resourceGroup.location);
|
|
43
|
+
// Test RBAC Methods
|
|
44
|
+
acr.addAccess(clientConfig.objectId, "Contributor");
|
|
45
|
+
acr.addAccess(clientConfig.objectId, "Monitoring Reader");
|
|
46
|
+
const logAnalyticsWorkspace = new log_analytics_workspace_1.LogAnalyticsWorkspace(stack, "log_analytics", {
|
|
47
|
+
location: "eastus",
|
|
48
|
+
name: `la-${randomName}`,
|
|
49
|
+
resourceGroupName: resourceGroup.name,
|
|
50
|
+
});
|
|
51
|
+
// Test Diag Settings
|
|
52
|
+
acr.addDiagSettings({
|
|
53
|
+
name: "diagsettings",
|
|
54
|
+
logAnalyticsWorkspaceId: logAnalyticsWorkspace.id,
|
|
55
|
+
metric: [
|
|
56
|
+
{
|
|
57
|
+
category: "AllMetrics",
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
});
|
|
61
|
+
fullSynthResult = cdktf_1.Testing.fullSynth(stack); // Save the result for reuse
|
|
62
|
+
});
|
|
63
|
+
afterEach(() => {
|
|
64
|
+
try {
|
|
65
|
+
(0, testing_1.TerraformDestroy)(fullSynthResult, streamOutput);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error("Error during Terraform destroy:", error);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
it("check if this can be deployed", () => {
|
|
72
|
+
(0, testing_1.TerraformApplyAndCheckIdempotency)(fullSynthResult, streamOutput); // Set to true to stream output
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXp1cmVSZXNvdXJjZS5pbnRlZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlLWF6dXJlL3Rlc3QvQXp1cmVSZXNvdXJjZS5pbnRlZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVGQUFtRjtBQUNuRix1R0FBaUc7QUFDakcsaUdBQTRGO0FBQzVGLG1FQUF1RTtBQUN2RSwrRUFBMkU7QUFFM0UsaUNBQWdEO0FBRWhELDJDQUd1QjtBQUN2QixzREFBMkQ7QUFDM0QsZ0NBQXVDO0FBQ3ZDLDJDQUF5QztBQUV6QyxRQUFRLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxFQUFFO0lBQ3RELElBQUksS0FBcUIsQ0FBQztJQUMxQixJQUFJLGVBQW9CLENBQUM7SUFDekIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEtBQUssT0FBTyxDQUFDO0lBRTNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxNQUFNLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsS0FBSyxHQUFHLElBQUksc0JBQWMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBQSwrQkFBa0IsRUFBQyxFQUFFLENBQUMsQ0FBQztRQUUxQyxNQUFNLE9BQVEsU0FBUSxtQkFBYTtZQUlqQyxZQUNFLEtBQWdCLEVBQ2hCLElBQVksRUFDWixhQUE0QixFQUM1QixRQUFnQjtnQkFFaEIsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFbkIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLHNDQUFpQixDQUM3QyxJQUFJLEVBQ0osbUJBQW1CLEVBQ25CO29CQUNFLElBQUksRUFBRSxNQUFNLElBQUksTUFBTTtvQkFDdEIsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLElBQUk7b0JBQ3JDLFFBQVEsRUFBRSxRQUFRO29CQUNsQixHQUFHLEVBQUUsT0FBTztvQkFDWixZQUFZLEVBQUUsSUFBSTtpQkFDbkIsQ0FDRixDQUFDO2dCQUNGLElBQUksQ0FBQyxFQUFFLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztZQUNyQyxDQUFDO1NBQ0Y7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLG9EQUF1QixDQUM5QyxLQUFLLEVBQ0wscUJBQXFCLEVBQ3JCLEVBQUUsQ0FDSCxDQUFDO1FBRUYsSUFBSSwwQkFBZSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU3RCwwQkFBMEI7UUFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSw4QkFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUU7WUFDbkQsSUFBSSxFQUFFLE1BQU0sVUFBVSxFQUFFO1lBQ3hCLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztRQUVILE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxDQUNyQixLQUFLLEVBQ0wsR0FBRyxVQUFVLEVBQUUsRUFDZixhQUFhLEVBQ2IsYUFBYSxDQUFDLFFBQVEsQ0FDdkIsQ0FBQztRQUVGLG9CQUFvQjtRQUNwQixHQUFHLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDcEQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFFMUQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLCtDQUFxQixDQUNyRCxLQUFLLEVBQ0wsZUFBZSxFQUNmO1lBQ0UsUUFBUSxFQUFFLFFBQVE7WUFDbEIsSUFBSSxFQUFFLE1BQU0sVUFBVSxFQUFFO1lBQ3hCLGlCQUFpQixFQUFFLGFBQWEsQ0FBQyxJQUFJO1NBQ3RDLENBQ0YsQ0FBQztRQUVGLHFCQUFxQjtRQUNyQixHQUFHLENBQUMsZUFBZSxDQUFDO1lBQ2xCLElBQUksRUFBRSxjQUFjO1lBQ3BCLHVCQUF1QixFQUFFLHFCQUFxQixDQUFDLEVBQUU7WUFDakQsTUFBTSxFQUFFO2dCQUNOO29CQUNFLFFBQVEsRUFBRSxZQUFZO2lCQUN2QjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsZUFBZSxHQUFHLGVBQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7SUFDMUUsQ0FBQyxDQUFDLENBQUM7SUFFSCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsSUFBSTtZQUNGLElBQUEsMEJBQWdCLEVBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ2pEO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1FBQ3ZDLElBQUEsMkNBQWlDLEVBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsK0JBQStCO0lBQ25HLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250YWluZXJSZWdpc3RyeSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvY29udGFpbmVyLXJlZ2lzdHJ5XCI7XG5pbXBvcnQgeyBEYXRhQXp1cmVybUNsaWVudENvbmZpZyB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvZGF0YS1henVyZXJtLWNsaWVudC1jb25maWdcIjtcbmltcG9ydCB7IExvZ0FuYWx5dGljc1dvcmtzcGFjZSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvbG9nLWFuYWx5dGljcy13b3Jrc3BhY2VcIjtcbmltcG9ydCB7IEF6dXJlcm1Qcm92aWRlciB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvcHJvdmlkZXJcIjtcbmltcG9ydCB7IFJlc291cmNlR3JvdXAgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF6dXJlcm0vbGliL3Jlc291cmNlLWdyb3VwXCI7XG5cbmltcG9ydCB7IFRlc3RpbmcsIFRlcnJhZm9ybVN0YWNrIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgVGVycmFmb3JtQXBwbHlBbmRDaGVja0lkZW1wb3RlbmN5LFxuICBUZXJyYWZvcm1EZXN0cm95LFxufSBmcm9tIFwiLi4vLi4vdGVzdGluZ1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVSYW5kb21OYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWwvcmFuZG9tTmFtZVwiO1xuaW1wb3J0IHsgQXp1cmVSZXNvdXJjZSB9IGZyb20gXCIuLi9saWJcIjtcbmltcG9ydCBcImNka3RmL2xpYi90ZXN0aW5nL2FkYXB0ZXJzL2plc3RcIjtcblxuZGVzY3JpYmUoXCJFeGFtcGxlIG9mIGRlcGxveWluZyBhbiBBenVyZSBSZXNvdXJjZVwiLCAoKSA9PiB7XG4gIGxldCBzdGFjazogVGVycmFmb3JtU3RhY2s7XG4gIGxldCBmdWxsU3ludGhSZXN1bHQ6IGFueTtcbiAgY29uc3Qgc3RyZWFtT3V0cHV0ID0gcHJvY2Vzcy5lbnYuU1RSRUFNX09VVFBVVCAhPT0gXCJmYWxzZVwiO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGNvbnN0IGFwcCA9IFRlc3RpbmcuYXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgVGVycmFmb3JtU3RhY2soYXBwLCBcInRlc3RcIik7XG4gICAgY29uc3QgcmFuZG9tTmFtZSA9IGdlbmVyYXRlUmFuZG9tTmFtZSgxMik7XG5cbiAgICBjbGFzcyBUZXN0QUNSIGV4dGVuZHMgQXp1cmVSZXNvdXJjZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSByZXNvdXJjZUdyb3VwOiBSZXNvdXJjZUdyb3VwO1xuXG4gICAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICByZXNvdXJjZUdyb3VwOiBSZXNvdXJjZUdyb3VwLFxuICAgICAgICBsb2NhdGlvbjogc3RyaW5nLFxuICAgICAgKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBuYW1lKTtcblxuICAgICAgICBjb25zdCBjb250YWluZXJSZWdpc3RyeSA9IG5ldyBDb250YWluZXJSZWdpc3RyeShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIFwiY29udGFpbmVyUmVnaXN0cnlcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBgYWNyJHtuYW1lfTg4OThgLFxuICAgICAgICAgICAgcmVzb3VyY2VHcm91cE5hbWU6IHJlc291cmNlR3JvdXAubmFtZSxcbiAgICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgICAgIHNrdTogXCJCYXNpY1wiLFxuICAgICAgICAgICAgYWRtaW5FbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaWQgPSBjb250YWluZXJSZWdpc3RyeS5pZDtcbiAgICAgICAgdGhpcy5yZXNvdXJjZUdyb3VwID0gcmVzb3VyY2VHcm91cDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGllbnRDb25maWcgPSBuZXcgRGF0YUF6dXJlcm1DbGllbnRDb25maWcoXG4gICAgICBzdGFjayxcbiAgICAgIFwiQ3VycmVudENsaWVudENvbmZpZ1wiLFxuICAgICAge30sXG4gICAgKTtcblxuICAgIG5ldyBBenVyZXJtUHJvdmlkZXIoc3RhY2ssIFwiYXp1cmVGZWF0dXJlXCIsIHsgZmVhdHVyZXM6IHt9IH0pO1xuXG4gICAgLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZ3JvdXBcbiAgICBjb25zdCByZXNvdXJjZUdyb3VwID0gbmV3IFJlc291cmNlR3JvdXAoc3RhY2ssIFwicmdcIiwge1xuICAgICAgbmFtZTogYHJnLSR7cmFuZG9tTmFtZX1gLFxuICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBhY3IgPSBuZXcgVGVzdEFDUihcbiAgICAgIHN0YWNrLFxuICAgICAgYCR7cmFuZG9tTmFtZX1gLFxuICAgICAgcmVzb3VyY2VHcm91cCxcbiAgICAgIHJlc291cmNlR3JvdXAubG9jYXRpb24sXG4gICAgKTtcblxuICAgIC8vIFRlc3QgUkJBQyBNZXRob2RzXG4gICAgYWNyLmFkZEFjY2VzcyhjbGllbnRDb25maWcub2JqZWN0SWQsIFwiQ29udHJpYnV0b3JcIik7XG4gICAgYWNyLmFkZEFjY2VzcyhjbGllbnRDb25maWcub2JqZWN0SWQsIFwiTW9uaXRvcmluZyBSZWFkZXJcIik7XG5cbiAgICBjb25zdCBsb2dBbmFseXRpY3NXb3Jrc3BhY2UgPSBuZXcgTG9nQW5hbHl0aWNzV29ya3NwYWNlKFxuICAgICAgc3RhY2ssXG4gICAgICBcImxvZ19hbmFseXRpY3NcIixcbiAgICAgIHtcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIG5hbWU6IGBsYS0ke3JhbmRvbU5hbWV9YCxcbiAgICAgICAgcmVzb3VyY2VHcm91cE5hbWU6IHJlc291cmNlR3JvdXAubmFtZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIFRlc3QgRGlhZyBTZXR0aW5nc1xuICAgIGFjci5hZGREaWFnU2V0dGluZ3Moe1xuICAgICAgbmFtZTogXCJkaWFnc2V0dGluZ3NcIixcbiAgICAgIGxvZ0FuYWx5dGljc1dvcmtzcGFjZUlkOiBsb2dBbmFseXRpY3NXb3Jrc3BhY2UuaWQsXG4gICAgICBtZXRyaWM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNhdGVnb3J5OiBcIkFsbE1ldHJpY3NcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBmdWxsU3ludGhSZXN1bHQgPSBUZXN0aW5nLmZ1bGxTeW50aChzdGFjayk7IC8vIFNhdmUgdGhlIHJlc3VsdCBmb3IgcmV1c2VcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgVGVycmFmb3JtRGVzdHJveShmdWxsU3ludGhSZXN1bHQsIHN0cmVhbU91dHB1dCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBkdXJpbmcgVGVycmFmb3JtIGRlc3Ryb3k6XCIsIGVycm9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwiY2hlY2sgaWYgdGhpcyBjYW4gYmUgZGVwbG95ZWRcIiwgKCkgPT4ge1xuICAgIFRlcnJhZm9ybUFwcGx5QW5kQ2hlY2tJZGVtcG90ZW5jeShmdWxsU3ludGhSZXN1bHQsIHN0cmVhbU91dHB1dCk7IC8vIFNldCB0byB0cnVlIHRvIHN0cmVhbSBvdXRwdXRcbiAgfSk7XG59KTtcbiJdfQ==
|
package/lib/testing/index.d.ts
CHANGED
|
@@ -1,6 +1,40 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ExecSyncOptionsWithStringEncoding } from "child_process";
|
|
1
3
|
import { TerraformStack } from "cdktf";
|
|
2
4
|
import { Construct } from "constructs";
|
|
3
5
|
export declare class BaseTestStack extends TerraformStack {
|
|
4
6
|
readonly name: string;
|
|
5
7
|
constructor(scope: Construct, id: string);
|
|
6
8
|
}
|
|
9
|
+
export declare function execTerraformCommand(command: string, opts: ExecSyncOptionsWithStringEncoding, streamOutput: boolean): {
|
|
10
|
+
stdout: string;
|
|
11
|
+
stderr: string;
|
|
12
|
+
exitCode: number;
|
|
13
|
+
};
|
|
14
|
+
export declare function TerraformApply(stack: any, streamOutput?: boolean): {
|
|
15
|
+
stdout: string;
|
|
16
|
+
stderr: string;
|
|
17
|
+
error: any;
|
|
18
|
+
};
|
|
19
|
+
export declare function TerraformPlanExitCode(stack: any, streamOutput?: boolean): {
|
|
20
|
+
stdout: string;
|
|
21
|
+
stderr: string;
|
|
22
|
+
exitCode: number;
|
|
23
|
+
error: any;
|
|
24
|
+
};
|
|
25
|
+
export declare function TerraformIdempotentCheck(stack: any): AssertionReturn;
|
|
26
|
+
export declare function TerraformDestroy(stack: any, streamOutput?: boolean): AssertionReturn;
|
|
27
|
+
export declare function TerraformApplyAndCheckIdempotency(stack: any, streamOutput?: boolean): AssertionReturn;
|
|
28
|
+
export declare function TerraformApplyCheckAndDestroy(stack: any): void;
|
|
29
|
+
export declare function TerraformPlan(stack: any): AssertionReturn;
|
|
30
|
+
export declare class AssertionReturn {
|
|
31
|
+
readonly message: string;
|
|
32
|
+
readonly pass: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Create an AssertionReturn
|
|
35
|
+
* @param message - String message containing information about the result of the assertion
|
|
36
|
+
* @param pass - Boolean pass denoting the success of the assertion
|
|
37
|
+
*/
|
|
38
|
+
constructor(message: string, pass: boolean);
|
|
39
|
+
}
|
|
40
|
+
export declare function cleanupCdkTfOutDirs(): void;
|
package/lib/testing/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BaseTestStack = void 0;
|
|
3
|
+
exports.cleanupCdkTfOutDirs = exports.AssertionReturn = exports.TerraformPlan = exports.TerraformApplyCheckAndDestroy = exports.TerraformApplyAndCheckIdempotency = exports.TerraformDestroy = exports.TerraformIdempotentCheck = exports.TerraformPlanExitCode = exports.TerraformApply = exports.execTerraformCommand = exports.BaseTestStack = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const fs = require("fs");
|
|
6
|
+
const path = require("path");
|
|
4
7
|
const cdktf = require("cdktf");
|
|
5
8
|
const cdktf_1 = require("cdktf");
|
|
6
9
|
class BaseTestStack extends cdktf_1.TerraformStack {
|
|
@@ -15,4 +18,234 @@ class BaseTestStack extends cdktf_1.TerraformStack {
|
|
|
15
18
|
}
|
|
16
19
|
}
|
|
17
20
|
exports.BaseTestStack = BaseTestStack;
|
|
18
|
-
|
|
21
|
+
function execTerraformCommand(command, opts, streamOutput) {
|
|
22
|
+
try {
|
|
23
|
+
if (streamOutput) {
|
|
24
|
+
(0, child_process_1.execSync)(command, { ...opts, stdio: "inherit" });
|
|
25
|
+
return { stdout: "", stderr: "", exitCode: 0 };
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
const stdout = (0, child_process_1.execSync)(command, { ...opts, stdio: "pipe" }).toString();
|
|
29
|
+
return { stdout, stderr: "", exitCode: 0 };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
const stdout = error.stdout ? error.stdout.toString() : "";
|
|
34
|
+
const stderr = error.stderr ? error.stderr.toString() : "";
|
|
35
|
+
return { stdout, stderr, exitCode: error.status || 1 };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.execTerraformCommand = execTerraformCommand;
|
|
39
|
+
function TerraformApply(stack, streamOutput = false) {
|
|
40
|
+
try {
|
|
41
|
+
const manifest = JSON.parse(fs.readFileSync(path.resolve(stack, "manifest.json"), "utf8"));
|
|
42
|
+
const stacks = Object.entries(manifest.stacks);
|
|
43
|
+
for (const [, stackDetails] of stacks) {
|
|
44
|
+
const opts = {
|
|
45
|
+
cwd: path.resolve(stack, stackDetails.workingDirectory),
|
|
46
|
+
env: process.env,
|
|
47
|
+
encoding: "utf-8",
|
|
48
|
+
};
|
|
49
|
+
const initResult = execTerraformCommand(`terraform init`, opts, streamOutput);
|
|
50
|
+
if (initResult.exitCode !== 0)
|
|
51
|
+
throw new Error(`Terraform init failed: ${initResult.stdout} ${initResult.stderr}`);
|
|
52
|
+
const applyResult = execTerraformCommand(`terraform apply -auto-approve`, opts, streamOutput);
|
|
53
|
+
if (applyResult.exitCode !== 0) {
|
|
54
|
+
return {
|
|
55
|
+
stdout: applyResult.stdout,
|
|
56
|
+
stderr: applyResult.stderr,
|
|
57
|
+
error: new Error(`Terraform apply failed: ${applyResult.stdout} ${applyResult.stderr}`),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return { stdout: "Terraform apply succeeded", stderr: "", error: null };
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
console.error("Error during Terraform init or apply:", error);
|
|
65
|
+
return { stdout: "", stderr: "", error };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.TerraformApply = TerraformApply;
|
|
69
|
+
function TerraformPlanExitCode(stack, streamOutput = false) {
|
|
70
|
+
try {
|
|
71
|
+
const manifest = JSON.parse(fs.readFileSync(path.resolve(stack, "manifest.json"), "utf8"));
|
|
72
|
+
const stacks = Object.entries(manifest.stacks);
|
|
73
|
+
for (const [, stackDetails] of stacks) {
|
|
74
|
+
const opts = {
|
|
75
|
+
cwd: path.resolve(stack, stackDetails.workingDirectory),
|
|
76
|
+
env: process.env,
|
|
77
|
+
encoding: "utf-8",
|
|
78
|
+
};
|
|
79
|
+
const initResult = execTerraformCommand(`terraform init`, opts, streamOutput);
|
|
80
|
+
if (initResult.exitCode !== 0)
|
|
81
|
+
throw new Error(`Terraform init failed: ${initResult.stdout} ${initResult.stderr}`);
|
|
82
|
+
const planResult = execTerraformCommand(`terraform plan -input=false -lock=false -detailed-exitcode`, opts, streamOutput);
|
|
83
|
+
return {
|
|
84
|
+
stdout: planResult.stdout,
|
|
85
|
+
stderr: planResult.stderr,
|
|
86
|
+
exitCode: planResult.exitCode,
|
|
87
|
+
error: null,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
stdout: "Terraform plan succeeded",
|
|
92
|
+
stderr: "",
|
|
93
|
+
exitCode: 0,
|
|
94
|
+
error: null,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.error("Error during Terraform init or plan:", error);
|
|
99
|
+
return { stdout: "", stderr: "", exitCode: 1, error };
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.TerraformPlanExitCode = TerraformPlanExitCode;
|
|
103
|
+
function TerraformIdempotentCheck(stack) {
|
|
104
|
+
try {
|
|
105
|
+
const manifest = JSON.parse(fs.readFileSync(path.resolve(stack, "manifest.json"), "utf8"));
|
|
106
|
+
const stacks = Object.entries(manifest.stacks);
|
|
107
|
+
for (const [, stackDetails] of stacks) {
|
|
108
|
+
const opts = {
|
|
109
|
+
cwd: path.resolve(stack, stackDetails.workingDirectory),
|
|
110
|
+
env: process.env,
|
|
111
|
+
stdio: "pipe",
|
|
112
|
+
};
|
|
113
|
+
(0, child_process_1.execSync)(`terraform init`, opts);
|
|
114
|
+
let planOutput;
|
|
115
|
+
try {
|
|
116
|
+
planOutput = (0, child_process_1.execSync)(`terraform plan -input=false -detailed-exitcode`, opts).toString();
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
planOutput = error.stdout ? error.stdout.toString() : "";
|
|
120
|
+
}
|
|
121
|
+
if (planOutput.includes("No changes. Your infrastructure matches the configuration.")) {
|
|
122
|
+
return new AssertionReturn(`Expected subject to be idempotent with no changes`, true);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
throw new Error(`Plan resulted in changes:\n${planOutput}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return new AssertionReturn(`Expected subject to be idempotent with no changes`, true);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
console.error("Error during Terraform init or plan:", error);
|
|
132
|
+
throw error;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.TerraformIdempotentCheck = TerraformIdempotentCheck;
|
|
136
|
+
function TerraformDestroy(stack, streamOutput = false) {
|
|
137
|
+
try {
|
|
138
|
+
const manifest = JSON.parse(fs.readFileSync(path.resolve(stack, "manifest.json"), "utf8"));
|
|
139
|
+
const stacks = Object.entries(manifest.stacks);
|
|
140
|
+
for (const [, stackDetails] of stacks) {
|
|
141
|
+
const opts = {
|
|
142
|
+
cwd: path.resolve(stack, stackDetails.workingDirectory),
|
|
143
|
+
env: process.env,
|
|
144
|
+
encoding: "utf-8",
|
|
145
|
+
};
|
|
146
|
+
const initResult = execTerraformCommand(`terraform init`, opts, streamOutput);
|
|
147
|
+
if (initResult.exitCode !== 0)
|
|
148
|
+
throw new Error(`Terraform init failed: ${initResult.stdout} ${initResult.stderr}`);
|
|
149
|
+
const destroyResult = execTerraformCommand(`terraform destroy -auto-approve`, opts, streamOutput);
|
|
150
|
+
if (destroyResult.exitCode !== 0)
|
|
151
|
+
throw new Error(`Terraform destroy failed: ${destroyResult.stdout} ${destroyResult.stderr}`);
|
|
152
|
+
}
|
|
153
|
+
return new AssertionReturn(`Expected subject to destroy successfully`, true);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
console.error("Error during Terraform init or destroy:", error);
|
|
157
|
+
return new AssertionReturn(`Expected subject to destroy successfully`, false);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
exports.TerraformDestroy = TerraformDestroy;
|
|
161
|
+
function TerraformApplyAndCheckIdempotency(stack, streamOutput = false) {
|
|
162
|
+
const applyResult = TerraformApply(stack, streamOutput);
|
|
163
|
+
if (applyResult.error) {
|
|
164
|
+
return new AssertionReturn(applyResult.error.message, false);
|
|
165
|
+
}
|
|
166
|
+
const planResult = TerraformPlanExitCode(stack, streamOutput);
|
|
167
|
+
if (planResult.error) {
|
|
168
|
+
return new AssertionReturn(planResult.error.message, false);
|
|
169
|
+
}
|
|
170
|
+
if (planResult.exitCode !== 0) {
|
|
171
|
+
return new AssertionReturn(`Terraform configuration not idempotent:\n${planResult.stdout}`, false);
|
|
172
|
+
}
|
|
173
|
+
return new AssertionReturn(`Terraform apply and idempotency check completed successfully`, true);
|
|
174
|
+
}
|
|
175
|
+
exports.TerraformApplyAndCheckIdempotency = TerraformApplyAndCheckIdempotency;
|
|
176
|
+
function TerraformApplyCheckAndDestroy(stack) {
|
|
177
|
+
try {
|
|
178
|
+
const applyAndCheckResult = TerraformApplyAndCheckIdempotency(stack);
|
|
179
|
+
if (!applyAndCheckResult.pass) {
|
|
180
|
+
throw new Error(applyAndCheckResult.message);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
console.error("Error during Terraform apply and idempotency check:", error);
|
|
185
|
+
throw error; // Re-throw the error to ensure the test fails
|
|
186
|
+
}
|
|
187
|
+
finally {
|
|
188
|
+
try {
|
|
189
|
+
const destroyResult = TerraformDestroy(stack);
|
|
190
|
+
if (!destroyResult.pass) {
|
|
191
|
+
console.error("Error during Terraform destroy:", destroyResult.message);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch (destroyError) {
|
|
195
|
+
console.error("Error during Terraform destroy:", destroyError);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
exports.TerraformApplyCheckAndDestroy = TerraformApplyCheckAndDestroy;
|
|
200
|
+
function TerraformPlan(stack) {
|
|
201
|
+
try {
|
|
202
|
+
// Assuming the presence of a received variable pointing to the relevant directory
|
|
203
|
+
const manifest = JSON.parse(fs.readFileSync(path.resolve(stack, "manifest.json"), "utf8"));
|
|
204
|
+
const stacks = Object.entries(manifest.stacks);
|
|
205
|
+
stacks.forEach(([, stackDetails]) => {
|
|
206
|
+
const opts = {
|
|
207
|
+
cwd: path.resolve(stack, stackDetails.workingDirectory),
|
|
208
|
+
env: process.env,
|
|
209
|
+
stdio: "pipe",
|
|
210
|
+
};
|
|
211
|
+
(0, child_process_1.execSync)(`terraform init`, opts);
|
|
212
|
+
(0, child_process_1.execSync)(`terraform plan -input=false -lock=false`, opts);
|
|
213
|
+
});
|
|
214
|
+
return new AssertionReturn(`Expected subject not to plan successfully`, true);
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
console.error("Error during Terraform init or plan:", error);
|
|
218
|
+
throw error;
|
|
219
|
+
return new AssertionReturn("Expected subject to plan successfully, false", false);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
exports.TerraformPlan = TerraformPlan;
|
|
223
|
+
class AssertionReturn {
|
|
224
|
+
/**
|
|
225
|
+
* Create an AssertionReturn
|
|
226
|
+
* @param message - String message containing information about the result of the assertion
|
|
227
|
+
* @param pass - Boolean pass denoting the success of the assertion
|
|
228
|
+
*/
|
|
229
|
+
constructor(message, pass) {
|
|
230
|
+
this.message = message;
|
|
231
|
+
this.pass = pass;
|
|
232
|
+
if (!pass) {
|
|
233
|
+
throw new Error(message);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
exports.AssertionReturn = AssertionReturn;
|
|
238
|
+
// Define a cleanup function that can be exported and used in tests.
|
|
239
|
+
function cleanupCdkTfOutDirs() {
|
|
240
|
+
try {
|
|
241
|
+
(0, child_process_1.execSync)('find /tmp -name "cdktf.outdir.*" -type d -exec rm -rf {} +');
|
|
242
|
+
// console.log(
|
|
243
|
+
// "Cleanup of cdktf.outdir.* directories in /tmp was successful.",
|
|
244
|
+
// );
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
console.error("Error during cleanup:", error);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
exports.cleanupCdkTfOutDirs = cleanupCdkTfOutDirs;
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBNEU7QUFDNUUseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0IsaUNBQXVDO0FBR3ZDLE1BQWEsYUFBYyxTQUFRLHNCQUFjO0lBRy9DLFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUNyRCxJQUFJLEVBQUUsUUFBUTtZQUNkLE9BQU8sRUFBRSxNQUFNO1lBQ2YsV0FBVyxFQUFFLDZDQUE2QztTQUMzRCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBZEQsc0NBY0M7QUFFRCxTQUFnQixvQkFBb0IsQ0FDbEMsT0FBZSxFQUNmLElBQXVDLEVBQ3ZDLFlBQXFCO0lBRXJCLElBQUk7UUFDRixJQUFJLFlBQVksRUFBRTtZQUNoQixJQUFBLHdCQUFRLEVBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDaEQ7YUFBTTtZQUNMLE1BQU0sTUFBTSxHQUFHLElBQUEsd0JBQVEsRUFBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFF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QUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUMvQztBQUNILENBQUM7QUFURCxrREFTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNTeW5jLCBFeGVjU3luY09wdGlvbnNXaXRoU3RyaW5nRW5jb2RpbmcgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVN0YWNrIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5leHBvcnQgY2xhc3MgQmFzZVRlc3RTdGFjayBleHRlbmRzIFRlcnJhZm9ybVN0YWNrIHtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IG5hbWUgPSBuZXcgY2RrdGYuVGVycmFmb3JtVmFyaWFibGUodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZWZhdWx0OiBcInRlc3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlN5c3RlbSBuYW1lIHVzZWQgdG8gcmFuZG9taXplIHRoZSByZXNvdXJjZXNcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZSA9IG5hbWUudmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNUZXJyYWZvcm1Db21tYW5kKFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIG9wdHM6IEV4ZWNTeW5jT3B0aW9uc1dpdGhTdHJpbmdFbmNvZGluZyxcbiAgc3RyZWFtT3V0cHV0OiBib29sZWFuLFxuKTogeyBzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfSB7XG4gIHRyeSB7XG4gICAgaWYgKHN0cmVhbU91dHB1dCkge1xuICAgICAgZXhlY1N5bmMoY29tbWFuZCwgeyAuLi5vcHRzLCBzdGRpbzogXCJpbmhlcml0XCIgfSk7XG4gICAgICByZXR1cm4geyBzdGRvdXQ6IFwiXCIsIHN0ZGVycjogXCJcIiwgZXhpdENvZGU6IDAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3Rkb3V0ID0gZXhlY1N5bmMoY29tbWFuZCwgeyAuLi5vcHRzLCBzdGRpbzogXCJwaXBlXCIgfSkudG9TdHJpbmcoKTtcbiAgICAgIHJldHVybiB7IHN0ZG91dCwgc3RkZXJyOiBcIlwiLCBleGl0Q29kZTogMCB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGNvbnN0IHN0ZG91dCA9IGVycm9yLnN0ZG91dCA/IGVycm9yLnN0ZG91dC50b1N0cmluZygpIDogXCJcIjtcbiAgICBjb25zdCBzdGRlcnIgPSBlcnJvci5zdGRlcnIgPyBlcnJvci5zdGRlcnIudG9TdHJpbmcoKSA6IFwiXCI7XG4gICAgcmV0dXJuIHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiBlcnJvci5zdGF0dXMgfHwgMSB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUZXJyYWZvcm1BcHBseShcbiAgc3RhY2s6IGFueSxcbiAgc3RyZWFtT3V0cHV0OiBib29sZWFuID0gZmFsc2UsXG4pOiB7IHN0ZG91dDogc3RyaW5nOyBzdGRlcnI6IHN0cmluZzsgZXJyb3I6IGFueSB9IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKHN0YWNrLCBcIm1hbmlmZXN0Lmpzb25cIiksIFwidXRmOFwiKSxcbiAgICApO1xuICAgIGNvbnN0IHN0YWNrcyA9IE9iamVjdC5lbnRyaWVzKG1hbmlmZXN0LnN0YWNrcyk7XG5cbiAgICBmb3IgKGNvbnN0IFssIHN0YWNrRGV0YWlsc10gb2Ygc3RhY2tzKSB7XG4gICAgICBjb25zdCBvcHRzOiBFeGVjU3luY09wdGlvbnNXaXRoU3RyaW5nRW5jb2RpbmcgPSB7XG4gICAgICAgIGN3ZDogcGF0aC5yZXNvbHZlKHN0YWNrLCAoc3RhY2tEZXRhaWxzIGFzIGFueSkud29ya2luZ0RpcmVjdG9yeSksXG4gICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBpbml0UmVzdWx0ID0gZXhlY1RlcnJhZm9ybUNvbW1hbmQoXG4gICAgICAgIGB0ZXJyYWZvcm0gaW5pdGAsXG4gICAgICAgIG9wdHMsXG4gICAgICAgIHN0cmVhbU91dHB1dCxcbiAgICAgICk7XG4gICAgICBpZiAoaW5pdFJlc3VsdC5leGl0Q29kZSAhPT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUZXJyYWZvcm0gaW5pdCBmYWlsZWQ6ICR7aW5pdFJlc3VsdC5zdGRvdXR9ICR7aW5pdFJlc3VsdC5zdGRlcnJ9YCxcbiAgICAgICAgKTtcblxuICAgICAgY29uc3QgYXBwbHlSZXN1bHQgPSBleGVjVGVycmFmb3JtQ29tbWFuZChcbiAgICAgICAgYHRlcnJhZm9ybSBhcHBseSAtYXV0by1hcHByb3ZlYCxcbiAgICAgICAgb3B0cyxcbiAgICAgICAgc3RyZWFtT3V0cHV0LFxuICAgICAgKTtcbiAgICAgIGlmIChhcHBseVJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0ZG91dDogYXBwbHlSZXN1bHQuc3Rkb3V0LFxuICAgICAgICAgIHN0ZGVycjogYXBwbHlSZXN1bHQuc3RkZXJyLFxuICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVGVycmFmb3JtIGFwcGx5IGZhaWxlZDogJHthcHBseVJlc3VsdC5zdGRvdXR9ICR7YXBwbHlSZXN1bHQuc3RkZXJyfWAsXG4gICAgICAgICAgKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGRvdXQ6IFwiVGVycmFmb3JtIGFwcGx5IHN1Y2NlZWRlZFwiLCBzdGRlcnI6IFwiXCIsIGVycm9yOiBudWxsIH07XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZHVyaW5nIFRlcnJhZm9ybSBpbml0IG9yIGFwcGx5OlwiLCBlcnJvcik7XG4gICAgcmV0dXJuIHsgc3Rkb3V0OiBcIlwiLCBzdGRlcnI6IFwiXCIsIGVycm9yIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRlcnJhZm9ybVBsYW5FeGl0Q29kZShcbiAgc3RhY2s6IGFueSxcbiAgc3RyZWFtT3V0cHV0OiBib29sZWFuID0gZmFsc2UsXG4pOiB7IHN0ZG91dDogc3RyaW5nOyBzdGRlcnI6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlcjsgZXJyb3I6IGFueSB9IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKHN0YWNrLCBcIm1hbmlmZXN0Lmpzb25cIiksIFwidXRmOFwiKSxcbiAgICApO1xuICAgIGNvbnN0IHN0YWNrcyA9IE9iamVjdC5lbnRyaWVzKG1hbmlmZXN0LnN0YWNrcyk7XG5cbiAgICBmb3IgKGNvbnN0IFssIHN0YWNrRGV0YWlsc10gb2Ygc3RhY2tzKSB7XG4gICAgICBjb25zdCBvcHRzOiBFeGVjU3luY09wdGlvbnNXaXRoU3RyaW5nRW5jb2RpbmcgPSB7XG4gICAgICAgIGN3ZDogcGF0aC5yZXNvbHZlKHN0YWNrLCAoc3RhY2tEZXRhaWxzIGFzIGFueSkud29ya2luZ0RpcmVjdG9yeSksXG4gICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBpbml0UmVzdWx0ID0gZXhlY1RlcnJhZm9ybUNvbW1hbmQoXG4gICAgICAgIGB0ZXJyYWZvcm0gaW5pdGAsXG4gICAgICAgIG9wdHMsXG4gICAgICAgIHN0cmVhbU91dHB1dCxcbiAgICAgICk7XG4gICAgICBpZiAoaW5pdFJlc3VsdC5leGl0Q29kZSAhPT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUZXJyYWZvcm0gaW5pdCBmYWlsZWQ6ICR7aW5pdFJlc3VsdC5zdGRvdXR9ICR7aW5pdFJlc3VsdC5zdGRlcnJ9YCxcbiAgICAgICAgKTtcblxuICAgICAgY29uc3QgcGxhblJlc3VsdCA9IGV4ZWNUZXJyYWZvcm1Db21tYW5kKFxuICAgICAgICBgdGVycmFmb3JtIHBsYW4gLWlucHV0PWZhbHNlIC1sb2NrPWZhbHNlIC1kZXRhaWxlZC1leGl0Y29kZWAsXG4gICAgICAgIG9wdHMsXG4gICAgICAgIHN0cmVhbU91dHB1dCxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGRvdXQ6IHBsYW5SZXN1bHQuc3Rkb3V0LFxuICAgICAgICBzdGRlcnI6IHBsYW5SZXN1bHQuc3RkZXJyLFxuICAgICAgICBleGl0Q29kZTogcGxhblJlc3VsdC5leGl0Q29kZSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzdGRvdXQ6IFwiVGVycmFmb3JtIHBsYW4gc3VjY2VlZGVkXCIsXG4gICAgICBzdGRlcnI6IFwiXCIsXG4gICAgICBleGl0Q29kZTogMCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZHVyaW5nIFRlcnJhZm9ybSBpbml0IG9yIHBsYW46XCIsIGVycm9yKTtcbiAgICByZXR1cm4geyBzdGRvdXQ6IFwiXCIsIHN0ZGVycjogXCJcIiwgZXhpdENvZGU6IDEsIGVycm9yIH07XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBUZXJyYWZvcm1JZGVtcG90ZW50Q2hlY2soc3RhY2s6IGFueSk6IEFzc2VydGlvblJldHVybiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgICAgZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZShzdGFjaywgXCJtYW5pZmVzdC5qc29uXCIpLCBcInV0ZjhcIiksXG4gICAgKTtcbiAgICBjb25zdCBzdGFja3MgPSBPYmplY3QuZW50cmllcyhtYW5pZmVzdC5zdGFja3MpO1xuXG4gICAgZm9yIChjb25zdCBbLCBzdGFja0RldGFpbHNdIG9mIHN0YWNrcykge1xuICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgY3dkOiBwYXRoLnJlc29sdmUoc3RhY2ssIChzdGFja0RldGFpbHMgYXMgYW55KS53b3JraW5nRGlyZWN0b3J5KSxcbiAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgc3RkaW86IFwicGlwZVwiLFxuICAgICAgfSBhcyBhbnk7XG5cbiAgICAgIGV4ZWNTeW5jKGB0ZXJyYWZvcm0gaW5pdGAsIG9wdHMpO1xuXG4gICAgICBsZXQgcGxhbk91dHB1dDogc3RyaW5nO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGxhbk91dHB1dCA9IGV4ZWNTeW5jKFxuICAgICAgICAgIGB0ZXJyYWZvcm0gcGxhbiAtaW5wdXQ9ZmFsc2UgLWRldGFpbGVkLWV4aXRjb2RlYCxcbiAgICAgICAgICBvcHRzLFxuICAgICAgICApLnRvU3RyaW5nKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHBsYW5PdXRwdXQgPSBlcnJvci5zdGRvdXQgPyBlcnJvci5zdGRvdXQudG9TdHJpbmcoKSA6IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgcGxhbk91dHB1dC5pbmNsdWRlcyhcbiAgICAgICAgICBcIk5vIGNoYW5nZXMuIFlvdXIgaW5mcmFzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgY29uZmlndXJhdGlvbi5cIixcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uUmV0dXJuKFxuICAgICAgICAgIGBFeHBlY3RlZCBzdWJqZWN0IHRvIGJlIGlkZW1wb3RlbnQgd2l0aCBubyBjaGFuZ2VzYCxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbGFuIHJlc3VsdGVkIGluIGNoYW5nZXM6XFxuJHtwbGFuT3V0cHV0fWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uUmV0dXJuKFxuICAgICAgYEV4cGVjdGVkIHN1YmplY3QgdG8gYmUgaWRlbXBvdGVudCB3aXRoIG5vIGNoYW5nZXNgLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBkdXJpbmcgVGVycmFmb3JtIGluaXQgb3IgcGxhbjpcIiwgZXJyb3IpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUZXJyYWZvcm1EZXN0cm95KFxuICBzdGFjazogYW55LFxuICBzdHJlYW1PdXRwdXQ6IGJvb2xlYW4gPSBmYWxzZSxcbik6IEFzc2VydGlvblJldHVybiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgICAgZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZShzdGFjaywgXCJtYW5pZmVzdC5qc29uXCIpLCBcInV0ZjhcIiksXG4gICAgKTtcbiAgICBjb25zdCBzdGFja3MgPSBPYmplY3QuZW50cmllcyhtYW5pZmVzdC5zdGFja3MpO1xuXG4gICAgZm9yIChjb25zdCBbLCBzdGFja0RldGFpbHNdIG9mIHN0YWNrcykge1xuICAgICAgY29uc3Qgb3B0czogRXhlY1N5bmNPcHRpb25zV2l0aFN0cmluZ0VuY29kaW5nID0ge1xuICAgICAgICBjd2Q6IHBhdGgucmVzb2x2ZShzdGFjaywgKHN0YWNrRGV0YWlscyBhcyBhbnkpLndvcmtpbmdEaXJlY3RvcnkpLFxuICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IGV4ZWNUZXJyYWZvcm1Db21tYW5kKFxuICAgICAgICBgdGVycmFmb3JtIGluaXRgLFxuICAgICAgICBvcHRzLFxuICAgICAgICBzdHJlYW1PdXRwdXQsXG4gICAgICApO1xuICAgICAgaWYgKGluaXRSZXN1bHQuZXhpdENvZGUgIT09IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGVycmFmb3JtIGluaXQgZmFpbGVkOiAke2luaXRSZXN1bHQuc3Rkb3V0fSAke2luaXRSZXN1bHQuc3RkZXJyfWAsXG4gICAgICAgICk7XG5cbiAgICAgIGNvbnN0IGRlc3Ryb3lSZXN1bHQgPSBleGVjVGVycmFmb3JtQ29tbWFuZChcbiAgICAgICAgYHRlcnJhZm9ybSBkZXN0cm95IC1hdXRvLWFwcHJvdmVgLFxuICAgICAgICBvcHRzLFxuICAgICAgICBzdHJlYW1PdXRwdXQsXG4gICAgICApO1xuICAgICAgaWYgKGRlc3Ryb3lSZXN1bHQuZXhpdENvZGUgIT09IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGVycmFmb3JtIGRlc3Ryb3kgZmFpbGVkOiAke2Rlc3Ryb3lSZXN1bHQuc3Rkb3V0fSAke2Rlc3Ryb3lSZXN1bHQuc3RkZXJyfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBBc3NlcnRpb25SZXR1cm4oXG4gICAgICBgRXhwZWN0ZWQgc3ViamVjdCB0byBkZXN0cm95IHN1Y2Nlc3NmdWxseWAsXG4gICAgICB0cnVlLFxuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZHVyaW5nIFRlcnJhZm9ybSBpbml0IG9yIGRlc3Ryb3k6XCIsIGVycm9yKTtcbiAgICByZXR1cm4gbmV3IEFzc2VydGlvblJldHVybihcbiAgICAgIGBFeHBlY3RlZCBzdWJqZWN0IHRvIGRlc3Ryb3kgc3VjY2Vzc2Z1bGx5YCxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRlcnJhZm9ybUFwcGx5QW5kQ2hlY2tJZGVtcG90ZW5jeShcbiAgc3RhY2s6IGFueSxcbiAgc3RyZWFtT3V0cHV0OiBib29sZWFuID0gZmFsc2UsXG4pOiBBc3NlcnRpb25SZXR1cm4ge1xuICBjb25zdCBhcHBseVJlc3VsdCA9IFRlcnJhZm9ybUFwcGx5KHN0YWNrLCBzdHJlYW1PdXRwdXQpO1xuICBpZiAoYXBwbHlSZXN1bHQuZXJyb3IpIHtcbiAgICByZXR1cm4gbmV3IEFzc2VydGlvblJldHVybihhcHBseVJlc3VsdC5lcnJvci5tZXNzYWdlLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBwbGFuUmVzdWx0ID0gVGVycmFmb3JtUGxhbkV4aXRDb2RlKHN0YWNrLCBzdHJlYW1PdXRwdXQpO1xuICBpZiAocGxhblJlc3VsdC5lcnJvcikge1xuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uUmV0dXJuKHBsYW5SZXN1bHQuZXJyb3IubWVzc2FnZSwgZmFsc2UpO1xuICB9XG5cbiAgaWYgKHBsYW5SZXN1bHQuZXhpdENvZGUgIT09IDApIHtcbiAgICByZXR1cm4gbmV3IEFzc2VydGlvblJldHVybihcbiAgICAgIGBUZXJyYWZvcm0gY29uZmlndXJhdGlvbiBub3QgaWRlbXBvdGVudDpcXG4ke3BsYW5SZXN1bHQuc3Rkb3V0fWAsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb25SZXR1cm4oXG4gICAgYFRlcnJhZm9ybSBhcHBseSBhbmQgaWRlbXBvdGVuY3kgY2hlY2sgY29tcGxldGVkIHN1Y2Nlc3NmdWxseWAsXG4gICAgdHJ1ZSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRlcnJhZm9ybUFwcGx5Q2hlY2tBbmREZXN0cm95KHN0YWNrOiBhbnkpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBhcHBseUFuZENoZWNrUmVzdWx0ID0gVGVycmFmb3JtQXBwbHlBbmRDaGVja0lkZW1wb3RlbmN5KHN0YWNrKTtcbiAgICBpZiAoIWFwcGx5QW5kQ2hlY2tSZXN1bHQucGFzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGFwcGx5QW5kQ2hlY2tSZXN1bHQubWVzc2FnZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBkdXJpbmcgVGVycmFmb3JtIGFwcGx5IGFuZCBpZGVtcG90ZW5jeSBjaGVjazpcIiwgZXJyb3IpO1xuICAgIHRocm93IGVycm9yOyAvLyBSZS10aHJvdyB0aGUgZXJyb3IgdG8gZW5zdXJlIHRoZSB0ZXN0IGZhaWxzXG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlc3Ryb3lSZXN1bHQgPSBUZXJyYWZvcm1EZXN0cm95KHN0YWNrKTtcbiAgICAgIGlmICghZGVzdHJveVJlc3VsdC5wYXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBkdXJpbmcgVGVycmFmb3JtIGRlc3Ryb3k6XCIsIGRlc3Ryb3lSZXN1bHQubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZGVzdHJveUVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZHVyaW5nIFRlcnJhZm9ybSBkZXN0cm95OlwiLCBkZXN0cm95RXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gVGVycmFmb3JtUGxhbihzdGFjazogYW55KTogQXNzZXJ0aW9uUmV0dXJuIHtcbiAgdHJ5IHtcbiAgICAvLyBBc3N1bWluZyB0aGUgcHJlc2VuY2Ugb2YgYSByZWNlaXZlZCB2YXJpYWJsZSBwb2ludGluZyB0byB0aGUgcmVsZXZhbnQgZGlyZWN0b3J5XG4gICAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgICAgZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZShzdGFjaywgXCJtYW5pZmVzdC5qc29uXCIpLCBcInV0ZjhcIiksXG4gICAgKTtcbiAgICBjb25zdCBzdGFja3MgPSBPYmplY3QuZW50cmllcyhtYW5pZmVzdC5zdGFja3MpO1xuICAgIHN0YWNrcy5mb3JFYWNoKChbLCBzdGFja0RldGFpbHNdKSA9PiB7XG4gICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICBjd2Q6IHBhdGgucmVzb2x2ZShzdGFjaywgKHN0YWNrRGV0YWlscyBhcyBhbnkpLndvcmtpbmdEaXJlY3RvcnkpLFxuICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICBzdGRpbzogXCJwaXBlXCIsXG4gICAgICB9IGFzIGFueTtcbiAgICAgIGV4ZWNTeW5jKGB0ZXJyYWZvcm0gaW5pdGAsIG9wdHMpO1xuICAgICAgZXhlY1N5bmMoYHRlcnJhZm9ybSBwbGFuIC1pbnB1dD1mYWxzZSAtbG9jaz1mYWxzZWAsIG9wdHMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBBc3NlcnRpb25SZXR1cm4oXG4gICAgICBgRXhwZWN0ZWQgc3ViamVjdCBub3QgdG8gcGxhbiBzdWNjZXNzZnVsbHlgLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBkdXJpbmcgVGVycmFmb3JtIGluaXQgb3IgcGxhbjpcIiwgZXJyb3IpO1xuICAgIHRocm93IGVycm9yO1xuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uUmV0dXJuKFxuICAgICAgXCJFeHBlY3RlZCBzdWJqZWN0IHRvIHBsYW4gc3VjY2Vzc2Z1bGx5LCBmYWxzZVwiLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXNzZXJ0aW9uUmV0dXJuIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBBc3NlcnRpb25SZXR1cm5cbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBTdHJpbmcgbWVzc2FnZSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXN1bHQgb2YgdGhlIGFzc2VydGlvblxuICAgKiBAcGFyYW0gcGFzcyAtIEJvb2xlYW4gcGFzcyBkZW5vdGluZyB0aGUgc3VjY2VzcyBvZiB0aGUgYXNzZXJ0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBwYXNzOiBib29sZWFuLFxuICApIHtcbiAgICBpZiAoIXBhc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gRGVmaW5lIGEgY2xlYW51cCBmdW5jdGlvbiB0aGF0IGNhbiBiZSBleHBvcnRlZCBhbmQgdXNlZCBpbiB0ZXN0cy5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbnVwQ2RrVGZPdXREaXJzKCkge1xuICB0cnkge1xuICAgIGV4ZWNTeW5jKCdmaW5kIC90bXAgLW5hbWUgXCJjZGt0Zi5vdXRkaXIuKlwiIC10eXBlIGQgLWV4ZWMgcm0gLXJmIHt9ICsnKTtcbiAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAvLyAgIFwiQ2xlYW51cCBvZiBjZGt0Zi5vdXRkaXIuKiBkaXJlY3RvcmllcyBpbiAvdG1wIHdhcyBzdWNjZXNzZnVsLlwiLFxuICAgIC8vICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIGR1cmluZyBjbGVhbnVwOlwiLCBlcnJvcik7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -17,18 +17,23 @@
|
|
|
17
17
|
"eslint": "npx projen eslint",
|
|
18
18
|
"package": "npx projen package",
|
|
19
19
|
"package-all": "npx projen package-all",
|
|
20
|
+
"package:dotnet": "npx projen package:dotnet",
|
|
21
|
+
"package:java": "npx projen package:java",
|
|
20
22
|
"package:js": "npx projen package:js",
|
|
23
|
+
"package:python": "npx projen package:python",
|
|
21
24
|
"post-compile": "npx projen post-compile",
|
|
22
25
|
"post-upgrade": "npx projen post-upgrade",
|
|
23
26
|
"pre-compile": "npx projen pre-compile",
|
|
24
27
|
"release": "npx projen release",
|
|
25
|
-
"test": "
|
|
28
|
+
"test": "jest --testMatch '**/*.spec.ts'",
|
|
26
29
|
"test:update": "npx projen test:update",
|
|
27
30
|
"test:watch": "npx projen test:watch",
|
|
28
31
|
"unbump": "npx projen unbump",
|
|
29
32
|
"upgrade": "npx projen upgrade",
|
|
30
33
|
"watch": "npx projen watch",
|
|
31
34
|
"projen": "npx projen",
|
|
35
|
+
"integration": "STREAM_OUTPUT=true jest --testMatch '**/*.integ.ts'",
|
|
36
|
+
"integration:nostream": "STREAM_OUTPUT=false jest --maxWorkers=12 --testMatch '**/*.integ.ts'",
|
|
32
37
|
"generate-index": "node ./scripts/generate-index.js"
|
|
33
38
|
},
|
|
34
39
|
"author": {
|
|
@@ -38,7 +43,7 @@
|
|
|
38
43
|
},
|
|
39
44
|
"devDependencies": {
|
|
40
45
|
"@cdktf/provider-azurerm": "9.0.8",
|
|
41
|
-
"@types/jest": "^29.5.
|
|
46
|
+
"@types/jest": "^29.5.12",
|
|
42
47
|
"@types/moment": "^2.13.0",
|
|
43
48
|
"@types/node": "^20",
|
|
44
49
|
"@typescript-eslint/eslint-plugin": "^6",
|
|
@@ -53,14 +58,14 @@
|
|
|
53
58
|
"jest": "^29.7.0",
|
|
54
59
|
"jest-junit": "^15",
|
|
55
60
|
"jsii": "~5.2.0",
|
|
56
|
-
"jsii-diff": "^1.
|
|
57
|
-
"jsii-docgen": "^10.
|
|
58
|
-
"jsii-pacmak": "^1.
|
|
61
|
+
"jsii-diff": "^1.98.0",
|
|
62
|
+
"jsii-docgen": "^10.4.9",
|
|
63
|
+
"jsii-pacmak": "^1.98.0",
|
|
59
64
|
"jsii-rosetta": "~5.2.0",
|
|
60
|
-
"prettier": "^3.2.
|
|
61
|
-
"projen": "^0.
|
|
65
|
+
"prettier": "^3.2.5",
|
|
66
|
+
"projen": "^0.81.15",
|
|
62
67
|
"standard-version": "^9",
|
|
63
|
-
"ts-jest": "^29.1.
|
|
68
|
+
"ts-jest": "^29.1.3",
|
|
64
69
|
"ts-node": "^10.9.2",
|
|
65
70
|
"typescript": "~5.2.0"
|
|
66
71
|
},
|
|
@@ -98,11 +103,11 @@
|
|
|
98
103
|
"publishConfig": {
|
|
99
104
|
"access": "public"
|
|
100
105
|
},
|
|
101
|
-
"version": "0.0.3-pre.
|
|
106
|
+
"version": "0.0.3-pre.12",
|
|
102
107
|
"jest": {
|
|
103
108
|
"testMatch": [
|
|
104
109
|
"<rootDir>/src/**/__tests__/**/*.ts?(x)",
|
|
105
|
-
"<rootDir
|
|
110
|
+
"<rootDir>/@(|src)/**/*(*.)@(spec|test|integ).ts?(x)"
|
|
106
111
|
],
|
|
107
112
|
"clearMocks": true,
|
|
108
113
|
"collectCoverage": true,
|
|
@@ -150,7 +155,23 @@
|
|
|
150
155
|
"stability": "stable",
|
|
151
156
|
"jsii": {
|
|
152
157
|
"outdir": "dist",
|
|
153
|
-
"targets": {
|
|
158
|
+
"targets": {
|
|
159
|
+
"java": {
|
|
160
|
+
"package": "com.microsoft.terraformcdkconstructs",
|
|
161
|
+
"maven": {
|
|
162
|
+
"groupId": "com.microsoft.terraformcdkconstructs",
|
|
163
|
+
"artifactId": "cdktf-azure-constructs"
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
"python": {
|
|
167
|
+
"distName": "microsoft-cdktfconstructs",
|
|
168
|
+
"module": "microsoft_cdktfconstructs"
|
|
169
|
+
},
|
|
170
|
+
"dotnet": {
|
|
171
|
+
"namespace": "Microsoft.Cdktf.Azure.TFConstructs",
|
|
172
|
+
"packageId": "Microsoft.Cdktf.Azure.TFConstructs"
|
|
173
|
+
}
|
|
174
|
+
},
|
|
154
175
|
"tsc": {
|
|
155
176
|
"outDir": "lib",
|
|
156
177
|
"rootDir": "src"
|
package/cdktf.out/manifest.json
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": "0.17.3",
|
|
3
|
-
"stacks": {
|
|
4
|
-
"testExampleAzureResource": {
|
|
5
|
-
"name": "testExampleAzureResource",
|
|
6
|
-
"constructPath": "testExampleAzureResource",
|
|
7
|
-
"workingDirectory": "stacks/testExampleAzureResource",
|
|
8
|
-
"synthesizedStackPath": "stacks/testExampleAzureResource/cdk.tf.json",
|
|
9
|
-
"annotations": [],
|
|
10
|
-
"dependencies": []
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
}
|