@rio-cloud/cdk-v2-constructs 6.1.0 → 6.2.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/.jsii +420 -1
- package/CHANGELOG.md +17 -0
- package/docs/API.md +621 -0
- package/lib/contributions/smart-route/gitlab-runner/autoscaling-runner.d.ts +87 -0
- package/lib/contributions/smart-route/gitlab-runner/autoscaling-runner.js +137 -0
- package/lib/contributions/smart-route/gitlab-runner/index.d.ts +3 -0
- package/lib/contributions/smart-route/gitlab-runner/index.js +20 -0
- package/lib/contributions/smart-route/gitlab-runner/runner-roles.d.ts +20 -0
- package/lib/contributions/smart-route/gitlab-runner/runner-roles.js +352 -0
- package/lib/contributions/smart-route/gitlab-runner/spot-role.d.ts +7 -0
- package/lib/contributions/smart-route/gitlab-runner/spot-role.js +22 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/package.json +6 -2
- package/version.json +1 -1
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.RunnerRoles = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
|
+
const aws_ecr_1 = require("aws-cdk-lib/aws-ecr");
|
|
8
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
9
|
+
const aws_s3_1 = require("aws-cdk-lib/aws-s3");
|
|
10
|
+
const aws_ssm_1 = require("aws-cdk-lib/aws-ssm");
|
|
11
|
+
const constructs_1 = require("constructs");
|
|
12
|
+
const rio_landing_zone_1 = require("../../../rio-landing-zone");
|
|
13
|
+
/**
|
|
14
|
+
* This construct provides a set of base roles for gitlab runners in order to build, test, validate and deploy applications
|
|
15
|
+
* on RIO. The roles need to be assumed during job runtime to perform more permissive actions, such as creating certificates to
|
|
16
|
+
* authenticate towards the RIO MSK, pushing docker images to ECR, performing a secrets backup, deploying stacks,
|
|
17
|
+
* or to publish an SPA to a S3 bucket. Do not assume the deployment role unless needed.
|
|
18
|
+
* The base role can be the default role attached to GitLab runners.
|
|
19
|
+
* The role allows to read various basic parameters such as the NIST data mirror, the OSS license bucket, DataDog keys
|
|
20
|
+
* and to pull ECR images form public Gallery or the specified account in the environment.
|
|
21
|
+
* The Role ARNs are export using CFNOutputs. Use the outputs to configure environment variables in your GitLab group.
|
|
22
|
+
*/
|
|
23
|
+
class RunnerRoles extends constructs_1.Construct {
|
|
24
|
+
constructor(scope, id, props) {
|
|
25
|
+
super(scope, id);
|
|
26
|
+
const accountNameParameter = rio_landing_zone_1.RioLandingZone.getAccountNameParameter(scope);
|
|
27
|
+
const teamNameParameter = rio_landing_zone_1.RioLandingZone.getTeamIdentifierParameter(scope);
|
|
28
|
+
const nistMirrorParameter = aws_ssm_1.StringParameter.fromStringParameterName(this, 'NistMirrorParameter', '/config/nist-data-mirror/url');
|
|
29
|
+
const ossLicensesBucketParameter = aws_ssm_1.StringParameter.fromStringParameterAttributes(this, 'OssLicensesBucketParameter', {
|
|
30
|
+
parameterName: '/config/oss-licenses/bucket-name',
|
|
31
|
+
});
|
|
32
|
+
const ossLicensesBucket = aws_s3_1.Bucket.fromBucketName(this, 'OssLicensesBucket', ossLicensesBucketParameter.stringValue);
|
|
33
|
+
const ddApiKeyParam = aws_ssm_1.StringParameter.fromStringParameterAttributes(this, 'DataDogApiKeyParam', {
|
|
34
|
+
parameterName: '/rio/config/datadog-integration/api-key',
|
|
35
|
+
});
|
|
36
|
+
const ddSiteParam = aws_ssm_1.StringParameter.fromStringParameterAttributes(this, 'DataDogSiteParam', {
|
|
37
|
+
parameterName: '/rio/config/datadog-integration/site',
|
|
38
|
+
});
|
|
39
|
+
const kafkaIntegrationPolicy = aws_iam_1.ManagedPolicy.fromManagedPolicyArn(this, 'KafkaIntegrationPolicy', aws_cdk_lib_1.Fn.importValue('kafka-integration-policy-arn'));
|
|
40
|
+
this.runnerBaseRole = new aws_iam_1.Role(this, 'GlRunnerBuildRole', {
|
|
41
|
+
assumedBy: new aws_iam_1.ServicePrincipal('ec2.amazonaws.com', {}),
|
|
42
|
+
inlinePolicies: {
|
|
43
|
+
CdkSynthLookUp: aws_iam_1.PolicyDocument.fromJson({
|
|
44
|
+
Version: '2012-10-17',
|
|
45
|
+
Statement: [
|
|
46
|
+
{
|
|
47
|
+
Effect: 'Allow',
|
|
48
|
+
Action: ['s3:*Object', 's3:ListBucket', 's3:GetBucketLocation'],
|
|
49
|
+
Resource: ['arn:aws:s3:::cdktoolkit-*'],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
Sid: 'assumerole',
|
|
53
|
+
Effect: 'Allow',
|
|
54
|
+
Action: ['sts:AssumeRole', 'iam:PassRole'],
|
|
55
|
+
Resource: [
|
|
56
|
+
'arn:aws:iam::*:role/cdk-readOnlyRole',
|
|
57
|
+
'arn:aws:iam::*:role/cdk-hnb659fds-lookup-role-*',
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
Sid: 'pullEcrImages',
|
|
62
|
+
Effect: 'Allow',
|
|
63
|
+
Action: [
|
|
64
|
+
'ecr:BatchCheckLayerAvailability',
|
|
65
|
+
'ecr:BatchGetImage',
|
|
66
|
+
'ecr:DescribeImages',
|
|
67
|
+
'ecr:DescribeRepositories',
|
|
68
|
+
'ecr:GetDownloadUrlForLayer',
|
|
69
|
+
],
|
|
70
|
+
Resource: [
|
|
71
|
+
`${props.env.account}.dkr.ecr.${props.env.region}.amazonaws.com/*`,
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
}),
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
this.runnerBaseRole.node.defaultChild.overrideLogicalId('GlRunnerBuildRole');
|
|
79
|
+
nistMirrorParameter.grantRead(this.runnerBaseRole);
|
|
80
|
+
ossLicensesBucketParameter.grantRead(this.runnerBaseRole);
|
|
81
|
+
ossLicensesBucket.grantReadWrite(this.runnerBaseRole);
|
|
82
|
+
accountNameParameter.grantRead(this.runnerBaseRole);
|
|
83
|
+
teamNameParameter.grantRead(this.runnerBaseRole);
|
|
84
|
+
ddApiKeyParam.grantRead(this.runnerBaseRole);
|
|
85
|
+
ddSiteParam.grantRead(this.runnerBaseRole);
|
|
86
|
+
aws_ecr_1.PublicGalleryAuthorizationToken.grantRead(this.runnerBaseRole);
|
|
87
|
+
const webContentPublishRole = new aws_iam_1.Role(this, 'GlRunnerS3WebContentDeployRole', {
|
|
88
|
+
roleName: 'gl-runner-web-content-s3-deploy-role',
|
|
89
|
+
assumedBy: this.runnerBaseRole,
|
|
90
|
+
inlinePolicies: {
|
|
91
|
+
PublishWebContentOnS3: aws_iam_1.PolicyDocument.fromJson({
|
|
92
|
+
Version: '2012-10-17',
|
|
93
|
+
Statement: [
|
|
94
|
+
{
|
|
95
|
+
Effect: 'Allow',
|
|
96
|
+
Action: [
|
|
97
|
+
's3:Abort*',
|
|
98
|
+
's3:DeleteObject*',
|
|
99
|
+
's3:GetBucket*',
|
|
100
|
+
's3:GetObject*',
|
|
101
|
+
's3:List*',
|
|
102
|
+
's3:PutObject',
|
|
103
|
+
's3:PutObjectLegalHold',
|
|
104
|
+
's3:PutObjectRetention',
|
|
105
|
+
's3:PutObjectTagging',
|
|
106
|
+
's3:PutObjectVersionTagging',
|
|
107
|
+
],
|
|
108
|
+
Resource: ['arn:aws:s3:::*'],
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
Action: [
|
|
112
|
+
'ssm:DescribeParameters',
|
|
113
|
+
'ssm:GetParameter',
|
|
114
|
+
'ssm:GetParameterHistory',
|
|
115
|
+
'ssm:GetParameters',
|
|
116
|
+
'ssm:GetParametersByPath',
|
|
117
|
+
],
|
|
118
|
+
Effect: 'Allow',
|
|
119
|
+
Resource: [
|
|
120
|
+
`arn:aws:ssm:${props.env.region}:${props.env.account}:parameter/config/*`,
|
|
121
|
+
`arn:aws:ssm:${props.env.region}:${props.env.account}:parameter/secret/*`,
|
|
122
|
+
],
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
}),
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
webContentPublishRole.node.defaultChild.overrideLogicalId('GlRunnerS3WebContentDeployRole');
|
|
129
|
+
const createMSKCertRole = new aws_iam_1.Role(this, 'GlRunnerCreateAndSignCertRole', {
|
|
130
|
+
roleName: 'gl-runner-create-and-sign-rio-msk-cert-role',
|
|
131
|
+
assumedBy: this.runnerBaseRole,
|
|
132
|
+
inlinePolicies: {
|
|
133
|
+
ParameterStoreReadKeyStore: aws_iam_1.PolicyDocument.fromJson({
|
|
134
|
+
Version: '2012-10-17',
|
|
135
|
+
Statement: [
|
|
136
|
+
{
|
|
137
|
+
Action: [
|
|
138
|
+
'ssm:DescribeParameters',
|
|
139
|
+
'ssm:GetParameter',
|
|
140
|
+
'ssm:GetParameterHistory',
|
|
141
|
+
'ssm:GetParameters',
|
|
142
|
+
'ssm:GetParametersByPath',
|
|
143
|
+
],
|
|
144
|
+
Effect: 'Allow',
|
|
145
|
+
Resource: [
|
|
146
|
+
`arn:aws:ssm:${props.env.region}:${props.env.account}:parameter/config/*`,
|
|
147
|
+
`arn:aws:ssm:${props.env.region}:${props.env.account}:parameter/secret/*`,
|
|
148
|
+
],
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
}),
|
|
152
|
+
SecretsManagerReadKeyStore: aws_iam_1.PolicyDocument.fromJson({
|
|
153
|
+
Version: '2012-10-17',
|
|
154
|
+
Statement: [
|
|
155
|
+
{
|
|
156
|
+
Action: [
|
|
157
|
+
'secretsmanager:DescribeSecret',
|
|
158
|
+
'secretsmanager:GetSecretValue',
|
|
159
|
+
'secretsmanager:GetResourcePolicy',
|
|
160
|
+
'secretsmanager:ListSecretVersionIds',
|
|
161
|
+
],
|
|
162
|
+
Effect: 'Allow',
|
|
163
|
+
Resource: [
|
|
164
|
+
`arn:aws:secretsmanager:${props.env.region}:${props.env.account}:secret:/secret/*/service-keystore-password-??????`,
|
|
165
|
+
`arn:aws:secretsmanager:${props.env.region}:${props.env.account}:secret:/secret/*/service-keystore-password`,
|
|
166
|
+
`arn:aws:secretsmanager:${props.env.region}:${props.env.account}:secret:/config/*/service-keystore-password-??????`,
|
|
167
|
+
`arn:aws:secretsmanager:${props.env.region}:${props.env.account}:secret:/config/*/service-keystore-password`,
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
}),
|
|
172
|
+
},
|
|
173
|
+
managedPolicies: [kafkaIntegrationPolicy],
|
|
174
|
+
});
|
|
175
|
+
accountNameParameter.grantRead(createMSKCertRole);
|
|
176
|
+
teamNameParameter.grantRead(this.runnerBaseRole);
|
|
177
|
+
createMSKCertRole.node.defaultChild.overrideLogicalId('GlRunnerCreateAndSignCertRole');
|
|
178
|
+
const ecrDeployRole = new aws_iam_1.Role(this, 'GlRunnerECRDeployRole', {
|
|
179
|
+
roleName: 'gl-runner-deploy-to-ecr-role',
|
|
180
|
+
assumedBy: this.runnerBaseRole,
|
|
181
|
+
inlinePolicies: {
|
|
182
|
+
DeployToECR: aws_iam_1.PolicyDocument.fromJson({
|
|
183
|
+
Version: '2012-10-17',
|
|
184
|
+
Statement: [
|
|
185
|
+
{
|
|
186
|
+
Action: [
|
|
187
|
+
'ecr:BatchCheckLayerAvailability',
|
|
188
|
+
'ecr:BatchGetImage',
|
|
189
|
+
'ecr:CompleteLayerUpload',
|
|
190
|
+
'ecr:GetDownloadUrlForLayer',
|
|
191
|
+
'ecr:InitiateLayerUpload',
|
|
192
|
+
'ecr:PutImage',
|
|
193
|
+
'ecr:UploadLayerPart',
|
|
194
|
+
'ecr:GetAuthorizationToken',
|
|
195
|
+
'ecr:DescribeRepositories',
|
|
196
|
+
],
|
|
197
|
+
Effect: 'Allow',
|
|
198
|
+
Resource: [
|
|
199
|
+
`${props.env.account}.dkr.ecr.${props.env.region}.amazonaws.com/*`,
|
|
200
|
+
],
|
|
201
|
+
},
|
|
202
|
+
],
|
|
203
|
+
}),
|
|
204
|
+
},
|
|
205
|
+
});
|
|
206
|
+
aws_ecr_1.PublicGalleryAuthorizationToken.grantRead(ecrDeployRole);
|
|
207
|
+
ecrDeployRole.node.defaultChild.overrideLogicalId('GlRunnerECRDeployRole');
|
|
208
|
+
const iamPolicyKMS = new aws_iam_1.PolicyStatement({
|
|
209
|
+
actions: ['kms:Decrypt'],
|
|
210
|
+
resources: [
|
|
211
|
+
'arn:aws:kms:*:903404386550:key/*',
|
|
212
|
+
`arn:aws:kms:*:${props.env.account}:key/*`,
|
|
213
|
+
],
|
|
214
|
+
conditions: {
|
|
215
|
+
'ForAnyValue:StringLike': {
|
|
216
|
+
'kms:ResourceAliases': 'alias/rio-lz-backup-key*',
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
});
|
|
220
|
+
const iamPolicyLambdaExecution = new aws_iam_1.PolicyStatement({
|
|
221
|
+
actions: ['lambda:InvokeFunction'],
|
|
222
|
+
resources: [
|
|
223
|
+
`arn:aws:lambda:eu-west-1:${props.env.account}:function:SecretsRestoreHandler`,
|
|
224
|
+
],
|
|
225
|
+
});
|
|
226
|
+
const secretsBackUpRole = new aws_iam_1.Role(this, 'GlRunnerSecretsBackupRole', {
|
|
227
|
+
roleName: 'gl-runner-secrets-backup-role',
|
|
228
|
+
assumedBy: this.runnerBaseRole,
|
|
229
|
+
inlinePolicies: {
|
|
230
|
+
SecretsBackup: new aws_iam_1.PolicyDocument({
|
|
231
|
+
statements: [iamPolicyKMS, iamPolicyLambdaExecution],
|
|
232
|
+
}),
|
|
233
|
+
},
|
|
234
|
+
});
|
|
235
|
+
secretsBackUpRole.node.defaultChild.overrideLogicalId('GlRunnerSecretsBackupRole');
|
|
236
|
+
const deployRole = new aws_iam_1.Role(this, 'GlRunnerCDKDeployRole', {
|
|
237
|
+
roleName: 'gl-runner-cdk-deploy-role',
|
|
238
|
+
assumedBy: this.runnerBaseRole,
|
|
239
|
+
managedPolicies: [kafkaIntegrationPolicy], // required to create Kafka topics and publish event specification in deploy jobs
|
|
240
|
+
inlinePolicies: {
|
|
241
|
+
CdkDeploy: aws_iam_1.PolicyDocument.fromJson({
|
|
242
|
+
Version: '2012-10-17',
|
|
243
|
+
Statement: [
|
|
244
|
+
{
|
|
245
|
+
Effect: 'Allow',
|
|
246
|
+
Action: [
|
|
247
|
+
'cloudformation:DescribeStacks',
|
|
248
|
+
'cloudformation:CreateChangeSet',
|
|
249
|
+
'cloudformation:DescribeChangeSet',
|
|
250
|
+
'cloudformation:ExecuteChangeSet',
|
|
251
|
+
'cloudformation:DescribeStackEvents',
|
|
252
|
+
'cloudformation:DeleteChangeSet',
|
|
253
|
+
'cloudformation:GetTemplate',
|
|
254
|
+
],
|
|
255
|
+
Resource: [
|
|
256
|
+
`arn:aws:cloudformation:${props.env.region}:${props.env.account}:stack/*`,
|
|
257
|
+
],
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
Effect: 'Allow',
|
|
261
|
+
Action: ['s3:*Object', 's3:ListBucket', 's3:GetBucketLocation'],
|
|
262
|
+
Resource: ['arn:aws:s3:::cdktoolkit-*'],
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
Sid: 'assumerole',
|
|
266
|
+
Effect: 'Allow',
|
|
267
|
+
Action: ['sts:AssumeRole', 'iam:PassRole'],
|
|
268
|
+
Resource: [
|
|
269
|
+
'arn:aws:iam::*:role/cdk-readOnlyRole',
|
|
270
|
+
'arn:aws:iam::*:role/cdk-hnb659fds-deploy-role-*',
|
|
271
|
+
'arn:aws:iam::*:role/cdk-hnb659fds-file-publishing-*',
|
|
272
|
+
'arn:aws:iam::*:role/cdk-hnb659fds-lookup-role-*',
|
|
273
|
+
],
|
|
274
|
+
},
|
|
275
|
+
],
|
|
276
|
+
}),
|
|
277
|
+
CfnDeploy: aws_iam_1.PolicyDocument.fromJson({
|
|
278
|
+
Version: '2012-10-17',
|
|
279
|
+
Statement: [
|
|
280
|
+
{
|
|
281
|
+
Effect: 'Allow',
|
|
282
|
+
Action: ['*'],
|
|
283
|
+
Resource: [
|
|
284
|
+
`arn:aws:cloudformation:${props.env.region}:${props.env.account}:stack/*`,
|
|
285
|
+
],
|
|
286
|
+
Condition: {
|
|
287
|
+
'ForAnyValue:StringEquals': {
|
|
288
|
+
'aws:CalledVia': 'cloudformation.amazonaws.com',
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
],
|
|
293
|
+
}),
|
|
294
|
+
},
|
|
295
|
+
});
|
|
296
|
+
deployRole.node.defaultChild.overrideLogicalId('GlRunnerCDKDeployRole');
|
|
297
|
+
const glRunnerCdkDeployRoleArn = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKDeployRoleArn', {
|
|
298
|
+
value: deployRole.roleArn,
|
|
299
|
+
exportName: 'gl-runner-cdk-deploy-role-arn',
|
|
300
|
+
});
|
|
301
|
+
glRunnerCdkDeployRoleArn.overrideLogicalId('GlRunnerCDKDeployRoleArn');
|
|
302
|
+
const glRunnerCdkDeployRoleName = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKDeployRoleName', {
|
|
303
|
+
value: deployRole.roleName,
|
|
304
|
+
exportName: 'gl-runner-cdk-deploy-role-name',
|
|
305
|
+
});
|
|
306
|
+
glRunnerCdkDeployRoleName.overrideLogicalId('GlRunnerCDKDeployRoleName');
|
|
307
|
+
const glRunnerCdkCreateAndSignCertRoleName = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKCreateAndSignCertRoleName', {
|
|
308
|
+
value: createMSKCertRole.roleName,
|
|
309
|
+
exportName: 'gl-runner-cdk-create-and-sign-msk-cert-role-name',
|
|
310
|
+
});
|
|
311
|
+
glRunnerCdkCreateAndSignCertRoleName.overrideLogicalId('GlRunnerCDKCreateAndSignCertRoleName');
|
|
312
|
+
const glRunnerCdkCreateAndSignCertRoleArn = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKCreateAndSignCertRoleArn', {
|
|
313
|
+
value: createMSKCertRole.roleArn,
|
|
314
|
+
exportName: 'gl-runner-cdk-create-and-sign-msk-cert-role-arn',
|
|
315
|
+
});
|
|
316
|
+
glRunnerCdkCreateAndSignCertRoleArn.overrideLogicalId('GlRunnerCDKCreateAndSignCertRoleArn');
|
|
317
|
+
const glRunnerCdkPublishWebContentRoleName = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKPublishWebContentRoleName', {
|
|
318
|
+
value: webContentPublishRole.roleName,
|
|
319
|
+
exportName: 'gl-runner-cdk-publish-web-content-on-s3-role-name',
|
|
320
|
+
});
|
|
321
|
+
glRunnerCdkPublishWebContentRoleName.overrideLogicalId('GlRunnerCDKPublishWebContentRoleName');
|
|
322
|
+
const glRunnerCdkPublishWebContentRoleArn = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKPublishWebContentRoleArn', {
|
|
323
|
+
value: webContentPublishRole.roleArn,
|
|
324
|
+
exportName: 'gl-runner-cdk-publish-web-content-on-s3-role-arn',
|
|
325
|
+
});
|
|
326
|
+
glRunnerCdkPublishWebContentRoleArn.overrideLogicalId('GlRunnerCDKPublishWebContentRoleArn');
|
|
327
|
+
const glRunnerCdkDeployToEcrRoleName = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKDeployToEcrRoleName', {
|
|
328
|
+
value: ecrDeployRole.roleName,
|
|
329
|
+
exportName: 'gl-runner-cdk-deploy-to-ecr-role-name',
|
|
330
|
+
});
|
|
331
|
+
glRunnerCdkDeployToEcrRoleName.overrideLogicalId('GlRunnerCDKDeployToEcrRoleName');
|
|
332
|
+
const glRunnerCdkDeployToEcrRoleArn = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKDeployToEcrRoleArn', {
|
|
333
|
+
value: ecrDeployRole.roleArn,
|
|
334
|
+
exportName: 'gl-runner-cdk-deploy-to-ecr-role-arn',
|
|
335
|
+
});
|
|
336
|
+
glRunnerCdkDeployToEcrRoleArn.overrideLogicalId('GlRunnerCDKDeployToEcrRoleArn');
|
|
337
|
+
const glRunnerCdkSecretsBackupRoleName = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKSecretsBackupRoleName', {
|
|
338
|
+
value: secretsBackUpRole.roleName,
|
|
339
|
+
exportName: 'gl-runner-cdk-secrets-backup-role-name',
|
|
340
|
+
});
|
|
341
|
+
glRunnerCdkSecretsBackupRoleName.overrideLogicalId('GlRunnerCDKSecretsBackupRoleName');
|
|
342
|
+
const glRunnerCdkSecretsBackupRoleArn = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKSecretsBackupRoleArn', {
|
|
343
|
+
value: secretsBackUpRole.roleArn,
|
|
344
|
+
exportName: 'gl-runner-cdk-secrets-backup-role-arn',
|
|
345
|
+
});
|
|
346
|
+
glRunnerCdkSecretsBackupRoleArn.overrideLogicalId('GlRunnerCDKSecretsBackupRoleArn');
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
exports.RunnerRoles = RunnerRoles;
|
|
350
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
351
|
+
RunnerRoles[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.RunnerRoles", version: "0.0.0" };
|
|
352
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLXJvbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9ydW5uZXItcm9sZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBZ0U7QUFDaEUsaURBQXNFO0FBQ3RFLGlEQU82QjtBQUM3QiwrQ0FBNEM7QUFDNUMsaURBQXNEO0FBQ3RELDJDQUF1QztBQUN2QyxnRUFBMkQ7QUFNM0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFFeEMsWUFBWSxLQUFZLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzFELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsTUFBTSxvQkFBb0IsR0FBRyxpQ0FBYyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNFLE1BQU0saUJBQWlCLEdBQUcsaUNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzRSxNQUFNLG1CQUFtQixHQUFHLHlCQUFlLENBQUMsdUJBQXVCLENBQ2pFLElBQUksRUFDSixxQkFBcUIsRUFDckIsOEJBQThCLENBQy9CLENBQUM7UUFFRixNQUFNLDBCQUEwQixHQUM5Qix5QkFBZSxDQUFDLDZCQUE2QixDQUMzQyxJQUFJLEVBQ0osNEJBQTRCLEVBQzVCO1lBQ0UsYUFBYSxFQUFFLGtDQUFrQztTQUNsRCxDQUNGLENBQUM7UUFDSixNQUFNLGlCQUFpQixHQUFHLGVBQU0sQ0FBQyxjQUFjLENBQzdDLElBQUksRUFDSixtQkFBbUIsRUFDbkIsMEJBQTBCLENBQUMsV0FBVyxDQUN2QyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcseUJBQWUsQ0FBQyw2QkFBNkIsQ0FDakUsSUFBSSxFQUNKLG9CQUFvQixFQUNwQjtZQUNFLGFBQWEsRUFBRSx5Q0FBeUM7U0FDekQsQ0FDRixDQUFDO1FB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LEdBQUcsSUFBSSx1QkFBUyxDQUNsRCxLQUFLLEVBQ0wsZ0NBQWdDLEVBQ2hDO1lBQ0UsS0FBSyxFQUFFLGFBQWEsQ0FBQyxRQUFRO1lBQzdCLFVBQVUsRUFBRSx1Q0FBdUM7U0FDcEQsQ0FDRixDQUFDO1FBQ0YsOEJBQThCLENBQUMsaUJBQWlCLENBQzlDLGdDQUFnQyxDQUNqQyxDQUFDO1FBQ0YsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLHVCQUFTLENBQ2pELEtBQUssRUFDTCwrQkFBK0IsRUFDL0I7WUFDRSxLQUFLLEVBQUUsYUFBYSxDQUFDLE9BQU87WUFDNUIsVUFBVSxFQUFFLHNDQUFzQztTQUNuRCxDQUNGLENBQUM7UUFDRiw2QkFBNkIsQ0FBQyxpQkFBaUIsQ0FDN0MsK0JBQStCLENBQ2hDLENBQUM7UUFFRixNQUFNLGdDQUFnQyxHQUFHLElBQUksdUJBQVMsQ0FDcEQsS0FBSyxFQUNMLGtDQUFrQyxFQUNsQztZQUNFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxRQUFRO1lBQ2pDLFVBQVUsRUFBRSx3Q0FBd0M7U0FDckQsQ0FDRixDQUFDO1FBQ0YsZ0NBQWdDLENBQUMsaUJBQWlCLENBQ2hELGtDQUFrQyxDQUNuQyxDQUFDO1FBQ0YsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLHVCQUFTLENBQ25ELEtBQUssRUFDTCxpQ0FBaUMsRUFDakM7WUFDRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsT0FBTztZQUNoQyxVQUFVLEVBQUUsdUNBQXVDO1NBQ3BELENBQ0YsQ0FBQztRQUNGLCtCQUErQixDQUFDLGlCQUFpQixDQUMvQyxpQ0FBaUMsQ0FDbEMsQ0FBQztJQUNKLENBQUM7O0FBcmJILGtDQXNiQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCwgRW52aXJvbm1lbnQsIEZuLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFB1YmxpY0dhbGxlcnlBdXRob3JpemF0aW9uVG9rZW4gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyJztcbmltcG9ydCB7XG4gIENmblJvbGUsXG4gIE1hbmFnZWRQb2xpY3ksXG4gIFBvbGljeURvY3VtZW50LFxuICBQb2xpY3lTdGF0ZW1lbnQsXG4gIFJvbGUsXG4gIFNlcnZpY2VQcmluY2lwYWwsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBSaW9MYW5kaW5nWm9uZSB9IGZyb20gJy4uLy4uLy4uL3Jpby1sYW5kaW5nLXpvbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bm5lclJvbGVQcm9wcyB7XG4gIHJlYWRvbmx5IGVudjogRW52aXJvbm1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBjb25zdHJ1Y3QgcHJvdmlkZXMgYSBzZXQgb2YgYmFzZSByb2xlcyBmb3IgZ2l0bGFiIHJ1bm5lcnMgaW4gb3JkZXIgdG8gYnVpbGQsIHRlc3QsIHZhbGlkYXRlIGFuZCBkZXBsb3kgYXBwbGljYXRpb25zXG4gKiBvbiBSSU8uIFRoZSByb2xlcyBuZWVkIHRvIGJlIGFzc3VtZWQgZHVyaW5nIGpvYiBydW50aW1lIHRvIHBlcmZvcm0gbW9yZSBwZXJtaXNzaXZlIGFjdGlvbnMsIHN1Y2ggYXMgY3JlYXRpbmcgY2VydGlmaWNhdGVzIHRvXG4gKiBhdXRoZW50aWNhdGUgdG93YXJkcyB0aGUgUklPIE1TSywgcHVzaGluZyBkb2NrZXIgaW1hZ2VzIHRvIEVDUiwgcGVyZm9ybWluZyBhIHNlY3JldHMgYmFja3VwLCBkZXBsb3lpbmcgc3RhY2tzLFxuICogb3IgdG8gcHVibGlzaCBhbiBTUEEgdG8gYSBTMyBidWNrZXQuIERvIG5vdCBhc3N1bWUgdGhlIGRlcGxveW1lbnQgcm9sZSB1bmxlc3MgbmVlZGVkLlxuICogVGhlIGJhc2Ugcm9sZSBjYW4gYmUgdGhlIGRlZmF1bHQgcm9sZSBhdHRhY2hlZCB0byBHaXRMYWIgcnVubmVycy5cbiAqIFRoZSByb2xlIGFsbG93cyB0byByZWFkIHZhcmlvdXMgYmFzaWMgcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBOSVNUIGRhdGEgbWlycm9yLCB0aGUgT1NTIGxpY2Vuc2UgYnVja2V0LCBEYXRhRG9nIGtleXNcbiAqIGFuZCB0byBwdWxsIEVDUiBpbWFnZXMgZm9ybSBwdWJsaWMgR2FsbGVyeSBvciB0aGUgc3BlY2lmaWVkIGFjY291bnQgaW4gdGhlIGVudmlyb25tZW50LlxuICogVGhlIFJvbGUgQVJOcyBhcmUgZXhwb3J0IHVzaW5nIENGTk91dHB1dHMuIFVzZSB0aGUgb3V0cHV0cyB0byBjb25maWd1cmUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIHlvdXIgR2l0TGFiIGdyb3VwLlxuICovXG5leHBvcnQgY2xhc3MgUnVubmVyUm9sZXMgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICByZWFkb25seSBydW5uZXJCYXNlUm9sZTogUm9sZTtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IFN0YWNrLCBpZDogc3RyaW5nLCBwcm9wczogUnVubmVyUm9sZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBjb25zdCBhY2NvdW50TmFtZVBhcmFtZXRlciA9IFJpb0xhbmRpbmdab25lLmdldEFjY291bnROYW1lUGFyYW1ldGVyKHNjb3BlKTtcbiAgICBjb25zdCB0ZWFtTmFtZVBhcmFtZXRlciA9IFJpb0xhbmRpbmdab25lLmdldFRlYW1JZGVudGlmaWVyUGFyYW1ldGVyKHNjb3BlKTtcblxuICAgIGNvbnN0IG5pc3RNaXJyb3JQYXJhbWV0ZXIgPSBTdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ05pc3RNaXJyb3JQYXJhbWV0ZXInLFxuICAgICAgJy9jb25maWcvbmlzdC1kYXRhLW1pcnJvci91cmwnLFxuICAgICk7XG5cbiAgICBjb25zdCBvc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlciA9XG4gICAgICBTdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoXG4gICAgICAgIHRoaXMsXG4gICAgICAgICdPc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlcicsXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiAnL2NvbmZpZy9vc3MtbGljZW5zZXMvYnVja2V0LW5hbWUnLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICBjb25zdCBvc3NMaWNlbnNlc0J1Y2tldCA9IEJ1Y2tldC5mcm9tQnVja2V0TmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnT3NzTGljZW5zZXNCdWNrZXQnLFxuICAgICAgb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIuc3RyaW5nVmFsdWUsXG4gICAgKTtcblxuICAgIGNvbnN0IGRkQXBpS2V5UGFyYW0gPSBTdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoXG4gICAgICB0aGlzLFxuICAgICAgJ0RhdGFEb2dBcGlLZXlQYXJhbScsXG4gICAgICB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6ICcvcmlvL2NvbmZpZy9kYXRhZG9nLWludGVncmF0aW9uL2FwaS1rZXknLFxuICAgICAgfSxcbiAgICApO1xuICAgIGNvbnN0IGRkU2l0ZVBhcmFtID0gU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKFxuICAgICAgdGhpcyxcbiAgICAgICdEYXRhRG9nU2l0ZVBhcmFtJyxcbiAgICAgIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogJy9yaW8vY29uZmlnL2RhdGFkb2ctaW50ZWdyYXRpb24vc2l0ZScsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBrYWZrYUludGVncmF0aW9uUG9saWN5ID0gTWFuYWdlZFBvbGljeS5mcm9tTWFuYWdlZFBvbGljeUFybihcbiAgICAgIHRoaXMsXG4gICAgICAnS2Fma2FJbnRlZ3JhdGlvblBvbGljeScsXG4gICAgICBGbi5pbXBvcnRWYWx1ZSgna2Fma2EtaW50ZWdyYXRpb24tcG9saWN5LWFybicpLFxuICAgICk7XG5cbiAgICB0aGlzLnJ1bm5lckJhc2VSb2xlID0gbmV3IFJvbGUodGhpcywgJ0dsUnVubmVyQnVpbGRSb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbCgnZWMyLmFtYXpvbmF3cy5jb20nLCB7fSksXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBDZGtTeW50aExvb2tVcDogUG9saWN5RG9jdW1lbnQuZnJvbUpzb24oe1xuICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBBY3Rpb246IFsnczM6Kk9iamVjdCcsICdzMzpMaXN0QnVja2V0JywgJ3MzOkdldEJ1Y2tldExvY2F0aW9uJ10sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbJ2Fybjphd3M6czM6OjpjZGt0b29sa2l0LSonXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFNpZDogJ2Fzc3VtZXJvbGUnLFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIEFjdGlvbjogWydzdHM6QXNzdW1lUm9sZScsICdpYW06UGFzc1JvbGUnXSxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgICAnYXJuOmF3czppYW06Oio6cm9sZS9jZGstcmVhZE9ubHlSb2xlJyxcbiAgICAgICAgICAgICAgICAnYXJuOmF3czppYW06Oio6cm9sZS9jZGstaG5iNjU5ZmRzLWxvb2t1cC1yb2xlLSonLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgU2lkOiAncHVsbEVjckltYWdlcycsXG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ2VjcjpCYXRjaENoZWNrTGF5ZXJBdmFpbGFiaWxpdHknLFxuICAgICAgICAgICAgICAgICdlY3I6QmF0Y2hHZXRJbWFnZScsXG4gICAgICAgICAgICAgICAgJ2VjcjpEZXNjcmliZUltYWdlcycsXG4gICAgICAgICAgICAgICAgJ2VjcjpEZXNjcmliZVJlcG9zaXRvcmllcycsXG4gICAgICAgICAgICAgICAgJ2VjcjpHZXREb3dubG9hZFVybEZvckxheWVyJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgICBgJHtwcm9wcy5lbnYuYWNjb3VudH0uZGtyLmVjci4ke3Byb3BzLmVudi5yZWdpb259LmFtYXpvbmF3cy5jb20vKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICAodGhpcy5ydW5uZXJCYXNlUm9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Sb2xlKS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckJ1aWxkUm9sZScsXG4gICAgKTtcbiAgICBuaXN0TWlycm9yUGFyYW1ldGVyLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICBvc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlci5ncmFudFJlYWQodGhpcy5ydW5uZXJCYXNlUm9sZSk7XG4gICAgb3NzTGljZW5zZXNCdWNrZXQuZ3JhbnRSZWFkV3JpdGUodGhpcy5ydW5uZXJCYXNlUm9sZSk7XG4gICAgYWNjb3VudE5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIHRlYW1OYW1lUGFyYW1ldGVyLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICBkZEFwaUtleVBhcmFtLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICBkZFNpdGVQYXJhbS5ncmFudFJlYWQodGhpcy5ydW5uZXJCYXNlUm9sZSk7XG4gICAgUHVibGljR2FsbGVyeUF1dGhvcml6YXRpb25Ub2tlbi5ncmFudFJlYWQodGhpcy5ydW5uZXJCYXNlUm9sZSk7XG5cbiAgICBjb25zdCB3ZWJDb250ZW50UHVibGlzaFJvbGUgPSBuZXcgUm9sZShcbiAgICAgIHRoaXMsXG4gICAgICAnR2xSdW5uZXJTM1dlYkNvbnRlbnREZXBsb3lSb2xlJyxcbiAgICAgIHtcbiAgICAgICAgcm9sZU5hbWU6ICdnbC1ydW5uZXItd2ViLWNvbnRlbnQtczMtZGVwbG95LXJvbGUnLFxuICAgICAgICBhc3N1bWVkQnk6IHRoaXMucnVubmVyQmFzZVJvbGUsXG4gICAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgICAgUHVibGlzaFdlYkNvbnRlbnRPblMzOiBQb2xpY3lEb2N1bWVudC5mcm9tSnNvbih7XG4gICAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICAgICAgICdzMzpBYm9ydConLFxuICAgICAgICAgICAgICAgICAgJ3MzOkRlbGV0ZU9iamVjdConLFxuICAgICAgICAgICAgICAgICAgJ3MzOkdldEJ1Y2tldConLFxuICAgICAgICAgICAgICAgICAgJ3MzOkdldE9iamVjdConLFxuICAgICAgICAgICAgICAgICAgJ3MzOkxpc3QqJyxcbiAgICAgICAgICAgICAgICAgICdzMzpQdXRPYmplY3QnLFxuICAgICAgICAgICAgICAgICAgJ3MzOlB1dE9iamVjdExlZ2FsSG9sZCcsXG4gICAgICAgICAgICAgICAgICAnczM6UHV0T2JqZWN0UmV0ZW50aW9uJyxcbiAgICAgICAgICAgICAgICAgICdzMzpQdXRPYmplY3RUYWdnaW5nJyxcbiAgICAgICAgICAgICAgICAgICdzMzpQdXRPYmplY3RWZXJzaW9uVGFnZ2luZycsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBSZXNvdXJjZTogWydhcm46YXdzOnMzOjo6KiddLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgICAnc3NtOkRlc2NyaWJlUGFyYW1ldGVycycsXG4gICAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlcicsXG4gICAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlckhpc3RvcnknLFxuICAgICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXJzJyxcbiAgICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVyc0J5UGF0aCcsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnBhcmFtZXRlci9jb25maWcvKmAsXG4gICAgICAgICAgICAgICAgICBgYXJuOmF3czpzc206JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpwYXJhbWV0ZXIvc2VjcmV0LypgLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICAgICh3ZWJDb250ZW50UHVibGlzaFJvbGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuUm9sZSkub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJTM1dlYkNvbnRlbnREZXBsb3lSb2xlJyxcbiAgICApO1xuXG4gICAgY29uc3QgY3JlYXRlTVNLQ2VydFJvbGUgPSBuZXcgUm9sZSh0aGlzLCAnR2xSdW5uZXJDcmVhdGVBbmRTaWduQ2VydFJvbGUnLCB7XG4gICAgICByb2xlTmFtZTogJ2dsLXJ1bm5lci1jcmVhdGUtYW5kLXNpZ24tcmlvLW1zay1jZXJ0LXJvbGUnLFxuICAgICAgYXNzdW1lZEJ5OiB0aGlzLnJ1bm5lckJhc2VSb2xlLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgUGFyYW1ldGVyU3RvcmVSZWFkS2V5U3RvcmU6IFBvbGljeURvY3VtZW50LmZyb21Kc29uKHtcbiAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAgICdzc206RGVzY3JpYmVQYXJhbWV0ZXJzJyxcbiAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlcicsXG4gICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXJIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlcnMnLFxuICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVyc0J5UGF0aCcsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpzc206JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpwYXJhbWV0ZXIvY29uZmlnLypgLFxuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnBhcmFtZXRlci9zZWNyZXQvKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgICBTZWNyZXRzTWFuYWdlclJlYWRLZXlTdG9yZTogUG9saWN5RG9jdW1lbnQuZnJvbUpzb24oe1xuICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ3NlY3JldHNtYW5hZ2VyOkRlc2NyaWJlU2VjcmV0JyxcbiAgICAgICAgICAgICAgICAnc2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUnLFxuICAgICAgICAgICAgICAgICdzZWNyZXRzbWFuYWdlcjpHZXRSZXNvdXJjZVBvbGljeScsXG4gICAgICAgICAgICAgICAgJ3NlY3JldHNtYW5hZ2VyOkxpc3RTZWNyZXRWZXJzaW9uSWRzJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNlY3JldHNtYW5hZ2VyOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06c2VjcmV0Oi9zZWNyZXQvKi9zZXJ2aWNlLWtleXN0b3JlLXBhc3N3b3JkLT8/Pz8/P2AsXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzZWNyZXQ6L3NlY3JldC8qL3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmRgLFxuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNlY3JldHNtYW5hZ2VyOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06c2VjcmV0Oi9jb25maWcvKi9zZXJ2aWNlLWtleXN0b3JlLXBhc3N3b3JkLT8/Pz8/P2AsXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzZWNyZXQ6L2NvbmZpZy8qL3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmRgLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtrYWZrYUludGVncmF0aW9uUG9saWN5XSxcbiAgICB9KTtcbiAgICBhY2NvdW50TmFtZVBhcmFtZXRlci5ncmFudFJlYWQoY3JlYXRlTVNLQ2VydFJvbGUpO1xuICAgIHRlYW1OYW1lUGFyYW1ldGVyLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICAoY3JlYXRlTVNLQ2VydFJvbGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuUm9sZSkub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDcmVhdGVBbmRTaWduQ2VydFJvbGUnLFxuICAgICk7XG5cbiAgICBjb25zdCBlY3JEZXBsb3lSb2xlID0gbmV3IFJvbGUodGhpcywgJ0dsUnVubmVyRUNSRGVwbG95Um9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnZ2wtcnVubmVyLWRlcGxveS10by1lY3Itcm9sZScsXG4gICAgICBhc3N1bWVkQnk6IHRoaXMucnVubmVyQmFzZVJvbGUsXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBEZXBsb3lUb0VDUjogUG9saWN5RG9jdW1lbnQuZnJvbUpzb24oe1xuICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ2VjcjpCYXRjaENoZWNrTGF5ZXJBdmFpbGFiaWxpdHknLFxuICAgICAgICAgICAgICAgICdlY3I6QmF0Y2hHZXRJbWFnZScsXG4gICAgICAgICAgICAgICAgJ2VjcjpDb21wbGV0ZUxheWVyVXBsb2FkJyxcbiAgICAgICAgICAgICAgICAnZWNyOkdldERvd25sb2FkVXJsRm9yTGF5ZXInLFxuICAgICAgICAgICAgICAgICdlY3I6SW5pdGlhdGVMYXllclVwbG9hZCcsXG4gICAgICAgICAgICAgICAgJ2VjcjpQdXRJbWFnZScsXG4gICAgICAgICAgICAgICAgJ2VjcjpVcGxvYWRMYXllclBhcnQnLFxuICAgICAgICAgICAgICAgICdlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuJyxcbiAgICAgICAgICAgICAgICAnZWNyOkRlc2NyaWJlUmVwb3NpdG9yaWVzJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgICAgIGAke3Byb3BzLmVudi5hY2NvdW50fS5ka3IuZWNyLiR7cHJvcHMuZW52LnJlZ2lvbn0uYW1hem9uYXdzLmNvbS8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIFB1YmxpY0dhbGxlcnlBdXRob3JpemF0aW9uVG9rZW4uZ3JhbnRSZWFkKGVjckRlcGxveVJvbGUpO1xuICAgIChlY3JEZXBsb3lSb2xlLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblJvbGUpLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyRUNSRGVwbG95Um9sZScsXG4gICAgKTtcblxuICAgIGNvbnN0IGlhbVBvbGljeUtNUyA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgYWN0aW9uczogWydrbXM6RGVjcnlwdCddLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICdhcm46YXdzOmttczoqOjkwMzQwNDM4NjU1MDprZXkvKicsXG4gICAgICAgIGBhcm46YXdzOmttczoqOiR7cHJvcHMuZW52LmFjY291bnR9OmtleS8qYCxcbiAgICAgIF0sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICdGb3JBbnlWYWx1ZTpTdHJpbmdMaWtlJzoge1xuICAgICAgICAgICdrbXM6UmVzb3VyY2VBbGlhc2VzJzogJ2FsaWFzL3Jpby1sei1iYWNrdXAta2V5KicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGlhbVBvbGljeUxhbWJkYUV4ZWN1dGlvbiA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgYWN0aW9uczogWydsYW1iZGE6SW52b2tlRnVuY3Rpb24nXSxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICBgYXJuOmF3czpsYW1iZGE6ZXUtd2VzdC0xOiR7cHJvcHMuZW52LmFjY291bnR9OmZ1bmN0aW9uOlNlY3JldHNSZXN0b3JlSGFuZGxlcmAsXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGNvbnN0IHNlY3JldHNCYWNrVXBSb2xlID0gbmV3IFJvbGUodGhpcywgJ0dsUnVubmVyU2VjcmV0c0JhY2t1cFJvbGUnLCB7XG4gICAgICByb2xlTmFtZTogJ2dsLXJ1bm5lci1zZWNyZXRzLWJhY2t1cC1yb2xlJyxcbiAgICAgIGFzc3VtZWRCeTogdGhpcy5ydW5uZXJCYXNlUm9sZSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIFNlY3JldHNCYWNrdXA6IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW2lhbVBvbGljeUtNUywgaWFtUG9saWN5TGFtYmRhRXhlY3V0aW9uXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIChzZWNyZXRzQmFja1VwUm9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Sb2xlKS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lclNlY3JldHNCYWNrdXBSb2xlJyxcbiAgICApO1xuXG4gICAgY29uc3QgZGVwbG95Um9sZSA9IG5ldyBSb2xlKHRoaXMsICdHbFJ1bm5lckNES0RlcGxveVJvbGUnLCB7XG4gICAgICByb2xlTmFtZTogJ2dsLXJ1bm5lci1jZGstZGVwbG95LXJvbGUnLFxuICAgICAgYXNzdW1lZEJ5OiB0aGlzLnJ1bm5lckJhc2VSb2xlLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBba2Fma2FJbnRlZ3JhdGlvblBvbGljeV0sIC8vIHJlcXVpcmVkIHRvIGNyZWF0ZSBLYWZrYSB0b3BpY3MgYW5kIHB1Ymxpc2ggZXZlbnQgc3BlY2lmaWNhdGlvbiBpbiBkZXBsb3kgam9ic1xuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgQ2RrRGVwbG95OiBQb2xpY3lEb2N1bWVudC5mcm9tSnNvbih7XG4gICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrcycsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkNyZWF0ZUNoYW5nZVNldCcsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkRlc2NyaWJlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAgICAgICAnY2xvdWRmb3JtYXRpb246RXhlY3V0ZUNoYW5nZVNldCcsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tFdmVudHMnLFxuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpEZWxldGVDaGFuZ2VTZXQnLFxuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpHZXRUZW1wbGF0ZScsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6Y2xvdWRmb3JtYXRpb246JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzdGFjay8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbJ3MzOipPYmplY3QnLCAnczM6TGlzdEJ1Y2tldCcsICdzMzpHZXRCdWNrZXRMb2NhdGlvbiddLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogWydhcm46YXdzOnMzOjo6Y2RrdG9vbGtpdC0qJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBTaWQ6ICdhc3N1bWVyb2xlJyxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBBY3Rpb246IFsnc3RzOkFzc3VtZVJvbGUnLCAnaWFtOlBhc3NSb2xlJ10sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjoqOnJvbGUvY2RrLXJlYWRPbmx5Um9sZScsXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjoqOnJvbGUvY2RrLWhuYjY1OWZkcy1kZXBsb3ktcm9sZS0qJyxcbiAgICAgICAgICAgICAgICAnYXJuOmF3czppYW06Oio6cm9sZS9jZGstaG5iNjU5ZmRzLWZpbGUtcHVibGlzaGluZy0qJyxcbiAgICAgICAgICAgICAgICAnYXJuOmF3czppYW06Oio6cm9sZS9jZGstaG5iNjU5ZmRzLWxvb2t1cC1yb2xlLSonLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICAgQ2ZuRGVwbG95OiBQb2xpY3lEb2N1bWVudC5mcm9tSnNvbih7XG4gICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIEFjdGlvbjogWycqJ10sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6Y2xvdWRmb3JtYXRpb246JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzdGFjay8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgQ29uZGl0aW9uOiB7XG4gICAgICAgICAgICAgICAgJ0ZvckFueVZhbHVlOlN0cmluZ0VxdWFscyc6IHtcbiAgICAgICAgICAgICAgICAgICdhd3M6Q2FsbGVkVmlhJzogJ2Nsb3VkZm9ybWF0aW9uLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICAoZGVwbG95Um9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Sb2xlKS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNES0RlcGxveVJvbGUnLFxuICAgICk7XG5cbiAgICBjb25zdCBnbFJ1bm5lckNka0RlcGxveVJvbGVBcm4gPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtEZXBsb3lSb2xlQXJuJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGRlcGxveVJvbGUucm9sZUFybixcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstZGVwbG95LXJvbGUtYXJuJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka0RlcGxveVJvbGVBcm4ub3ZlcnJpZGVMb2dpY2FsSWQoJ0dsUnVubmVyQ0RLRGVwbG95Um9sZUFybicpO1xuICAgIGNvbnN0IGdsUnVubmVyQ2RrRGVwbG95Um9sZU5hbWUgPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtEZXBsb3lSb2xlTmFtZScsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBkZXBsb3lSb2xlLnJvbGVOYW1lLFxuICAgICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1kZXBsb3ktcm9sZS1uYW1lJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka0RlcGxveVJvbGVOYW1lLm92ZXJyaWRlTG9naWNhbElkKCdHbFJ1bm5lckNES0RlcGxveVJvbGVOYW1lJyk7XG5cbiAgICBjb25zdCBnbFJ1bm5lckNka0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZU5hbWUgPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtDcmVhdGVBbmRTaWduQ2VydFJvbGVOYW1lJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGNyZWF0ZU1TS0NlcnRSb2xlLnJvbGVOYW1lLFxuICAgICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1jcmVhdGUtYW5kLXNpZ24tbXNrLWNlcnQtcm9sZS1uYW1lJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZU5hbWUub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtDcmVhdGVBbmRTaWduQ2VydFJvbGVOYW1lJyxcbiAgICApO1xuICAgIGNvbnN0IGdsUnVubmVyQ2RrQ3JlYXRlQW5kU2lnbkNlcnRSb2xlQXJuID0gbmV3IENmbk91dHB1dChcbiAgICAgIHNjb3BlLFxuICAgICAgJ0dsUnVubmVyQ0RLQ3JlYXRlQW5kU2lnbkNlcnRSb2xlQXJuJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGNyZWF0ZU1TS0NlcnRSb2xlLnJvbGVBcm4sXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLWNyZWF0ZS1hbmQtc2lnbi1tc2stY2VydC1yb2xlLWFybicsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtDcmVhdGVBbmRTaWduQ2VydFJvbGVBcm4ub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtDcmVhdGVBbmRTaWduQ2VydFJvbGVBcm4nLFxuICAgICk7XG5cbiAgICBjb25zdCBnbFJ1bm5lckNka1B1Ymxpc2hXZWJDb250ZW50Um9sZU5hbWUgPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtQdWJsaXNoV2ViQ29udGVudFJvbGVOYW1lJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHdlYkNvbnRlbnRQdWJsaXNoUm9sZS5yb2xlTmFtZSxcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstcHVibGlzaC13ZWItY29udGVudC1vbi1zMy1yb2xlLW5hbWUnLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrUHVibGlzaFdlYkNvbnRlbnRSb2xlTmFtZS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNES1B1Ymxpc2hXZWJDb250ZW50Um9sZU5hbWUnLFxuICAgICk7XG4gICAgY29uc3QgZ2xSdW5uZXJDZGtQdWJsaXNoV2ViQ29udGVudFJvbGVBcm4gPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtQdWJsaXNoV2ViQ29udGVudFJvbGVBcm4nLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogd2ViQ29udGVudFB1Ymxpc2hSb2xlLnJvbGVBcm4sXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLXB1Ymxpc2gtd2ViLWNvbnRlbnQtb24tczMtcm9sZS1hcm4nLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrUHVibGlzaFdlYkNvbnRlbnRSb2xlQXJuLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQ0RLUHVibGlzaFdlYkNvbnRlbnRSb2xlQXJuJyxcbiAgICApO1xuXG4gICAgY29uc3QgZ2xSdW5uZXJDZGtEZXBsb3lUb0VjclJvbGVOYW1lID0gbmV3IENmbk91dHB1dChcbiAgICAgIHNjb3BlLFxuICAgICAgJ0dsUnVubmVyQ0RLRGVwbG95VG9FY3JSb2xlTmFtZScsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBlY3JEZXBsb3lSb2xlLnJvbGVOYW1lLFxuICAgICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1kZXBsb3ktdG8tZWNyLXJvbGUtbmFtZScsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtEZXBsb3lUb0VjclJvbGVOYW1lLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQ0RLRGVwbG95VG9FY3JSb2xlTmFtZScsXG4gICAgKTtcbiAgICBjb25zdCBnbFJ1bm5lckNka0RlcGxveVRvRWNyUm9sZUFybiA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES0RlcGxveVRvRWNyUm9sZUFybicsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBlY3JEZXBsb3lSb2xlLnJvbGVBcm4sXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLWRlcGxveS10by1lY3Itcm9sZS1hcm4nLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrRGVwbG95VG9FY3JSb2xlQXJuLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQ0RLRGVwbG95VG9FY3JSb2xlQXJuJyxcbiAgICApO1xuXG4gICAgY29uc3QgZ2xSdW5uZXJDZGtTZWNyZXRzQmFja3VwUm9sZU5hbWUgPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtTZWNyZXRzQmFja3VwUm9sZU5hbWUnLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogc2VjcmV0c0JhY2tVcFJvbGUucm9sZU5hbWUsXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLXNlY3JldHMtYmFja3VwLXJvbGUtbmFtZScsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtTZWNyZXRzQmFja3VwUm9sZU5hbWUub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtTZWNyZXRzQmFja3VwUm9sZU5hbWUnLFxuICAgICk7XG4gICAgY29uc3QgZ2xSdW5uZXJDZGtTZWNyZXRzQmFja3VwUm9sZUFybiA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES1NlY3JldHNCYWNrdXBSb2xlQXJuJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHNlY3JldHNCYWNrVXBSb2xlLnJvbGVBcm4sXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLXNlY3JldHMtYmFja3VwLXJvbGUtYXJuJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka1NlY3JldHNCYWNrdXBSb2xlQXJuLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQ0RLU2VjcmV0c0JhY2t1cFJvbGVBcm4nLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
/**
|
|
3
|
+
* The construct creates a service linked role required to run GitLab Runners using Spot EC2 instances.
|
|
4
|
+
*/
|
|
5
|
+
export declare class SpotServiceLinkedRole extends Construct {
|
|
6
|
+
constructor(scope: Construct, id: string);
|
|
7
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.SpotServiceLinkedRole = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
7
|
+
const constructs_1 = require("constructs");
|
|
8
|
+
/**
|
|
9
|
+
* The construct creates a service linked role required to run GitLab Runners using Spot EC2 instances.
|
|
10
|
+
*/
|
|
11
|
+
class SpotServiceLinkedRole extends constructs_1.Construct {
|
|
12
|
+
constructor(scope, id) {
|
|
13
|
+
super(scope, id);
|
|
14
|
+
new aws_iam_1.CfnServiceLinkedRole(scope, 'Ec2SpotServiceLinkedRole', {
|
|
15
|
+
awsServiceName: 'spot.amazonaws.com',
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.SpotServiceLinkedRole = SpotServiceLinkedRole;
|
|
20
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
21
|
+
SpotServiceLinkedRole[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.SpotServiceLinkedRole", version: "0.0.0" };
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1yb2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9zcG90LXJvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpREFBMkQ7QUFDM0QsMkNBQXVDO0FBR3ZDOztHQUVHO0FBQ0gsTUFBYSxxQkFBc0IsU0FBUSxzQkFBUztJQUNsRCxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksOEJBQW9CLENBQUMsS0FBSyxFQUFFLDBCQUEwQixFQUFFO1lBQzFELGNBQWMsRUFBRSxvQkFBb0I7U0FDckMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFOSCxzREFPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmblNlcnZpY2VMaW5rZWRSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuXG4vKipcbiAqIFRoZSBjb25zdHJ1Y3QgY3JlYXRlcyBhIHNlcnZpY2UgbGlua2VkIHJvbGUgcmVxdWlyZWQgdG8gcnVuIEdpdExhYiBSdW5uZXJzIHVzaW5nIFNwb3QgRUMyIGluc3RhbmNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNwb3RTZXJ2aWNlTGlua2VkUm9sZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIG5ldyBDZm5TZXJ2aWNlTGlua2VkUm9sZShzY29wZSwgJ0VjMlNwb3RTZXJ2aWNlTGlua2VkUm9sZScsIHtcbiAgICAgIGF3c1NlcnZpY2VOYW1lOiAnc3BvdC5hbWF6b25hd3MuY29tJyxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
package/lib/index.d.ts
CHANGED
|
@@ -21,3 +21,4 @@ export * from './contributions/team-claid/datadog-usage-monitoring';
|
|
|
21
21
|
export * from './contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor';
|
|
22
22
|
export * from './backup';
|
|
23
23
|
export * as backup from './backup';
|
|
24
|
+
export * from './contributions/smart-route/gitlab-runner';
|
package/lib/index.js
CHANGED
|
@@ -38,4 +38,5 @@ __exportStar(require("./contributions/team-claid/datadog-usage-monitoring"), exp
|
|
|
38
38
|
__exportStar(require("./contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor"), exports);
|
|
39
39
|
__exportStar(require("./backup"), exports);
|
|
40
40
|
exports.backup = require("./backup");
|
|
41
|
-
|
|
41
|
+
__exportStar(require("./contributions/smart-route/gitlab-runner"), exports);
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBMkI7QUFFM0IsNkNBQTJDO0FBRTNDLHFEQUFtQztBQUNuQyxzREFBb0M7QUFDcEMsb0RBQWtDO0FBRWxDLGdFQUE4QztBQUM5Qyx1Q0FBcUM7QUFFckMseUVBQXVEO0FBQ3ZELDhFQUE0RDtBQUM1RCwrREFBNkM7QUFFN0MsMENBQXdCO0FBQ3hCLG1DQUFpQztBQUVqQyw0Q0FBMEI7QUFDMUIsdUNBQXFDO0FBQ3JDLDJDQUF5QztBQUV6QywwRUFBd0Q7QUFFeEQsNkVBQTJEO0FBQzNELDhFQUE0RDtBQUU1RCxtRkFBaUU7QUFDakUsc0ZBQW9FO0FBRXBFLDBHQUF3RjtBQUV4RiwyQ0FBeUI7QUFDekIscUNBQW1DO0FBRW5DLDRFQUEwRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vd2F0Y2hmdWwnO1xuXG5leHBvcnQgKiBhcyB3YXRjaGZ1bHYyIGZyb20gJy4vd2F0Y2hmdWx2Mic7XG5cbmV4cG9ydCAqIGZyb20gJy4vcmlvLWxhbmRpbmctem9uZSc7XG5leHBvcnQgKiBmcm9tICcuL3Jpby1sb2FkLWJhbGFuY2VyJztcbmV4cG9ydCAqIGZyb20gJy4vcmlvLWNsYWlkb21ldGVyJztcblxuZXhwb3J0ICogZnJvbSAnLi9mYXJnYXRlL3Jpby1mYXJnYXRlLXNlcnZpY2UnO1xuZXhwb3J0ICogYXMgZmFyZ2F0ZSBmcm9tICcuL2ZhcmdhdGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lL3Jpby1iaXRidWNrZXQtc291cmNlLWFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lL3Jpby1iYWNrdXAtc2VjcmV0cy1yZXN0b3JlLXN0YWdlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUvcmlvLXBpcGVsaW5lLXR5cGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2thZmthJztcbmV4cG9ydCAqIGFzIGthZmthIGZyb20gJy4va2Fma2EnO1xuXG5leHBvcnQgKiBmcm9tICcuL2RhdGFkb2cnO1xuZXhwb3J0ICogYXMgZGF0YWRvZyBmcm9tICcuL2RhdGFkb2cnO1xuZXhwb3J0ICogYXMgZGF0YWRvZ3YyIGZyb20gJy4vZGF0YWRvZ3YyJztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL2NvcC1mcm9udGVuZC9jbG91ZGZyb250JztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9kYXRhZG9nJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvbnRyaWJ1dGlvbnMvdGVhbS1jbGFpZC9hd3MtYmFja3VwLW1vbml0b3JpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tY2xhaWQvZGF0YWRvZy11c2FnZS1tb25pdG9yaW5nJztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tb3Vib3V0LW9yZGVyLWJvb2svYXdzLWVjcy1hYnJ1cHRseS1zdG9wcGVkLW1vbml0b3InO1xuXG5leHBvcnQgKiBmcm9tICcuL2JhY2t1cCc7XG5leHBvcnQgKiBhcyBiYWNrdXAgZnJvbSAnLi9iYWNrdXAnO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lcic7XG4iXX0=
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
],
|
|
16
16
|
"main": "lib/index.js",
|
|
17
17
|
"license": "Apache-2.0",
|
|
18
|
-
"version": "6.
|
|
18
|
+
"version": "6.2.2",
|
|
19
19
|
"types": "lib/index.d.ts",
|
|
20
20
|
"stability": "stable",
|
|
21
21
|
"exports": {
|
|
@@ -51,7 +51,8 @@
|
|
|
51
51
|
"bump": "commit-and-tag-version -a",
|
|
52
52
|
"test": "jest --coverage",
|
|
53
53
|
"test:watch": "jest --watch",
|
|
54
|
-
"eslint": "eslint --ext .ts,.tsx --
|
|
54
|
+
"eslint": "eslint --ext .ts,.tsx --no-error-on-unmatched-pattern src test",
|
|
55
|
+
"eslint-fix": "eslint --ext .ts,.tsx --fix --no-error-on-unmatched-pattern src test",
|
|
55
56
|
"docgen": "jsii-docgen -o ./docs/API.md",
|
|
56
57
|
"cdk": "cdk",
|
|
57
58
|
"release:check": "node release-commit-check.js",
|
|
@@ -99,6 +100,9 @@
|
|
|
99
100
|
"@datadog/datadog-api-client": "^1.24.0",
|
|
100
101
|
"js-yaml": "~4.1.0"
|
|
101
102
|
},
|
|
103
|
+
"optionalDependencies": {
|
|
104
|
+
"@pepperize/cdk-autoscaling-gitlab-runner": "^0.2.613"
|
|
105
|
+
},
|
|
102
106
|
"bundledDependencies": [
|
|
103
107
|
"js-yaml"
|
|
104
108
|
],
|
package/version.json
CHANGED