@gradientedge/cdk-utils 9.43.0 → 9.43.2
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/dist/src/lib/azure/common/stack.d.ts +5 -0
- package/dist/src/lib/azure/common/stack.js +5 -0
- package/dist/src/lib/azure/services/api-management/main.js +7 -7
- package/dist/src/lib/azure/services/api-management/types.d.ts +1 -0
- package/dist/src/lib/azure/services/app-configuration/main.js +1 -1
- package/dist/src/lib/azure/services/app-service/main.js +1 -1
- package/dist/src/lib/azure/services/application-insights/main.js +1 -1
- package/dist/src/lib/azure/services/cosmosdb/main.js +3 -3
- package/dist/src/lib/azure/services/dns/main.js +3 -3
- package/dist/src/lib/azure/services/eventgrid/main.js +3 -3
- package/dist/src/lib/azure/services/function/main.js +3 -3
- package/dist/src/lib/azure/services/key-vault/main.js +1 -1
- package/dist/src/lib/azure/services/log-analytics-workspace/main.js +1 -1
- package/dist/src/lib/azure/services/resource-group/main.js +1 -1
- package/dist/src/lib/azure/services/servicebus/main.js +4 -4
- package/dist/src/lib/azure/services/storage/main.js +6 -3
- package/package.json +1 -1
- package/src/lib/azure/common/stack.ts +5 -0
- package/src/lib/azure/services/api-management/main.ts +7 -7
- package/src/lib/azure/services/api-management/types.ts +3 -1
- package/src/lib/azure/services/app-configuration/main.ts +1 -1
- package/src/lib/azure/services/app-service/main.ts +1 -1
- package/src/lib/azure/services/application-insights/main.ts +1 -1
- package/src/lib/azure/services/cosmosdb/main.ts +3 -3
- package/src/lib/azure/services/dns/main.ts +3 -3
- package/src/lib/azure/services/eventgrid/main.ts +3 -3
- package/src/lib/azure/services/function/main.ts +3 -3
- package/src/lib/azure/services/key-vault/main.ts +1 -1
- package/src/lib/azure/services/log-analytics-workspace/main.ts +1 -1
- package/src/lib/azure/services/resource-group/main.ts +1 -1
- package/src/lib/azure/services/servicebus/main.ts +4 -4
- package/src/lib/azure/services/storage/main.ts +6 -3
|
@@ -30,6 +30,11 @@ export declare class CommonAzureStack extends TerraformStack {
|
|
|
30
30
|
location: any;
|
|
31
31
|
name: any;
|
|
32
32
|
resourceGroupName: any;
|
|
33
|
+
globalPrefix: any;
|
|
34
|
+
globalSuffix: any;
|
|
35
|
+
resourceNameOptions: any;
|
|
36
|
+
resourcePrefix: any;
|
|
37
|
+
resourceSuffix: any;
|
|
33
38
|
skipStageForARecords: any;
|
|
34
39
|
stage: any;
|
|
35
40
|
subDomain: any;
|
|
@@ -46,6 +46,11 @@ class CommonAzureStack extends cdktf_1.TerraformStack {
|
|
|
46
46
|
location: this.node.tryGetContext('location'),
|
|
47
47
|
name: this.node.tryGetContext('resourceGroupName'),
|
|
48
48
|
resourceGroupName: this.node.tryGetContext('resourceGroupName'),
|
|
49
|
+
globalPrefix: this.node.tryGetContext('globalPrefix'),
|
|
50
|
+
globalSuffix: this.node.tryGetContext('globalSuffix'),
|
|
51
|
+
resourceNameOptions: this.node.tryGetContext('resourceNameOptions'),
|
|
52
|
+
resourcePrefix: this.node.tryGetContext('resourcePrefix'),
|
|
53
|
+
resourceSuffix: this.node.tryGetContext('resourceSuffix'),
|
|
49
54
|
skipStageForARecords: this.node.tryGetContext('skipStageForARecords'),
|
|
50
55
|
stage: this.node.tryGetContext('stage'),
|
|
51
56
|
subDomain: this.node.tryGetContext('subDomain'),
|
|
@@ -52,7 +52,7 @@ class AzureApiManagementManager {
|
|
|
52
52
|
throw `Resource group undefined for ${id}`;
|
|
53
53
|
const apiManagement = new api_management_1.ApiManagement(scope, `${id}-am`, {
|
|
54
54
|
...props,
|
|
55
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
55
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.apiManagement),
|
|
56
56
|
resourceGroupName: resourceGroup.name,
|
|
57
57
|
tags: props.tags ?? {
|
|
58
58
|
environment: scope.props.stage,
|
|
@@ -60,7 +60,7 @@ class AzureApiManagementManager {
|
|
|
60
60
|
});
|
|
61
61
|
if (applicationInsightsKey) {
|
|
62
62
|
new api_management_logger_1.ApiManagementLogger(scope, `${id}-am-logger`, {
|
|
63
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
63
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.apiManagementLogger),
|
|
64
64
|
resourceGroupName: resourceGroup.name,
|
|
65
65
|
apiManagementName: apiManagement.name,
|
|
66
66
|
applicationInsights: {
|
|
@@ -92,7 +92,7 @@ class AzureApiManagementManager {
|
|
|
92
92
|
throw `Resource group undefined for ${id}`;
|
|
93
93
|
const apiManagement = new data_azurerm_api_management_1.DataAzurermApiManagement(scope, `${id}-am`, {
|
|
94
94
|
...props,
|
|
95
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
95
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.dataAzurermApiManagement),
|
|
96
96
|
resourceGroupName: scope.props.resourceGroupName
|
|
97
97
|
? `${scope.props.resourceGroupName}-${scope.props.stage}`
|
|
98
98
|
: `${props.resourceGroupName}`,
|
|
@@ -118,7 +118,7 @@ class AzureApiManagementManager {
|
|
|
118
118
|
throw `Resource group undefined for ${id}`;
|
|
119
119
|
const apiManagement = new resource_1.Resource(scope, `${id}-am`, {
|
|
120
120
|
type: 'Microsoft.ApiManagement/service@2024-05-01',
|
|
121
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
121
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.apiManagement),
|
|
122
122
|
location: resourceGroup.location,
|
|
123
123
|
parentId: resourceGroup.id,
|
|
124
124
|
body: {
|
|
@@ -146,7 +146,7 @@ class AzureApiManagementManager {
|
|
|
146
146
|
});
|
|
147
147
|
if (applicationInsightsKey) {
|
|
148
148
|
new api_management_logger_1.ApiManagementLogger(scope, `${id}-am-logger`, {
|
|
149
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
149
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.apiManagementLogger),
|
|
150
150
|
resourceGroupName: resourceGroup.name,
|
|
151
151
|
apiManagementName: apiManagement.name,
|
|
152
152
|
applicationInsights: {
|
|
@@ -171,7 +171,7 @@ class AzureApiManagementManager {
|
|
|
171
171
|
throw `Props undefined for ${id}`;
|
|
172
172
|
const apiManagementBackend = new api_management_backend_1.ApiManagementBackend(scope, `${id}-am-be`, {
|
|
173
173
|
...props,
|
|
174
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
174
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.apiManagementBackend),
|
|
175
175
|
description: props.description || `Backend for ${props.name}-${scope.props.stage}`,
|
|
176
176
|
protocol: props.protocol || 'http',
|
|
177
177
|
});
|
|
@@ -192,7 +192,7 @@ class AzureApiManagementManager {
|
|
|
192
192
|
throw `Props undefined for ${id}`;
|
|
193
193
|
const apiManagementApi = new api_management_api_1.ApiManagementApi(scope, `${id}-am-api`, {
|
|
194
194
|
...props,
|
|
195
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
195
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.apiManagementApi),
|
|
196
196
|
displayName: props.displayName || props.name,
|
|
197
197
|
revision: props.revision || '1',
|
|
198
198
|
protocols: props.protocols || ['https'],
|
|
@@ -6,6 +6,7 @@ import { ApiManagementApiOperationPolicyConfig } from '@cdktf/provider-azurerm/l
|
|
|
6
6
|
export interface ApiManagementProps extends ApiManagementConfig {
|
|
7
7
|
}
|
|
8
8
|
export interface ApiManagementBackendProps extends ApiManagementBackendConfig {
|
|
9
|
+
backendUrlPath?: string;
|
|
9
10
|
}
|
|
10
11
|
export interface ApiManagementApiProps extends ApiManagementApiConfig {
|
|
11
12
|
operations: ApiManagementApiOperationConfig[];
|
|
@@ -41,7 +41,7 @@ class AzureAppConfigurationManager {
|
|
|
41
41
|
throw `Resource group undefined for ${id}`;
|
|
42
42
|
const appConfiguration = new app_configuration_1.AppConfiguration(scope, `${id}-ac`, {
|
|
43
43
|
...props,
|
|
44
|
-
name:
|
|
44
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.appConfiguration),
|
|
45
45
|
resourceGroupName: resourceGroup.name,
|
|
46
46
|
tags: props.tags ?? {
|
|
47
47
|
environment: scope.props.stage,
|
|
@@ -41,7 +41,7 @@ class AzureAppServiceManager {
|
|
|
41
41
|
throw `Resource group undefined for ${id}`;
|
|
42
42
|
const appServicePlan = new service_plan_1.ServicePlan(scope, `${id}-as`, {
|
|
43
43
|
...props,
|
|
44
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
44
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.appServicePlan),
|
|
45
45
|
resourceGroupName: resourceGroup.name,
|
|
46
46
|
tags: props.tags ?? {
|
|
47
47
|
environment: scope.props.stage,
|
|
@@ -41,7 +41,7 @@ class AzureApplicationInsightsManager {
|
|
|
41
41
|
throw `Resource group undefined for ${id}`;
|
|
42
42
|
const applicationInsights = new application_insights_1.ApplicationInsights(scope, `${id}-ai`, {
|
|
43
43
|
...props,
|
|
44
|
-
name:
|
|
44
|
+
name: scope.resourceNameFormatter.format(props.name ?? '', scope.props.resourceNameOptions?.applicationInsights),
|
|
45
45
|
resourceGroupName: resourceGroup.name,
|
|
46
46
|
applicationType: props.applicationType || 'web',
|
|
47
47
|
tags: props.tags ?? {
|
|
@@ -43,7 +43,7 @@ class AzureCosmosDbManager {
|
|
|
43
43
|
throw `Resource group undefined for ${id}`;
|
|
44
44
|
const cosmosdbAccount = new cosmosdb_account_1.CosmosdbAccount(scope, `${id}-ca`, {
|
|
45
45
|
...props,
|
|
46
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
46
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.cosmosDbAccount),
|
|
47
47
|
location: resourceGroup.location,
|
|
48
48
|
resourceGroupName: resourceGroup.name,
|
|
49
49
|
tags: props.tags ?? {
|
|
@@ -74,7 +74,7 @@ class AzureCosmosDbManager {
|
|
|
74
74
|
throw `Resource group undefined for ${id}`;
|
|
75
75
|
const cosmosdbDatatbase = new cosmosdb_sql_database_1.CosmosdbSqlDatabase(scope, `${id}-cd`, {
|
|
76
76
|
...props,
|
|
77
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
77
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.cosmosDbSqlDatabase),
|
|
78
78
|
resourceGroupName: resourceGroup.name,
|
|
79
79
|
});
|
|
80
80
|
(0, utils_1.createAzureTfOutput)(`${id}-cosmosdbDatatbasetName`, scope, cosmosdbDatatbase.name);
|
|
@@ -101,7 +101,7 @@ class AzureCosmosDbManager {
|
|
|
101
101
|
throw `Resource group undefined for ${id}`;
|
|
102
102
|
const cosmosdbContainer = new cosmosdb_sql_container_1.CosmosdbSqlContainer(scope, `${id}-cc`, {
|
|
103
103
|
...props,
|
|
104
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
104
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.cosmosDbSqlContainer),
|
|
105
105
|
resourceGroupName: resourceGroup.name,
|
|
106
106
|
});
|
|
107
107
|
(0, utils_1.createAzureTfOutput)(`${id}-cosmosdbContainertName`, scope, cosmosdbContainer.name);
|
|
@@ -44,7 +44,7 @@ class AzureDnsManager {
|
|
|
44
44
|
throw `Resource group undefined for ${id}`;
|
|
45
45
|
const dnsZone = new dns_zone_1.DnsZone(scope, `${id}-dz`, {
|
|
46
46
|
...props,
|
|
47
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
47
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.dnsZone),
|
|
48
48
|
resourceGroupName: resourceGroup.name,
|
|
49
49
|
tags: props.tags ?? {
|
|
50
50
|
environment: scope.props.stage,
|
|
@@ -67,7 +67,7 @@ class AzureDnsManager {
|
|
|
67
67
|
throw `Props undefined for ${id}`;
|
|
68
68
|
const dnsARecord = new dns_a_record_1.DnsARecord(scope, `${id}-da`, {
|
|
69
69
|
...props,
|
|
70
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
70
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.dnsARecord),
|
|
71
71
|
ttl: props.ttl || 300,
|
|
72
72
|
tags: props.tags ?? {
|
|
73
73
|
environment: scope.props.stage,
|
|
@@ -90,7 +90,7 @@ class AzureDnsManager {
|
|
|
90
90
|
throw `Props undefined for ${id}`;
|
|
91
91
|
const dnsCnameRecord = new dns_cname_record_1.DnsCnameRecord(scope, `${id}-dc`, {
|
|
92
92
|
...props,
|
|
93
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
93
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.dnsCnameRecord),
|
|
94
94
|
ttl: props.ttl || 300,
|
|
95
95
|
tags: props.tags ?? {
|
|
96
96
|
environment: scope.props.stage,
|
|
@@ -43,7 +43,7 @@ class AzureEventgridManager {
|
|
|
43
43
|
throw `Resource group undefined for ${id}`;
|
|
44
44
|
const eventgridTopic = new eventgrid_topic_1.EventgridTopic(scope, `${id}-et`, {
|
|
45
45
|
...props,
|
|
46
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
46
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventGridTopic),
|
|
47
47
|
location: resourceGroup.location,
|
|
48
48
|
resourceGroupName: resourceGroup.name,
|
|
49
49
|
tags: props.tags ?? {
|
|
@@ -75,7 +75,7 @@ class AzureEventgridManager {
|
|
|
75
75
|
throw `Resource group undefined for ${id}`;
|
|
76
76
|
const eventgridTopic = new data_azurerm_eventgrid_topic_1.DataAzurermEventgridTopic(scope, `${id}-et`, {
|
|
77
77
|
...props,
|
|
78
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
78
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventGridTopic),
|
|
79
79
|
resourceGroupName: resourceGroup.name,
|
|
80
80
|
});
|
|
81
81
|
(0, utils_1.createAzureTfOutput)(`${id}-eventgridTopicName`, scope, eventgridTopic.name);
|
|
@@ -96,7 +96,7 @@ class AzureEventgridManager {
|
|
|
96
96
|
throw `Props undefined for ${id}`;
|
|
97
97
|
const eventgridSubscription = new eventgrid_event_subscription_1.EventgridEventSubscription(scope, `${id}-es`, {
|
|
98
98
|
...props,
|
|
99
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
99
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventGridEventSubscription),
|
|
100
100
|
eventDeliverySchema: props.eventDeliverySchema || 'CloudEventSchemaV1_0',
|
|
101
101
|
advancedFilteringOnArraysEnabled: props.advancedFilteringOnArraysEnabled || true,
|
|
102
102
|
});
|
|
@@ -44,7 +44,7 @@ class AzureFunctionManager {
|
|
|
44
44
|
throw `Resource group undefined for ${id}`;
|
|
45
45
|
const functionApp = new linux_function_app_1.LinuxFunctionApp(scope, `${id}-fa`, {
|
|
46
46
|
...props,
|
|
47
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
47
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.linuxFunctionApp),
|
|
48
48
|
resourceGroupName: resourceGroup.name,
|
|
49
49
|
tags: props.tags ?? {
|
|
50
50
|
environment: scope.props.stage,
|
|
@@ -67,7 +67,7 @@ class AzureFunctionManager {
|
|
|
67
67
|
throw `Props undefined for ${id}`;
|
|
68
68
|
const functionAppFunction = new function_app_function_1.FunctionAppFunction(scope, `${id}-fc`, {
|
|
69
69
|
...props,
|
|
70
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
70
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.functionAppFunction),
|
|
71
71
|
configJson: JSON.stringify(props.configJson || {}),
|
|
72
72
|
});
|
|
73
73
|
(0, utils_1.createAzureTfOutput)(`${id}-functionName`, scope, functionAppFunction.name);
|
|
@@ -93,7 +93,7 @@ class AzureFunctionManager {
|
|
|
93
93
|
throw `Resource group undefined for ${id}`;
|
|
94
94
|
const functionApp = new resource_1.Resource(scope, `${id}-fa`, {
|
|
95
95
|
type: 'Microsoft.Web/sites@2024-04-01',
|
|
96
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
96
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.functionApp),
|
|
97
97
|
location: resourceGroup.location,
|
|
98
98
|
parentId: resourceGroup.id,
|
|
99
99
|
body: {
|
|
@@ -41,7 +41,7 @@ class AzureKeyVaultManager {
|
|
|
41
41
|
throw `Resource group undefined for ${id}`;
|
|
42
42
|
const keyVault = new key_vault_1.KeyVault(scope, `${id}-kv`, {
|
|
43
43
|
...props,
|
|
44
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
44
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.keyVault),
|
|
45
45
|
location: resourceGroup.location,
|
|
46
46
|
resourceGroupName: resourceGroup.name,
|
|
47
47
|
skuName: props.skuName ?? 'standard',
|
|
@@ -41,7 +41,7 @@ class AzureLogAnalyticsWorkspaceManager {
|
|
|
41
41
|
throw `Resource group undefined for ${id}`;
|
|
42
42
|
const logAnalyticsWorkspace = new log_analytics_workspace_1.LogAnalyticsWorkspace(scope, `${id}-lw`, {
|
|
43
43
|
...props,
|
|
44
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
44
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.logAnalyticsWorkspace),
|
|
45
45
|
location: resourceGroup.location,
|
|
46
46
|
resourceGroupName: resourceGroup.name,
|
|
47
47
|
tags: props.tags ?? {
|
|
@@ -33,7 +33,7 @@ class AzureResourceGroupManager {
|
|
|
33
33
|
throw `Props undefined for ${id}`;
|
|
34
34
|
const resourceGroup = new resource_group_1.ResourceGroup(scope, `${id}-rg`, {
|
|
35
35
|
...props,
|
|
36
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
36
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.resourceGroup),
|
|
37
37
|
location: props.location,
|
|
38
38
|
tags: props.tags ?? {
|
|
39
39
|
environment: scope.props.stage,
|
|
@@ -44,7 +44,7 @@ class AzureServicebusManager {
|
|
|
44
44
|
throw `Resource group undefined for ${id}`;
|
|
45
45
|
const servicebusNamespace = new servicebus_namespace_1.ServicebusNamespace(scope, `${id}-sn`, {
|
|
46
46
|
...props,
|
|
47
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
47
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.serviceBusNamespace),
|
|
48
48
|
resourceGroupName: resourceGroup.name,
|
|
49
49
|
location: resourceGroup.location,
|
|
50
50
|
identity: {
|
|
@@ -72,7 +72,7 @@ class AzureServicebusManager {
|
|
|
72
72
|
throw `Props undefined for ${id}`;
|
|
73
73
|
const servicebusTopic = new servicebus_topic_1.ServicebusTopic(scope, `${id}-st`, {
|
|
74
74
|
...props,
|
|
75
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
75
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.serviceBusTopic),
|
|
76
76
|
namespaceId: props.namespaceId,
|
|
77
77
|
});
|
|
78
78
|
(0, utils_1.createAzureTfOutput)(`${id}-servicebusTopicName`, scope, servicebusTopic.name);
|
|
@@ -92,7 +92,7 @@ class AzureServicebusManager {
|
|
|
92
92
|
throw `Props undefined for ${id}`;
|
|
93
93
|
const servicebusQueue = new servicebus_queue_1.ServicebusQueue(scope, `${id}-sq`, {
|
|
94
94
|
...props,
|
|
95
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
95
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.serviceBusQueue),
|
|
96
96
|
namespaceId: props.namespaceId,
|
|
97
97
|
});
|
|
98
98
|
(0, utils_1.createAzureTfOutput)(`${id}-servicebusQueueName`, scope, servicebusQueue.name);
|
|
@@ -112,7 +112,7 @@ class AzureServicebusManager {
|
|
|
112
112
|
throw `Props undefined for ${id}`;
|
|
113
113
|
const servicebusSubscription = new servicebus_subscription_1.ServicebusSubscription(scope, `${id}-ss`, {
|
|
114
114
|
...props,
|
|
115
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
115
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.serviceBusSubscription),
|
|
116
116
|
maxDeliveryCount: props.maxDeliveryCount || 1,
|
|
117
117
|
});
|
|
118
118
|
(0, utils_1.createAzureTfOutput)(`${id}-servicebusSubscriptionName`, scope, servicebusSubscription.name);
|
|
@@ -47,7 +47,10 @@ class AzureStorageManager {
|
|
|
47
47
|
...props,
|
|
48
48
|
accountTier: props.accountTier ?? 'Standard',
|
|
49
49
|
location: props.location ?? resourceGroup.location,
|
|
50
|
-
name:
|
|
50
|
+
name: scope.resourceNameFormatter
|
|
51
|
+
.format(props.name, scope.props.resourceNameOptions?.storageAccount)
|
|
52
|
+
.replace(/\W/g, '')
|
|
53
|
+
.toLowerCase(),
|
|
51
54
|
resourceGroupName: resourceGroup.name,
|
|
52
55
|
tags: props.tags ?? {
|
|
53
56
|
environment: scope.props.stage,
|
|
@@ -70,7 +73,7 @@ class AzureStorageManager {
|
|
|
70
73
|
throw `Props undefined for ${id}`;
|
|
71
74
|
const storageContainer = new storage_container_1.StorageContainer(scope, `${id}-sc`, {
|
|
72
75
|
...props,
|
|
73
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
76
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.storageContainer),
|
|
74
77
|
});
|
|
75
78
|
(0, utils_1.createAzureTfOutput)(`${id}-storageContainerName`, scope, storageContainer.name);
|
|
76
79
|
(0, utils_1.createAzureTfOutput)(`${id}-storageContainerFriendlyUniqueId`, scope, storageContainer.friendlyUniqueId);
|
|
@@ -105,7 +108,7 @@ class AzureStorageManager {
|
|
|
105
108
|
});
|
|
106
109
|
const storageBlob = new storage_blob_1.StorageBlob(scope, `${id}-sb`, {
|
|
107
110
|
...props,
|
|
108
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
111
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.storageBlob),
|
|
109
112
|
storageAccountName: storageAccount.name,
|
|
110
113
|
storageContainerName: storageContainer.name,
|
|
111
114
|
});
|
package/package.json
CHANGED
|
@@ -50,6 +50,11 @@ export class CommonAzureStack extends TerraformStack {
|
|
|
50
50
|
location: this.node.tryGetContext('location'),
|
|
51
51
|
name: this.node.tryGetContext('resourceGroupName'),
|
|
52
52
|
resourceGroupName: this.node.tryGetContext('resourceGroupName'),
|
|
53
|
+
globalPrefix: this.node.tryGetContext('globalPrefix'),
|
|
54
|
+
globalSuffix: this.node.tryGetContext('globalSuffix'),
|
|
55
|
+
resourceNameOptions: this.node.tryGetContext('resourceNameOptions'),
|
|
56
|
+
resourcePrefix: this.node.tryGetContext('resourcePrefix'),
|
|
57
|
+
resourceSuffix: this.node.tryGetContext('resourceSuffix'),
|
|
53
58
|
skipStageForARecords: this.node.tryGetContext('skipStageForARecords'),
|
|
54
59
|
stage: this.node.tryGetContext('stage'),
|
|
55
60
|
subDomain: this.node.tryGetContext('subDomain'),
|
|
@@ -62,7 +62,7 @@ export class AzureApiManagementManager {
|
|
|
62
62
|
|
|
63
63
|
const apiManagement = new ApiManagement(scope, `${id}-am`, {
|
|
64
64
|
...props,
|
|
65
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
65
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.apiManagement),
|
|
66
66
|
resourceGroupName: resourceGroup.name,
|
|
67
67
|
tags: props.tags ?? {
|
|
68
68
|
environment: scope.props.stage,
|
|
@@ -71,7 +71,7 @@ export class AzureApiManagementManager {
|
|
|
71
71
|
|
|
72
72
|
if (applicationInsightsKey) {
|
|
73
73
|
new ApiManagementLogger(scope, `${id}-am-logger`, {
|
|
74
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
74
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.apiManagementLogger),
|
|
75
75
|
resourceGroupName: resourceGroup.name,
|
|
76
76
|
apiManagementName: apiManagement.name,
|
|
77
77
|
applicationInsights: {
|
|
@@ -107,7 +107,7 @@ export class AzureApiManagementManager {
|
|
|
107
107
|
|
|
108
108
|
const apiManagement = new DataAzurermApiManagement(scope, `${id}-am`, {
|
|
109
109
|
...props,
|
|
110
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
110
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.dataAzurermApiManagement),
|
|
111
111
|
resourceGroupName: scope.props.resourceGroupName
|
|
112
112
|
? `${scope.props.resourceGroupName}-${scope.props.stage}`
|
|
113
113
|
: `${props.resourceGroupName}`,
|
|
@@ -141,7 +141,7 @@ export class AzureApiManagementManager {
|
|
|
141
141
|
|
|
142
142
|
const apiManagement = new Resource(scope, `${id}-am`, {
|
|
143
143
|
type: 'Microsoft.ApiManagement/service@2024-05-01',
|
|
144
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
144
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.apiManagement),
|
|
145
145
|
location: resourceGroup.location,
|
|
146
146
|
parentId: resourceGroup.id,
|
|
147
147
|
|
|
@@ -174,7 +174,7 @@ export class AzureApiManagementManager {
|
|
|
174
174
|
|
|
175
175
|
if (applicationInsightsKey) {
|
|
176
176
|
new ApiManagementLogger(scope, `${id}-am-logger`, {
|
|
177
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
177
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.apiManagementLogger),
|
|
178
178
|
resourceGroupName: resourceGroup.name,
|
|
179
179
|
apiManagementName: apiManagement.name,
|
|
180
180
|
applicationInsights: {
|
|
@@ -202,7 +202,7 @@ export class AzureApiManagementManager {
|
|
|
202
202
|
|
|
203
203
|
const apiManagementBackend = new ApiManagementBackend(scope, `${id}-am-be`, {
|
|
204
204
|
...props,
|
|
205
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
205
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.apiManagementBackend),
|
|
206
206
|
description: props.description || `Backend for ${props.name}-${scope.props.stage}`,
|
|
207
207
|
protocol: props.protocol || 'http',
|
|
208
208
|
})
|
|
@@ -226,7 +226,7 @@ export class AzureApiManagementManager {
|
|
|
226
226
|
|
|
227
227
|
const apiManagementApi = new ApiManagementApi(scope, `${id}-am-api`, {
|
|
228
228
|
...props,
|
|
229
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
229
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.apiManagementApi),
|
|
230
230
|
displayName: props.displayName || props.name,
|
|
231
231
|
revision: props.revision || '1',
|
|
232
232
|
protocols: props.protocols || ['https'],
|
|
@@ -6,7 +6,9 @@ import { ApiManagementApiOperationPolicyConfig } from '@cdktf/provider-azurerm/l
|
|
|
6
6
|
|
|
7
7
|
export interface ApiManagementProps extends ApiManagementConfig {}
|
|
8
8
|
|
|
9
|
-
export interface ApiManagementBackendProps extends ApiManagementBackendConfig {
|
|
9
|
+
export interface ApiManagementBackendProps extends ApiManagementBackendConfig {
|
|
10
|
+
backendUrlPath?: string
|
|
11
|
+
}
|
|
10
12
|
|
|
11
13
|
export interface ApiManagementApiProps extends ApiManagementApiConfig {
|
|
12
14
|
operations: ApiManagementApiOperationConfig[]
|
|
@@ -42,7 +42,7 @@ export class AzureAppConfigurationManager {
|
|
|
42
42
|
|
|
43
43
|
const appConfiguration = new AppConfiguration(scope, `${id}-ac`, {
|
|
44
44
|
...props,
|
|
45
|
-
name:
|
|
45
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.appConfiguration),
|
|
46
46
|
resourceGroupName: resourceGroup.name,
|
|
47
47
|
tags: props.tags ?? {
|
|
48
48
|
environment: scope.props.stage,
|
|
@@ -42,7 +42,7 @@ export class AzureAppServiceManager {
|
|
|
42
42
|
|
|
43
43
|
const appServicePlan = new ServicePlan(scope, `${id}-as`, {
|
|
44
44
|
...props,
|
|
45
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
45
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.appServicePlan),
|
|
46
46
|
resourceGroupName: resourceGroup.name,
|
|
47
47
|
tags: props.tags ?? {
|
|
48
48
|
environment: scope.props.stage,
|
|
@@ -42,7 +42,7 @@ export class AzureApplicationInsightsManager {
|
|
|
42
42
|
|
|
43
43
|
const applicationInsights = new ApplicationInsights(scope, `${id}-ai`, {
|
|
44
44
|
...props,
|
|
45
|
-
name:
|
|
45
|
+
name: scope.resourceNameFormatter.format(props.name ?? '', scope.props.resourceNameOptions?.applicationInsights),
|
|
46
46
|
resourceGroupName: resourceGroup.name,
|
|
47
47
|
applicationType: props.applicationType || 'web',
|
|
48
48
|
tags: props.tags ?? {
|
|
@@ -44,7 +44,7 @@ export class AzureCosmosDbManager {
|
|
|
44
44
|
|
|
45
45
|
const cosmosdbAccount = new CosmosdbAccount(scope, `${id}-ca`, {
|
|
46
46
|
...props,
|
|
47
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
47
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.cosmosDbAccount),
|
|
48
48
|
location: resourceGroup.location,
|
|
49
49
|
resourceGroupName: resourceGroup.name,
|
|
50
50
|
tags: props.tags ?? {
|
|
@@ -79,7 +79,7 @@ export class AzureCosmosDbManager {
|
|
|
79
79
|
|
|
80
80
|
const cosmosdbDatatbase = new CosmosdbSqlDatabase(scope, `${id}-cd`, {
|
|
81
81
|
...props,
|
|
82
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
82
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.cosmosDbSqlDatabase),
|
|
83
83
|
resourceGroupName: resourceGroup.name,
|
|
84
84
|
})
|
|
85
85
|
|
|
@@ -110,7 +110,7 @@ export class AzureCosmosDbManager {
|
|
|
110
110
|
|
|
111
111
|
const cosmosdbContainer = new CosmosdbSqlContainer(scope, `${id}-cc`, {
|
|
112
112
|
...props,
|
|
113
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
113
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.cosmosDbSqlContainer),
|
|
114
114
|
resourceGroupName: resourceGroup.name,
|
|
115
115
|
})
|
|
116
116
|
|
|
@@ -45,7 +45,7 @@ export class AzureDnsManager {
|
|
|
45
45
|
|
|
46
46
|
const dnsZone = new DnsZone(scope, `${id}-dz`, {
|
|
47
47
|
...props,
|
|
48
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
48
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.dnsZone),
|
|
49
49
|
resourceGroupName: resourceGroup.name,
|
|
50
50
|
tags: props.tags ?? {
|
|
51
51
|
environment: scope.props.stage,
|
|
@@ -71,7 +71,7 @@ export class AzureDnsManager {
|
|
|
71
71
|
|
|
72
72
|
const dnsARecord = new DnsARecord(scope, `${id}-da`, {
|
|
73
73
|
...props,
|
|
74
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
74
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.dnsARecord),
|
|
75
75
|
ttl: props.ttl || 300,
|
|
76
76
|
tags: props.tags ?? {
|
|
77
77
|
environment: scope.props.stage,
|
|
@@ -97,7 +97,7 @@ export class AzureDnsManager {
|
|
|
97
97
|
|
|
98
98
|
const dnsCnameRecord = new DnsCnameRecord(scope, `${id}-dc`, {
|
|
99
99
|
...props,
|
|
100
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
100
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.dnsCnameRecord),
|
|
101
101
|
ttl: props.ttl || 300,
|
|
102
102
|
tags: props.tags ?? {
|
|
103
103
|
environment: scope.props.stage,
|
|
@@ -47,7 +47,7 @@ export class AzureEventgridManager {
|
|
|
47
47
|
|
|
48
48
|
const eventgridTopic = new EventgridTopic(scope, `${id}-et`, {
|
|
49
49
|
...props,
|
|
50
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
50
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventGridTopic),
|
|
51
51
|
location: resourceGroup.location,
|
|
52
52
|
resourceGroupName: resourceGroup.name,
|
|
53
53
|
tags: props.tags ?? {
|
|
@@ -83,7 +83,7 @@ export class AzureEventgridManager {
|
|
|
83
83
|
|
|
84
84
|
const eventgridTopic = new DataAzurermEventgridTopic(scope, `${id}-et`, {
|
|
85
85
|
...props,
|
|
86
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
86
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventGridTopic),
|
|
87
87
|
resourceGroupName: resourceGroup.name,
|
|
88
88
|
})
|
|
89
89
|
|
|
@@ -107,7 +107,7 @@ export class AzureEventgridManager {
|
|
|
107
107
|
|
|
108
108
|
const eventgridSubscription = new EventgridEventSubscription(scope, `${id}-es`, {
|
|
109
109
|
...props,
|
|
110
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
110
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventGridEventSubscription),
|
|
111
111
|
eventDeliverySchema: props.eventDeliverySchema || 'CloudEventSchemaV1_0',
|
|
112
112
|
advancedFilteringOnArraysEnabled: props.advancedFilteringOnArraysEnabled || true,
|
|
113
113
|
})
|
|
@@ -45,7 +45,7 @@ export class AzureFunctionManager {
|
|
|
45
45
|
|
|
46
46
|
const functionApp = new LinuxFunctionApp(scope, `${id}-fa`, {
|
|
47
47
|
...props,
|
|
48
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
48
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.linuxFunctionApp),
|
|
49
49
|
resourceGroupName: resourceGroup.name,
|
|
50
50
|
tags: props.tags ?? {
|
|
51
51
|
environment: scope.props.stage,
|
|
@@ -71,7 +71,7 @@ export class AzureFunctionManager {
|
|
|
71
71
|
|
|
72
72
|
const functionAppFunction = new FunctionAppFunction(scope, `${id}-fc`, {
|
|
73
73
|
...props,
|
|
74
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
74
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.functionAppFunction),
|
|
75
75
|
configJson: JSON.stringify(props.configJson || {}),
|
|
76
76
|
})
|
|
77
77
|
|
|
@@ -105,7 +105,7 @@ export class AzureFunctionManager {
|
|
|
105
105
|
|
|
106
106
|
const functionApp = new Resource(scope, `${id}-fa`, {
|
|
107
107
|
type: 'Microsoft.Web/sites@2024-04-01',
|
|
108
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
108
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.functionApp),
|
|
109
109
|
location: resourceGroup.location,
|
|
110
110
|
parentId: resourceGroup.id,
|
|
111
111
|
|
|
@@ -42,7 +42,7 @@ export class AzureKeyVaultManager {
|
|
|
42
42
|
|
|
43
43
|
const keyVault = new KeyVault(scope, `${id}-kv`, {
|
|
44
44
|
...props,
|
|
45
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
45
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.keyVault),
|
|
46
46
|
location: resourceGroup.location,
|
|
47
47
|
resourceGroupName: resourceGroup.name,
|
|
48
48
|
skuName: props.skuName ?? 'standard',
|
|
@@ -42,7 +42,7 @@ export class AzureLogAnalyticsWorkspaceManager {
|
|
|
42
42
|
|
|
43
43
|
const logAnalyticsWorkspace = new LogAnalyticsWorkspace(scope, `${id}-lw`, {
|
|
44
44
|
...props,
|
|
45
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
45
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.logAnalyticsWorkspace),
|
|
46
46
|
location: resourceGroup.location,
|
|
47
47
|
resourceGroupName: resourceGroup.name,
|
|
48
48
|
tags: props.tags ?? {
|
|
@@ -33,7 +33,7 @@ export class AzureResourceGroupManager {
|
|
|
33
33
|
|
|
34
34
|
const resourceGroup = new ResourceGroup(scope, `${id}-rg`, {
|
|
35
35
|
...props,
|
|
36
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
36
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.resourceGroup),
|
|
37
37
|
location: props.location,
|
|
38
38
|
tags: props.tags ?? {
|
|
39
39
|
environment: scope.props.stage,
|
|
@@ -50,7 +50,7 @@ export class AzureServicebusManager {
|
|
|
50
50
|
|
|
51
51
|
const servicebusNamespace = new ServicebusNamespace(scope, `${id}-sn`, {
|
|
52
52
|
...props,
|
|
53
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
53
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.serviceBusNamespace),
|
|
54
54
|
resourceGroupName: resourceGroup.name,
|
|
55
55
|
location: resourceGroup.location,
|
|
56
56
|
identity: {
|
|
@@ -81,7 +81,7 @@ export class AzureServicebusManager {
|
|
|
81
81
|
|
|
82
82
|
const servicebusTopic = new ServicebusTopic(scope, `${id}-st`, {
|
|
83
83
|
...props,
|
|
84
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
84
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.serviceBusTopic),
|
|
85
85
|
namespaceId: props.namespaceId,
|
|
86
86
|
})
|
|
87
87
|
|
|
@@ -104,7 +104,7 @@ export class AzureServicebusManager {
|
|
|
104
104
|
|
|
105
105
|
const servicebusQueue = new ServicebusQueue(scope, `${id}-sq`, {
|
|
106
106
|
...props,
|
|
107
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
107
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.serviceBusQueue),
|
|
108
108
|
namespaceId: props.namespaceId,
|
|
109
109
|
})
|
|
110
110
|
|
|
@@ -127,7 +127,7 @@ export class AzureServicebusManager {
|
|
|
127
127
|
|
|
128
128
|
const servicebusSubscription = new ServicebusSubscription(scope, `${id}-ss`, {
|
|
129
129
|
...props,
|
|
130
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
130
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.serviceBusSubscription),
|
|
131
131
|
maxDeliveryCount: props.maxDeliveryCount || 1,
|
|
132
132
|
})
|
|
133
133
|
|
|
@@ -48,7 +48,10 @@ export class AzureStorageManager {
|
|
|
48
48
|
...props,
|
|
49
49
|
accountTier: props.accountTier ?? 'Standard',
|
|
50
50
|
location: props.location ?? resourceGroup.location,
|
|
51
|
-
name:
|
|
51
|
+
name: scope.resourceNameFormatter
|
|
52
|
+
.format(props.name, scope.props.resourceNameOptions?.storageAccount)
|
|
53
|
+
.replace(/\W/g, '')
|
|
54
|
+
.toLowerCase(),
|
|
52
55
|
resourceGroupName: resourceGroup.name,
|
|
53
56
|
tags: props.tags ?? {
|
|
54
57
|
environment: scope.props.stage,
|
|
@@ -74,7 +77,7 @@ export class AzureStorageManager {
|
|
|
74
77
|
|
|
75
78
|
const storageContainer = new StorageContainer(scope, `${id}-sc`, {
|
|
76
79
|
...props,
|
|
77
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
80
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.storageContainer),
|
|
78
81
|
})
|
|
79
82
|
|
|
80
83
|
createAzureTfOutput(`${id}-storageContainerName`, scope, storageContainer.name)
|
|
@@ -115,7 +118,7 @@ export class AzureStorageManager {
|
|
|
115
118
|
|
|
116
119
|
const storageBlob = new StorageBlob(scope, `${id}-sb`, {
|
|
117
120
|
...props,
|
|
118
|
-
name: scope.resourceNameFormatter.format(props.name),
|
|
121
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.storageBlob),
|
|
119
122
|
storageAccountName: storageAccount.name,
|
|
120
123
|
storageContainerName: storageContainer.name,
|
|
121
124
|
})
|