@aws-cdk/aws-imagebuilder-alpha 2.229.1-alpha.0 → 2.231.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +9966 -4578
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +221 -1
- package/README.md +796 -3
- package/awslint.json +1 -0
- package/lib/amazon-managed-image.d.ts +242 -0
- package/lib/amazon-managed-image.js +522 -0
- package/lib/base-image.d.ts +13 -0
- package/lib/base-image.js +39 -4
- package/lib/component.js +8 -8
- package/lib/container-recipe.js +4 -4
- package/lib/distribution-configuration.js +2 -2
- package/lib/image-pipeline.d.ts +465 -0
- package/lib/image-pipeline.js +469 -0
- package/lib/image-recipe.js +1 -1
- package/lib/image.d.ts +339 -0
- package/lib/image.js +357 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +5 -1
- package/lib/infrastructure-configuration.d.ts +1 -1
- package/lib/infrastructure-configuration.js +2 -2
- package/lib/lifecycle-policy.d.ts +409 -0
- package/lib/lifecycle-policy.js +459 -0
- package/lib/os-version.js +1 -1
- package/lib/private/constants.d.ts +7 -0
- package/lib/private/constants.js +11 -0
- package/lib/private/image-and-pipeline-props-helper.d.ts +26 -0
- package/lib/private/image-and-pipeline-props-helper.js +67 -0
- package/lib/private/policy-helper.d.ts +21 -0
- package/lib/private/policy-helper.js +420 -0
- package/lib/recipe-base.js +1 -1
- package/lib/workflow.d.ts +63 -0
- package/lib/workflow.js +51 -6
- package/package.json +6 -6
- package/rosetta/default.ts-fixture +41 -2
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildWorkflows = exports.buildImageScanningConfiguration = exports.buildImageTestsConfiguration = void 0;
|
|
4
|
+
const cdk = require("aws-cdk-lib");
|
|
5
|
+
/**
|
|
6
|
+
* Generates the image tests configuration property into the `ImageTestsConfiguration` type in the CloudFormation L1
|
|
7
|
+
* definition.
|
|
8
|
+
*
|
|
9
|
+
* @param props Props input for the construct
|
|
10
|
+
*/
|
|
11
|
+
const buildImageTestsConfiguration = (props) => {
|
|
12
|
+
if (props.imageTestsEnabled === undefined) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
return { imageTestsEnabled: props.imageTestsEnabled };
|
|
16
|
+
};
|
|
17
|
+
exports.buildImageTestsConfiguration = buildImageTestsConfiguration;
|
|
18
|
+
/**
|
|
19
|
+
* Generates the image scanning configuration property into the `ImageScanningConfiguration` type in the CloudFormation
|
|
20
|
+
* L1 definition.
|
|
21
|
+
*
|
|
22
|
+
* @param scope The construct scope
|
|
23
|
+
* @param props Props input for the construct
|
|
24
|
+
*/
|
|
25
|
+
const buildImageScanningConfiguration = (scope, props) => {
|
|
26
|
+
if (!props.recipe._isContainerRecipe() && props.imageScanningEcrRepository !== undefined) {
|
|
27
|
+
throw new cdk.ValidationError('imageScanningEcrRepository is only supported for container recipe builds', scope);
|
|
28
|
+
}
|
|
29
|
+
if (!props.recipe._isContainerRecipe() && props.imageScanningEcrTags !== undefined) {
|
|
30
|
+
throw new cdk.ValidationError('imageScanningEcrTags is only supported for container recipe builds', scope);
|
|
31
|
+
}
|
|
32
|
+
const ecrConfiguration = {
|
|
33
|
+
...(props.imageScanningEcrRepository !== undefined && {
|
|
34
|
+
repositoryName: props.imageScanningEcrRepository.repositoryName,
|
|
35
|
+
}),
|
|
36
|
+
...((props.imageScanningEcrTags ?? []).length && { containerTags: props.imageScanningEcrTags }),
|
|
37
|
+
};
|
|
38
|
+
const imageScanningConfiguration = {
|
|
39
|
+
...(props.imageScanningEnabled !== undefined && { imageScanningEnabled: props.imageScanningEnabled }),
|
|
40
|
+
...(Object.keys(ecrConfiguration).length && { ecrConfiguration }),
|
|
41
|
+
};
|
|
42
|
+
return Object.keys(imageScanningConfiguration).length ? imageScanningConfiguration : undefined;
|
|
43
|
+
};
|
|
44
|
+
exports.buildImageScanningConfiguration = buildImageScanningConfiguration;
|
|
45
|
+
/**
|
|
46
|
+
* Generates the workflows property into the `WorkflowConfiguration` type in the CloudFormation L1
|
|
47
|
+
* definition.
|
|
48
|
+
*
|
|
49
|
+
* @param props Props input for the construct
|
|
50
|
+
*/
|
|
51
|
+
const buildWorkflows = (props) => {
|
|
52
|
+
const cfnWorkflows = props.workflows?.map((workflow) => {
|
|
53
|
+
const parameters = Object.entries(workflow.parameters ?? {}).map(([name, value]) => ({
|
|
54
|
+
name,
|
|
55
|
+
value: value.value,
|
|
56
|
+
}));
|
|
57
|
+
return {
|
|
58
|
+
workflowArn: workflow.workflow.workflowArn,
|
|
59
|
+
onFailure: workflow.onFailure,
|
|
60
|
+
parallelGroup: workflow.parallelGroup,
|
|
61
|
+
...(parameters.length && { parameters }),
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
return cfnWorkflows?.length ? cfnWorkflows : undefined;
|
|
65
|
+
};
|
|
66
|
+
exports.buildWorkflows = buildWorkflows;
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtYW5kLXBpcGVsaW5lLXByb3BzLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltYWdlLWFuZC1waXBlbGluZS1wcm9wcy1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW1DO0FBTW5DOzs7OztHQUtHO0FBQ0ksTUFBTSw0QkFBNEIsR0FBRyxDQUkxQyxLQUFhLEVBQ1EsRUFBRTtJQUN2QixJQUFJLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMxQyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBYSxDQUFDO0FBQ25FLENBQUMsQ0FBQztBQVhXLFFBQUEsNEJBQTRCLGdDQVd2QztBQUVGOzs7Ozs7R0FNRztBQUNJLE1BQU0sK0JBQStCLEdBQUcsQ0FJN0MsS0FBZ0IsRUFDaEIsS0FBYSxFQUNRLEVBQUU7SUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxLQUFLLENBQUMsMEJBQTBCLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDekYsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsMEVBQTBFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkgsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLElBQUksS0FBSyxDQUFDLG9CQUFvQixLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ25GLE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLG9FQUFvRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRCxNQUFNLGdCQUFnQixHQUE4QztRQUNsRSxHQUFHLENBQUMsS0FBSyxDQUFDLDBCQUEwQixLQUFLLFNBQVMsSUFBSTtZQUNwRCxjQUFjLEVBQUUsS0FBSyxDQUFDLDBCQUEwQixDQUFDLGNBQWM7U0FDaEUsQ0FBQztRQUNGLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7S0FDaEcsQ0FBQztJQUVGLE1BQU0sMEJBQTBCLEdBQUc7UUFDakMsR0FBRyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsS0FBSyxTQUFTLElBQUksRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNyRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLGdCQUFnQixFQUFFLENBQUM7S0FDbEUsQ0FBQztJQUVGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsMEJBQXNDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUM5RyxDQUFDLENBQUM7QUE1QlcsUUFBQSwrQkFBK0IsbUNBNEIxQztBQUVGOzs7OztHQUtHO0FBQ0ksTUFBTSxjQUFjLEdBQUcsQ0FJNUIsS0FBYSxFQUNRLEVBQUU7SUFDdkIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNyRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkYsSUFBSTtZQUNKLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztTQUNuQixDQUFDLENBQUMsQ0FBQztRQUNKLE9BQU87WUFDTCxXQUFXLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXO1lBQzFDLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztZQUM3QixhQUFhLEVBQUUsUUFBUSxDQUFDLGFBQWE7WUFDckMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztTQUN6QyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFFLFlBQXdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN0RSxDQUFDLENBQUM7QUFwQlcsUUFBQSxjQUFjLGtCQW9CekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ2ZuSW1hZ2UsIENmbkltYWdlUGlwZWxpbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaW1hZ2VidWlsZGVyJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSW1hZ2VQcm9wcyB9IGZyb20gJy4uL2ltYWdlJztcbmltcG9ydCB7IEltYWdlUGlwZWxpbmVQcm9wcyB9IGZyb20gJy4uL2ltYWdlLXBpcGVsaW5lJztcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGltYWdlIHRlc3RzIGNvbmZpZ3VyYXRpb24gcHJvcGVydHkgaW50byB0aGUgYEltYWdlVGVzdHNDb25maWd1cmF0aW9uYCB0eXBlIGluIHRoZSBDbG91ZEZvcm1hdGlvbiBMMVxuICogZGVmaW5pdGlvbi5cbiAqXG4gKiBAcGFyYW0gcHJvcHMgUHJvcHMgaW5wdXQgZm9yIHRoZSBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkSW1hZ2VUZXN0c0NvbmZpZ3VyYXRpb24gPSA8XG4gIFByb3BzVCBleHRlbmRzIEltYWdlUGlwZWxpbmVQcm9wcyB8IEltYWdlUHJvcHMsXG4gIE91dHB1dFQgZXh0ZW5kcyBDZm5JbWFnZVBpcGVsaW5lLkltYWdlVGVzdHNDb25maWd1cmF0aW9uUHJvcGVydHkgfCBDZm5JbWFnZS5JbWFnZVRlc3RzQ29uZmlndXJhdGlvblByb3BlcnR5LFxuPihcbiAgcHJvcHM6IFByb3BzVCxcbik6IE91dHB1dFQgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAocHJvcHMuaW1hZ2VUZXN0c0VuYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4geyBpbWFnZVRlc3RzRW5hYmxlZDogcHJvcHMuaW1hZ2VUZXN0c0VuYWJsZWQgfSBhcyBPdXRwdXRUO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGltYWdlIHNjYW5uaW5nIGNvbmZpZ3VyYXRpb24gcHJvcGVydHkgaW50byB0aGUgYEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uYCB0eXBlIGluIHRoZSBDbG91ZEZvcm1hdGlvblxuICogTDEgZGVmaW5pdGlvbi5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICogQHBhcmFtIHByb3BzIFByb3BzIGlucHV0IGZvciB0aGUgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uID0gPFxuICBQcm9wc1QgZXh0ZW5kcyBJbWFnZVBpcGVsaW5lUHJvcHMgfCBJbWFnZVByb3BzLFxuICBPdXRwdXRUIGV4dGVuZHMgQ2ZuSW1hZ2VQaXBlbGluZS5JbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvblByb3BlcnR5IHwgQ2ZuSW1hZ2UuSW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSxcbj4oXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIHByb3BzOiBQcm9wc1QsXG4pOiBPdXRwdXRUIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFwcm9wcy5yZWNpcGUuX2lzQ29udGFpbmVyUmVjaXBlKCkgJiYgcHJvcHMuaW1hZ2VTY2FubmluZ0VjclJlcG9zaXRvcnkgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCdpbWFnZVNjYW5uaW5nRWNyUmVwb3NpdG9yeSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY29udGFpbmVyIHJlY2lwZSBidWlsZHMnLCBzY29wZSk7XG4gIH1cblxuICBpZiAoIXByb3BzLnJlY2lwZS5faXNDb250YWluZXJSZWNpcGUoKSAmJiBwcm9wcy5pbWFnZVNjYW5uaW5nRWNyVGFncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ2ltYWdlU2Nhbm5pbmdFY3JUYWdzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjb250YWluZXIgcmVjaXBlIGJ1aWxkcycsIHNjb3BlKTtcbiAgfVxuXG4gIGNvbnN0IGVjckNvbmZpZ3VyYXRpb246IENmbkltYWdlUGlwZWxpbmUuRWNyQ29uZmlndXJhdGlvblByb3BlcnR5ID0ge1xuICAgIC4uLihwcm9wcy5pbWFnZVNjYW5uaW5nRWNyUmVwb3NpdG9yeSAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgIHJlcG9zaXRvcnlOYW1lOiBwcm9wcy5pbWFnZVNjYW5uaW5nRWNyUmVwb3NpdG9yeS5yZXBvc2l0b3J5TmFtZSxcbiAgICB9KSxcbiAgICAuLi4oKHByb3BzLmltYWdlU2Nhbm5pbmdFY3JUYWdzID8/IFtdKS5sZW5ndGggJiYgeyBjb250YWluZXJUYWdzOiBwcm9wcy5pbWFnZVNjYW5uaW5nRWNyVGFncyB9KSxcbiAgfTtcblxuICBjb25zdCBpbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbiA9IHtcbiAgICAuLi4ocHJvcHMuaW1hZ2VTY2FubmluZ0VuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiB7IGltYWdlU2Nhbm5pbmdFbmFibGVkOiBwcm9wcy5pbWFnZVNjYW5uaW5nRW5hYmxlZCB9KSxcbiAgICAuLi4oT2JqZWN0LmtleXMoZWNyQ29uZmlndXJhdGlvbikubGVuZ3RoICYmIHsgZWNyQ29uZmlndXJhdGlvbiB9KSxcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0LmtleXMoaW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb24pLmxlbmd0aCA/IChpbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbiBhcyBPdXRwdXRUKSA6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB3b3JrZmxvd3MgcHJvcGVydHkgaW50byB0aGUgYFdvcmtmbG93Q29uZmlndXJhdGlvbmAgdHlwZSBpbiB0aGUgQ2xvdWRGb3JtYXRpb24gTDFcbiAqIGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIHByb3BzIFByb3BzIGlucHV0IGZvciB0aGUgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZFdvcmtmbG93cyA9IDxcbiAgUHJvcHNUIGV4dGVuZHMgSW1hZ2VQaXBlbGluZVByb3BzIHwgSW1hZ2VQcm9wcyxcbiAgT3V0cHV0VCBleHRlbmRzIENmbkltYWdlUGlwZWxpbmUuV29ya2Zsb3dDb25maWd1cmF0aW9uUHJvcGVydHlbXSB8IENmbkltYWdlLldvcmtmbG93Q29uZmlndXJhdGlvblByb3BlcnR5W10sXG4+KFxuICBwcm9wczogUHJvcHNULFxuKTogT3V0cHV0VCB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGNmbldvcmtmbG93cyA9IHByb3BzLndvcmtmbG93cz8ubWFwKCh3b3JrZmxvdykgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBPYmplY3QuZW50cmllcyh3b3JrZmxvdy5wYXJhbWV0ZXJzID8/IHt9KS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+ICh7XG4gICAgICBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgIH0pKTtcbiAgICByZXR1cm4ge1xuICAgICAgd29ya2Zsb3dBcm46IHdvcmtmbG93LndvcmtmbG93LndvcmtmbG93QXJuLFxuICAgICAgb25GYWlsdXJlOiB3b3JrZmxvdy5vbkZhaWx1cmUsXG4gICAgICBwYXJhbGxlbEdyb3VwOiB3b3JrZmxvdy5wYXJhbGxlbEdyb3VwLFxuICAgICAgLi4uKHBhcmFtZXRlcnMubGVuZ3RoICYmIHsgcGFyYW1ldGVycyB9KSxcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4gY2ZuV29ya2Zsb3dzPy5sZW5ndGggPyAoY2ZuV29ya2Zsb3dzIGFzIE91dHB1dFQpIDogdW5kZWZpbmVkO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
2
|
+
import * as logs from 'aws-cdk-lib/aws-logs';
|
|
3
|
+
import { Construct } from 'constructs';
|
|
4
|
+
import { ImageProps } from '../image';
|
|
5
|
+
import { ImagePipelineProps } from '../image-pipeline';
|
|
6
|
+
import { WorkflowConfiguration } from '../workflow';
|
|
7
|
+
/**
|
|
8
|
+
* Returns the default execution role policy, for auto-generated execution roles.
|
|
9
|
+
*
|
|
10
|
+
* @param scope The construct scope
|
|
11
|
+
* @param props Props input for the construct
|
|
12
|
+
*
|
|
13
|
+
* @see https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSServiceRoleForImageBuilder.html
|
|
14
|
+
*/
|
|
15
|
+
export declare const defaultExecutionRolePolicy: <PropsT extends ImagePipelineProps | ImageProps>(scope: Construct, props?: PropsT) => iam.PolicyStatement[];
|
|
16
|
+
export declare const getExecutionRole: (scope: Construct, grantDefaultExecutionRolePermissions: (grantee: iam.IGrantable) => void, { executionRole, workflows, imageLogGroup, imagePipelineLogGroup, }: {
|
|
17
|
+
executionRole?: iam.IRole;
|
|
18
|
+
imageLogGroup?: logs.ILogGroup;
|
|
19
|
+
imagePipelineLogGroup?: logs.ILogGroup;
|
|
20
|
+
workflows?: WorkflowConfiguration[];
|
|
21
|
+
}) => iam.IRole | undefined;
|
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getExecutionRole = exports.defaultExecutionRolePolicy = void 0;
|
|
4
|
+
const cdk = require("aws-cdk-lib");
|
|
5
|
+
const iam = require("aws-cdk-lib/aws-iam");
|
|
6
|
+
/**
|
|
7
|
+
* Returns the default execution role policy, for auto-generated execution roles.
|
|
8
|
+
*
|
|
9
|
+
* @param scope The construct scope
|
|
10
|
+
* @param props Props input for the construct
|
|
11
|
+
*
|
|
12
|
+
* @see https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSServiceRoleForImageBuilder.html
|
|
13
|
+
*/
|
|
14
|
+
const defaultExecutionRolePolicy = (scope, props) => {
|
|
15
|
+
const stack = cdk.Stack.of(scope);
|
|
16
|
+
const partition = stack.partition;
|
|
17
|
+
const region = stack.region;
|
|
18
|
+
const account = stack.account;
|
|
19
|
+
// Permissions are identical to https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSServiceRoleForImageBuilder.html
|
|
20
|
+
// SLR policies cannot be attached to roles, and no managed policy exists for these permissions yet
|
|
21
|
+
const policies = [
|
|
22
|
+
new iam.PolicyStatement({
|
|
23
|
+
effect: iam.Effect.ALLOW,
|
|
24
|
+
actions: ['ec2:RegisterImage'],
|
|
25
|
+
resources: [`arn:${partition}:ec2:*::image/*`],
|
|
26
|
+
conditions: {
|
|
27
|
+
StringEquals: {
|
|
28
|
+
'aws:RequestTag/CreatedBy': 'EC2 Image Builder',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
}),
|
|
32
|
+
new iam.PolicyStatement({
|
|
33
|
+
effect: iam.Effect.ALLOW,
|
|
34
|
+
actions: ['ec2:RegisterImage'],
|
|
35
|
+
resources: [`arn:${partition}:ec2:*::snapshot/*`],
|
|
36
|
+
conditions: {
|
|
37
|
+
StringEquals: {
|
|
38
|
+
'ec2:ResourceTag/CreatedBy': 'EC2 Image Builder',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
}),
|
|
42
|
+
new iam.PolicyStatement({
|
|
43
|
+
effect: iam.Effect.ALLOW,
|
|
44
|
+
actions: ['ec2:RunInstances'],
|
|
45
|
+
resources: [
|
|
46
|
+
`arn:${partition}:ec2:*::image/*`,
|
|
47
|
+
`arn:${partition}:ec2:*::snapshot/*`,
|
|
48
|
+
`arn:${partition}:ec2:*:*:subnet/*`,
|
|
49
|
+
`arn:${partition}:ec2:*:*:network-interface/*`,
|
|
50
|
+
`arn:${partition}:ec2:*:*:security-group/*`,
|
|
51
|
+
`arn:${partition}:ec2:*:*:key-pair/*`,
|
|
52
|
+
`arn:${partition}:ec2:*:*:launch-template/*`,
|
|
53
|
+
`arn:${partition}:license-manager:*:*:license-configuration:*`,
|
|
54
|
+
],
|
|
55
|
+
}),
|
|
56
|
+
new iam.PolicyStatement({
|
|
57
|
+
effect: iam.Effect.ALLOW,
|
|
58
|
+
actions: ['ec2:RunInstances'],
|
|
59
|
+
resources: [`arn:${partition}:ec2:*:*:volume/*`, `arn:${partition}:ec2:*:*:instance/*`],
|
|
60
|
+
conditions: {
|
|
61
|
+
StringEquals: {
|
|
62
|
+
'aws:RequestTag/CreatedBy': ['EC2 Image Builder', 'EC2 Fast Launch'],
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
}),
|
|
66
|
+
new iam.PolicyStatement({
|
|
67
|
+
effect: iam.Effect.ALLOW,
|
|
68
|
+
actions: ['iam:PassRole'],
|
|
69
|
+
resources: ['*'],
|
|
70
|
+
conditions: {
|
|
71
|
+
StringEquals: {
|
|
72
|
+
'iam:PassedToService': ['ec2.amazonaws.com', 'ec2.amazonaws.com.cn', 'vmie.amazonaws.com'],
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
}),
|
|
76
|
+
new iam.PolicyStatement({
|
|
77
|
+
effect: iam.Effect.ALLOW,
|
|
78
|
+
actions: ['ec2:StopInstances', 'ec2:StartInstances', 'ec2:TerminateInstances'],
|
|
79
|
+
resources: ['*'],
|
|
80
|
+
conditions: {
|
|
81
|
+
StringEquals: {
|
|
82
|
+
'ec2:ResourceTag/CreatedBy': 'EC2 Image Builder',
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
}),
|
|
86
|
+
new iam.PolicyStatement({
|
|
87
|
+
effect: iam.Effect.ALLOW,
|
|
88
|
+
actions: [
|
|
89
|
+
'ec2:CopyImage',
|
|
90
|
+
'ec2:CreateImage',
|
|
91
|
+
'ec2:CreateLaunchTemplate',
|
|
92
|
+
'ec2:DeregisterImage',
|
|
93
|
+
'ec2:DescribeImages',
|
|
94
|
+
'ec2:DescribeInstanceAttribute',
|
|
95
|
+
'ec2:DescribeInstanceStatus',
|
|
96
|
+
'ec2:DescribeInstances',
|
|
97
|
+
'ec2:DescribeInstanceTypeOfferings',
|
|
98
|
+
'ec2:DescribeInstanceTypes',
|
|
99
|
+
'ec2:DescribeSubnets',
|
|
100
|
+
'ec2:DescribeTags',
|
|
101
|
+
'ec2:ModifyImageAttribute',
|
|
102
|
+
'ec2:DescribeImportImageTasks',
|
|
103
|
+
'ec2:DescribeSnapshots',
|
|
104
|
+
'ec2:DescribeHosts',
|
|
105
|
+
],
|
|
106
|
+
resources: ['*'],
|
|
107
|
+
}),
|
|
108
|
+
new iam.PolicyStatement({
|
|
109
|
+
effect: iam.Effect.ALLOW,
|
|
110
|
+
actions: ['ec2:ModifySnapshotAttribute'],
|
|
111
|
+
resources: [`arn:${partition}:ec2:*::snapshot/*`],
|
|
112
|
+
conditions: {
|
|
113
|
+
StringEquals: {
|
|
114
|
+
'ec2:ResourceTag/CreatedBy': 'EC2 Image Builder',
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
}),
|
|
118
|
+
new iam.PolicyStatement({
|
|
119
|
+
effect: iam.Effect.ALLOW,
|
|
120
|
+
actions: ['ec2:CreateTags'],
|
|
121
|
+
resources: ['*'],
|
|
122
|
+
conditions: {
|
|
123
|
+
StringEquals: {
|
|
124
|
+
'ec2:CreateAction': ['RunInstances', 'CreateImage'],
|
|
125
|
+
'aws:RequestTag/CreatedBy': ['EC2 Image Builder', 'EC2 Fast Launch'],
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
}),
|
|
129
|
+
new iam.PolicyStatement({
|
|
130
|
+
effect: iam.Effect.ALLOW,
|
|
131
|
+
actions: ['ec2:CreateTags'],
|
|
132
|
+
resources: [`arn:${partition}:ec2:*::image/*`, `arn:${partition}:ec2:*:*:export-image-task/*`],
|
|
133
|
+
}),
|
|
134
|
+
new iam.PolicyStatement({
|
|
135
|
+
effect: iam.Effect.ALLOW,
|
|
136
|
+
actions: ['ec2:CreateTags'],
|
|
137
|
+
resources: [`arn:${partition}:ec2:*::snapshot/*`, `arn:${partition}:ec2:*:*:launch-template/*`],
|
|
138
|
+
conditions: {
|
|
139
|
+
StringEquals: {
|
|
140
|
+
'aws:RequestTag/CreatedBy': ['EC2 Image Builder', 'EC2 Fast Launch'],
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
}),
|
|
144
|
+
new iam.PolicyStatement({
|
|
145
|
+
effect: iam.Effect.ALLOW,
|
|
146
|
+
actions: ['sns:Publish'],
|
|
147
|
+
resources: [`arn:${partition}:sns:${region}:${account}:*`],
|
|
148
|
+
}),
|
|
149
|
+
new iam.PolicyStatement({
|
|
150
|
+
effect: iam.Effect.ALLOW,
|
|
151
|
+
actions: [
|
|
152
|
+
'ssm:ListCommands',
|
|
153
|
+
'ssm:ListCommandInvocations',
|
|
154
|
+
'ssm:AddTagsToResource',
|
|
155
|
+
'ssm:DescribeInstanceInformation',
|
|
156
|
+
'ssm:ListInventoryEntries',
|
|
157
|
+
'ssm:DescribeInstanceAssociationsStatus',
|
|
158
|
+
'ssm:DescribeAssociationExecutions',
|
|
159
|
+
'ssm:GetCommandInvocation',
|
|
160
|
+
],
|
|
161
|
+
resources: ['*'],
|
|
162
|
+
}),
|
|
163
|
+
new iam.PolicyStatement({
|
|
164
|
+
effect: iam.Effect.ALLOW,
|
|
165
|
+
actions: ['ssm:SendCommand'],
|
|
166
|
+
resources: [
|
|
167
|
+
`arn:${partition}:ssm:*:*:document/AWS-RunPowerShellScript`,
|
|
168
|
+
`arn:${partition}:ssm:*:*:document/AWS-RunShellScript`,
|
|
169
|
+
`arn:${partition}:ssm:*:*:document/AWSEC2-RunSysprep`,
|
|
170
|
+
`arn:${partition}:s3:::*`,
|
|
171
|
+
],
|
|
172
|
+
}),
|
|
173
|
+
new iam.PolicyStatement({
|
|
174
|
+
effect: iam.Effect.ALLOW,
|
|
175
|
+
actions: ['ssm:SendCommand'],
|
|
176
|
+
resources: [`arn:${partition}:ec2:*:*:instance/*`],
|
|
177
|
+
conditions: {
|
|
178
|
+
StringEquals: {
|
|
179
|
+
'ssm:resourceTag/CreatedBy': ['EC2 Image Builder'],
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
}),
|
|
183
|
+
new iam.PolicyStatement({
|
|
184
|
+
effect: iam.Effect.ALLOW,
|
|
185
|
+
actions: ['ssm:CreateAssociation', 'ssm:DeleteAssociation'],
|
|
186
|
+
resources: [
|
|
187
|
+
`arn:${partition}:ssm:*:*:document/AWS-GatherSoftwareInventory`,
|
|
188
|
+
`arn:${partition}:ssm:*:*:association/*`,
|
|
189
|
+
`arn:${partition}:ec2:*:*:instance/*`,
|
|
190
|
+
],
|
|
191
|
+
}),
|
|
192
|
+
new iam.PolicyStatement({
|
|
193
|
+
effect: iam.Effect.ALLOW,
|
|
194
|
+
actions: [
|
|
195
|
+
'kms:Encrypt',
|
|
196
|
+
'kms:Decrypt',
|
|
197
|
+
'kms:ReEncryptFrom',
|
|
198
|
+
'kms:ReEncryptTo',
|
|
199
|
+
'kms:GenerateDataKeyWithoutPlaintext',
|
|
200
|
+
],
|
|
201
|
+
resources: ['*'],
|
|
202
|
+
conditions: {
|
|
203
|
+
'ForAllValues:StringEquals': {
|
|
204
|
+
'kms:EncryptionContextKeys': ['aws:ebs:id'],
|
|
205
|
+
},
|
|
206
|
+
'StringLike': {
|
|
207
|
+
'kms:ViaService': ['ec2.*.amazonaws.com'],
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
}),
|
|
211
|
+
new iam.PolicyStatement({
|
|
212
|
+
effect: iam.Effect.ALLOW,
|
|
213
|
+
actions: ['kms:DescribeKey'],
|
|
214
|
+
resources: ['*'],
|
|
215
|
+
conditions: {
|
|
216
|
+
StringLike: {
|
|
217
|
+
'kms:ViaService': ['ec2.*.amazonaws.com'],
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
}),
|
|
221
|
+
new iam.PolicyStatement({
|
|
222
|
+
effect: iam.Effect.ALLOW,
|
|
223
|
+
actions: ['kms:CreateGrant'],
|
|
224
|
+
resources: ['*'],
|
|
225
|
+
conditions: {
|
|
226
|
+
Bool: {
|
|
227
|
+
'kms:GrantIsForAWSResource': true,
|
|
228
|
+
},
|
|
229
|
+
StringLike: {
|
|
230
|
+
'kms:ViaService': ['ec2.*.amazonaws.com'],
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
}),
|
|
234
|
+
new iam.PolicyStatement({
|
|
235
|
+
effect: iam.Effect.ALLOW,
|
|
236
|
+
actions: ['logs:CreateLogStream', 'logs:CreateLogGroup', 'logs:PutLogEvents'],
|
|
237
|
+
resources: [`arn:${partition}:logs:*:*:log-group:/aws/imagebuilder/*`],
|
|
238
|
+
}),
|
|
239
|
+
new iam.PolicyStatement({
|
|
240
|
+
effect: iam.Effect.ALLOW,
|
|
241
|
+
actions: ['iam:CreateServiceLinkedRole'],
|
|
242
|
+
resources: ['*'],
|
|
243
|
+
conditions: {
|
|
244
|
+
StringEquals: {
|
|
245
|
+
'iam:AWSServiceName': ['ssm.amazonaws.com'],
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
}),
|
|
249
|
+
new iam.PolicyStatement({
|
|
250
|
+
effect: iam.Effect.ALLOW,
|
|
251
|
+
actions: [
|
|
252
|
+
'events:DeleteRule',
|
|
253
|
+
'events:DescribeRule',
|
|
254
|
+
'events:PutRule',
|
|
255
|
+
'events:PutTargets',
|
|
256
|
+
'events:RemoveTargets',
|
|
257
|
+
],
|
|
258
|
+
resources: [`arn:${partition}:events:*:*:rule/ImageBuilder-*`],
|
|
259
|
+
}),
|
|
260
|
+
new iam.PolicyStatement({
|
|
261
|
+
effect: iam.Effect.ALLOW,
|
|
262
|
+
actions: ['ssm:GetParameter', 'ssm:PutParameter'],
|
|
263
|
+
resources: [`arn:${partition}:ssm:*:*:parameter/imagebuilder/*`],
|
|
264
|
+
}),
|
|
265
|
+
new iam.PolicyStatement({
|
|
266
|
+
effect: iam.Effect.ALLOW,
|
|
267
|
+
actions: ['ssm:GetParameter'],
|
|
268
|
+
resources: [`arn:${partition}:ssm:*::parameter/aws/service/*`],
|
|
269
|
+
}),
|
|
270
|
+
];
|
|
271
|
+
const hasProps = props !== undefined;
|
|
272
|
+
if (!hasProps || (props.recipe._isImageRecipe() && props.distributionConfiguration !== undefined)) {
|
|
273
|
+
// Distribution-specific permissions if distribution settings are provided. All permissions here are for AMI builds
|
|
274
|
+
// specifically.
|
|
275
|
+
policies.push(new iam.PolicyStatement({
|
|
276
|
+
effect: iam.Effect.ALLOW,
|
|
277
|
+
actions: ['ec2:DescribeExportImageTasks'],
|
|
278
|
+
resources: ['*'],
|
|
279
|
+
}), new iam.PolicyStatement({
|
|
280
|
+
effect: iam.Effect.ALLOW,
|
|
281
|
+
actions: ['license-manager:UpdateLicenseSpecificationsForResource'],
|
|
282
|
+
resources: [`arn:${partition}:license-manager:*:${account}:license-configuration:*`],
|
|
283
|
+
}), new iam.PolicyStatement({
|
|
284
|
+
effect: iam.Effect.ALLOW,
|
|
285
|
+
actions: ['sts:AssumeRole'],
|
|
286
|
+
resources: [`arn:${partition}:iam::*:role/EC2ImageBuilderDistributionCrossAccountRole`],
|
|
287
|
+
}), new iam.PolicyStatement({
|
|
288
|
+
effect: iam.Effect.ALLOW,
|
|
289
|
+
actions: ['ec2:DescribeLaunchTemplates', 'ec2:DescribeLaunchTemplateVersions'],
|
|
290
|
+
resources: ['*'],
|
|
291
|
+
}), new iam.PolicyStatement({
|
|
292
|
+
effect: iam.Effect.ALLOW,
|
|
293
|
+
actions: ['ec2:CreateLaunchTemplateVersion', 'ec2:ModifyLaunchTemplate'],
|
|
294
|
+
resources: [`arn:${partition}:ec2:${region}:${account}:launch-template/*`],
|
|
295
|
+
}), new iam.PolicyStatement({
|
|
296
|
+
effect: iam.Effect.ALLOW,
|
|
297
|
+
actions: ['ec2:ExportImage'],
|
|
298
|
+
resources: [`arn:${partition}:ec2:*::image/*`],
|
|
299
|
+
conditions: {
|
|
300
|
+
StringEquals: {
|
|
301
|
+
'ec2:ResourceTag/CreatedBy': 'EC2 Image Builder',
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
}), new iam.PolicyStatement({
|
|
305
|
+
effect: iam.Effect.ALLOW,
|
|
306
|
+
actions: ['ec2:ExportImage'],
|
|
307
|
+
resources: [`arn:${partition}:ec2:*:*:export-image-task/*`],
|
|
308
|
+
}), new iam.PolicyStatement({
|
|
309
|
+
effect: iam.Effect.ALLOW,
|
|
310
|
+
actions: ['ec2:CancelExportTask'],
|
|
311
|
+
resources: [`arn:${partition}:ec2:*:*:export-image-task/*`],
|
|
312
|
+
conditions: {
|
|
313
|
+
StringEquals: {
|
|
314
|
+
'ec2:ResourceTag/CreatedBy': 'EC2 Image Builder',
|
|
315
|
+
},
|
|
316
|
+
},
|
|
317
|
+
}), new iam.PolicyStatement({
|
|
318
|
+
effect: iam.Effect.ALLOW,
|
|
319
|
+
actions: ['iam:CreateServiceLinkedRole'],
|
|
320
|
+
resources: ['*'],
|
|
321
|
+
conditions: {
|
|
322
|
+
StringEquals: {
|
|
323
|
+
'iam:AWSServiceName': ['ec2fastlaunch.amazonaws.com'],
|
|
324
|
+
},
|
|
325
|
+
},
|
|
326
|
+
}), new iam.PolicyStatement({
|
|
327
|
+
effect: iam.Effect.ALLOW,
|
|
328
|
+
actions: ['ec2:EnableFastLaunch'],
|
|
329
|
+
resources: [`arn:${partition}:ec2:*::image/*`, `arn:${partition}:ec2:*:*:launch-template/*`],
|
|
330
|
+
conditions: {
|
|
331
|
+
StringEquals: {
|
|
332
|
+
'ec2:ResourceTag/CreatedBy': 'EC2 Image Builder',
|
|
333
|
+
},
|
|
334
|
+
},
|
|
335
|
+
}));
|
|
336
|
+
}
|
|
337
|
+
if (!hasProps || props.imageScanningEnabled !== false) {
|
|
338
|
+
// Add Inspector permissions if scanning is enabled
|
|
339
|
+
policies.push(new iam.PolicyStatement({
|
|
340
|
+
effect: iam.Effect.ALLOW,
|
|
341
|
+
actions: ['inspector2:ListCoverage', 'inspector2:ListFindings'],
|
|
342
|
+
resources: ['*'],
|
|
343
|
+
}));
|
|
344
|
+
// Add image scanning ECR permissions for container builds
|
|
345
|
+
if (!hasProps || props.recipe._isContainerRecipe()) {
|
|
346
|
+
policies.push(new iam.PolicyStatement({
|
|
347
|
+
effect: iam.Effect.ALLOW,
|
|
348
|
+
actions: ['ecr:CreateRepository'],
|
|
349
|
+
resources: ['*'],
|
|
350
|
+
conditions: {
|
|
351
|
+
StringEquals: {
|
|
352
|
+
'aws:RequestTag/CreatedBy': 'EC2 Image Builder',
|
|
353
|
+
},
|
|
354
|
+
},
|
|
355
|
+
}), new iam.PolicyStatement({
|
|
356
|
+
effect: iam.Effect.ALLOW,
|
|
357
|
+
actions: ['ecr:TagResource'],
|
|
358
|
+
resources: [`arn:${partition}:ecr:*:*:repository/image-builder-*`],
|
|
359
|
+
conditions: {
|
|
360
|
+
StringEquals: {
|
|
361
|
+
'aws:RequestTag/CreatedBy': 'EC2 Image Builder',
|
|
362
|
+
},
|
|
363
|
+
},
|
|
364
|
+
}), new iam.PolicyStatement({
|
|
365
|
+
effect: iam.Effect.ALLOW,
|
|
366
|
+
actions: ['ecr:BatchDeleteImage'],
|
|
367
|
+
resources: [`arn:${partition}:ecr:*:*:repository/image-builder-*`],
|
|
368
|
+
conditions: {
|
|
369
|
+
StringEquals: {
|
|
370
|
+
'ecr:ResourceTag/CreatedBy': 'EC2 Image Builder',
|
|
371
|
+
},
|
|
372
|
+
},
|
|
373
|
+
}));
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
return policies;
|
|
377
|
+
};
|
|
378
|
+
exports.defaultExecutionRolePolicy = defaultExecutionRolePolicy;
|
|
379
|
+
const getExecutionRole = (scope, grantDefaultExecutionRolePermissions, { executionRole, workflows, imageLogGroup, imagePipelineLogGroup, }) => {
|
|
380
|
+
const { executionRoleRequired, applyGrants } = getExecutionRoleRequirements({
|
|
381
|
+
workflows,
|
|
382
|
+
imageLogGroup,
|
|
383
|
+
imagePipelineLogGroup,
|
|
384
|
+
});
|
|
385
|
+
if (!executionRoleRequired) {
|
|
386
|
+
return executionRole;
|
|
387
|
+
}
|
|
388
|
+
if (executionRole !== undefined) {
|
|
389
|
+
applyGrants(executionRole);
|
|
390
|
+
return executionRole;
|
|
391
|
+
}
|
|
392
|
+
const autoGeneratedExecutionRole = new iam.Role(scope, 'ExecutionRole', {
|
|
393
|
+
assumedBy: new iam.ServicePrincipal('imagebuilder.amazonaws.com'),
|
|
394
|
+
});
|
|
395
|
+
grantDefaultExecutionRolePermissions(autoGeneratedExecutionRole);
|
|
396
|
+
applyGrants(autoGeneratedExecutionRole);
|
|
397
|
+
return autoGeneratedExecutionRole;
|
|
398
|
+
};
|
|
399
|
+
exports.getExecutionRole = getExecutionRole;
|
|
400
|
+
const getExecutionRoleRequirements = ({ workflows, imageLogGroup, imagePipelineLogGroup, }) => {
|
|
401
|
+
const granters = [];
|
|
402
|
+
const hasWorkflows = Boolean(workflows?.length);
|
|
403
|
+
const addImageLogGroupPermissions = imageLogGroup !== undefined &&
|
|
404
|
+
!cdk.Token.isUnresolved(imageLogGroup.logGroupName) &&
|
|
405
|
+
!imageLogGroup.logGroupName.startsWith('/aws/imagebuilder/');
|
|
406
|
+
const addPipelineLogGroupPermissions = imagePipelineLogGroup !== undefined &&
|
|
407
|
+
!cdk.Token.isUnresolved(imagePipelineLogGroup.logGroupName) &&
|
|
408
|
+
!imagePipelineLogGroup.logGroupName.startsWith('/aws/imagebuilder/');
|
|
409
|
+
if (addImageLogGroupPermissions) {
|
|
410
|
+
granters.push((role) => imageLogGroup.grantWrite(role));
|
|
411
|
+
}
|
|
412
|
+
if (addPipelineLogGroupPermissions) {
|
|
413
|
+
granters.push((role) => imagePipelineLogGroup.grantWrite(role));
|
|
414
|
+
}
|
|
415
|
+
return {
|
|
416
|
+
executionRoleRequired: hasWorkflows || addImageLogGroupPermissions || addPipelineLogGroupPermissions,
|
|
417
|
+
applyGrants: (role) => granters.forEach((granter) => granter(role)),
|
|
418
|
+
};
|
|
419
|
+
};
|
|
420
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBvbGljeS1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW1DO0FBQ25DLDJDQUEyQztBQU8zQzs7Ozs7OztHQU9HO0FBQ0ksTUFBTSwwQkFBMEIsR0FBRyxDQUN4QyxLQUFnQixFQUNoQixLQUFjLEVBQ1MsRUFBRTtJQUN6QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDNUIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUU5QixrSUFBa0k7SUFDbEksbUdBQW1HO0lBQ25HLE1BQU0sUUFBUSxHQUFHO1FBQ2YsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDeEIsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDOUIsU0FBUyxFQUFFLENBQUMsT0FBTyxTQUFTLGlCQUFpQixDQUFDO1lBQzlDLFVBQVUsRUFBRTtnQkFDVixZQUFZLEVBQUU7b0JBQ1osMEJBQTBCLEVBQUUsbUJBQW1CO2lCQUNoRDthQUNGO1NBQ0YsQ0FBQztRQUNGLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUN0QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ3hCLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO1lBQzlCLFNBQVMsRUFBRSxDQUFDLE9BQU8sU0FBUyxvQkFBb0IsQ0FBQztZQUNqRCxVQUFVLEVBQUU7Z0JBQ1YsWUFBWSxFQUFFO29CQUNaLDJCQUEyQixFQUFFLG1CQUFtQjtpQkFDakQ7YUFDRjtTQUNGLENBQUM7UUFD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SUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsT0FBTztRQUNMLHFCQUFxQixFQUFFLFlBQVksSUFBSSwyQkFBMkIsSUFBSSw4QkFBOEI7UUFDcEcsV0FBVyxFQUFFLENBQUMsSUFBZSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDL0UsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSW1hZ2VQcm9wcyB9IGZyb20gJy4uL2ltYWdlJztcbmltcG9ydCB7IEltYWdlUGlwZWxpbmVQcm9wcyB9IGZyb20gJy4uL2ltYWdlLXBpcGVsaW5lJztcbmltcG9ydCB7IFdvcmtmbG93Q29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3dvcmtmbG93JztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGV4ZWN1dGlvbiByb2xlIHBvbGljeSwgZm9yIGF1dG8tZ2VuZXJhdGVkIGV4ZWN1dGlvbiByb2xlcy5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICogQHBhcmFtIHByb3BzIFByb3BzIGlucHV0IGZvciB0aGUgY29uc3RydWN0XG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXdzLW1hbmFnZWQtcG9saWN5L2xhdGVzdC9yZWZlcmVuY2UvQVdTU2VydmljZVJvbGVGb3JJbWFnZUJ1aWxkZXIuaHRtbFxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdEV4ZWN1dGlvblJvbGVQb2xpY3kgPSA8UHJvcHNUIGV4dGVuZHMgSW1hZ2VQaXBlbGluZVByb3BzIHwgSW1hZ2VQcm9wcz4oXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIHByb3BzPzogUHJvcHNULFxuKTogaWFtLlBvbGljeVN0YXRlbWVudFtdID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBjZGsuU3RhY2sub2Yoc2NvcGUpO1xuICBjb25zdCBwYXJ0aXRpb24gPSBzdGFjay5wYXJ0aXRpb247XG4gIGNvbnN0IHJlZ2lvbiA9IHN0YWNrLnJlZ2lvbjtcbiAgY29uc3QgYWNjb3VudCA9IHN0YWNrLmFjY291bnQ7XG5cbiAgLy8gUGVybWlzc2lvbnMgYXJlIGlkZW50aWNhbCB0byBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXdzLW1hbmFnZWQtcG9saWN5L2xhdGVzdC9yZWZlcmVuY2UvQVdTU2VydmljZVJvbGVGb3JJbWFnZUJ1aWxkZXIuaHRtbFxuICAvLyBTTFIgcG9saWNpZXMgY2Fubm90IGJlIGF0dGFjaGVkIHRvIHJvbGVzLCBhbmQgbm8gbWFuYWdlZCBwb2xpY3kgZXhpc3RzIGZvciB0aGVzZSBwZXJtaXNzaW9ucyB5ZXRcbiAgY29uc3QgcG9saWNpZXMgPSBbXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydlYzI6UmVnaXN0ZXJJbWFnZSddLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke3BhcnRpdGlvbn06ZWMyOio6OmltYWdlLypgXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgJ2F3czpSZXF1ZXN0VGFnL0NyZWF0ZWRCeSc6ICdFQzIgSW1hZ2UgQnVpbGRlcicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnZWMyOlJlZ2lzdGVySW1hZ2UnXSxcbiAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OmVjMjoqOjpzbmFwc2hvdC8qYF0sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICdlYzI6UmVzb3VyY2VUYWcvQ3JlYXRlZEJ5JzogJ0VDMiBJbWFnZSBCdWlsZGVyJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydlYzI6UnVuSW5zdGFuY2VzJ10sXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgYGFybjoke3BhcnRpdGlvbn06ZWMyOio6OmltYWdlLypgLFxuICAgICAgICBgYXJuOiR7cGFydGl0aW9ufTplYzI6Kjo6c25hcHNob3QvKmAsXG4gICAgICAgIGBhcm46JHtwYXJ0aXRpb259OmVjMjoqOio6c3VibmV0LypgLFxuICAgICAgICBgYXJuOiR7cGFydGl0aW9ufTplYzI6KjoqOm5ldHdvcmstaW50ZXJmYWNlLypgLFxuICAgICAgICBgYXJuOiR7cGFydGl0aW9ufTplYzI6KjoqOnNlY3VyaXR5LWdyb3VwLypgLFxuICAgICAgICBgYXJuOiR7cGFydGl0aW9ufTplYzI6KjoqOmtleS1wYWlyLypgLFxuICAgICAgICBgYXJuOiR7cGFydGl0aW9ufTplYzI6KjoqOmxhdW5jaC10ZW1wbGF0ZS8qYCxcbiAgICAgICAgYGFybjoke3BhcnRpdGlvbn06bGljZW5zZS1tYW5hZ2VyOio6KjpsaWNlbnNlLWNvbmZpZ3VyYXRpb246KmAsXG4gICAgICBdLFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnZWMyOlJ1bkluc3RhbmNlcyddLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke3BhcnRpdGlvbn06ZWMyOio6Kjp2b2x1bWUvKmAsIGBhcm46JHtwYXJ0aXRpb259OmVjMjoqOio6aW5zdGFuY2UvKmBdLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAnYXdzOlJlcXVlc3RUYWcvQ3JlYXRlZEJ5JzogWydFQzIgSW1hZ2UgQnVpbGRlcicsICdFQzIgRmFzdCBMYXVuY2gnXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydpYW06UGFzc1JvbGUnXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICdpYW06UGFzc2VkVG9TZXJ2aWNlJzogWydlYzIuYW1hem9uYXdzLmNvbScsICdlYzIuYW1hem9uYXdzLmNvbS5jbicsICd2bWllLmFtYXpvbmF3cy5jb20nXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydlYzI6U3RvcEluc3RhbmNlcycsICdlYzI6U3RhcnRJbnN0YW5jZXMnLCAnZWMyOlRlcm1pbmF0ZUluc3RhbmNlcyddLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgJ2VjMjpSZXNvdXJjZVRhZy9DcmVhdGVkQnknOiAnRUMyIEltYWdlIEJ1aWxkZXInLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSxcbiAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgICdlYzI6Q29weUltYWdlJyxcbiAgICAgICAgJ2VjMjpDcmVhdGVJbWFnZScsXG4gICAgICAgICdlYzI6Q3JlYXRlTGF1bmNoVGVtcGxhdGUnLFxuICAgICAgICAnZWMyOkRlcmVnaXN0ZXJJbWFnZScsXG4gICAgICAgICdlYzI6RGVzY3JpYmVJbWFnZXMnLFxuICAgICAgICAnZWMyOkRlc2NyaWJlSW5zdGFuY2VBdHRyaWJ1dGUnLFxuICAgICAgICAnZWMyOkRlc2NyaWJlSW5zdGFuY2VTdGF0dXMnLFxuICAgICAgICAnZWMyOkRlc2NyaWJlSW5zdGFuY2VzJyxcbiAgICAgICAgJ2VjMjpEZXNjcmliZUluc3RhbmNlVHlwZU9mZmVyaW5ncycsXG4gICAgICAgICdlYzI6RGVzY3JpYmVJbnN0YW5jZVR5cGVzJyxcbiAgICAgICAgJ2VjMjpEZXNjcmliZVN1Ym5ldHMnLFxuICAgICAgICAnZWMyOkRlc2NyaWJlVGFncycsXG4gICAgICAgICdlYzI6TW9kaWZ5SW1hZ2VBdHRyaWJ1dGUnLFxuICAgICAgICAnZWMyOkRlc2NyaWJlSW1wb3J0SW1hZ2VUYXNrcycsXG4gICAgICAgICdlYzI6RGVzY3JpYmVTbmFwc2hvdHMnLFxuICAgICAgICAnZWMyOkRlc2NyaWJlSG9zdHMnLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydlYzI6TW9kaWZ5U25hcHNob3RBdHRyaWJ1dGUnXSxcbiAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OmVjMjoqOjpzbmFwc2hvdC8qYF0sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICdlYzI6UmVzb3VyY2VUYWcvQ3JlYXRlZEJ5JzogJ0VDMiBJbWFnZSBCdWlsZGVyJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydlYzI6Q3JlYXRlVGFncyddLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgJ2VjMjpDcmVhdGVBY3Rpb24nOiBbJ1J1bkluc3RhbmNlcycsICdDcmVhdGVJbWFnZSddLFxuICAgICAgICAgICdhd3M6UmVxdWVzdFRhZy9DcmVhdGVkQnknOiBbJ0VDMiBJbWFnZSBCdWlsZGVyJywgJ0VDMiBGYXN0IExhdW5jaCddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSxcbiAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ2VjMjpDcmVhdGVUYWdzJ10sXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7cGFydGl0aW9ufTplYzI6Kjo6aW1hZ2UvKmAsIGBhcm46JHtwYXJ0aXRpb259OmVjMjoqOio6ZXhwb3J0LWltYWdlLXRhc2svKmBdLFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnZWMyOkNyZWF0ZVRhZ3MnXSxcbiAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OmVjMjoqOjpzbmFwc2hvdC8qYCwgYGFybjoke3BhcnRpdGlvbn06ZWMyOio6KjpsYXVuY2gtdGVtcGxhdGUvKmBdLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAnYXdzOlJlcXVlc3RUYWcvQ3JlYXRlZEJ5JzogWydFQzIgSW1hZ2UgQnVpbGRlcicsICdFQzIgRmFzdCBMYXVuY2gnXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydzbnM6UHVibGlzaCddLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke3BhcnRpdGlvbn06c25zOiR7cmVnaW9ufToke2FjY291bnR9OipgXSxcbiAgICB9KSxcbiAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgICdzc206TGlzdENvbW1hbmRzJyxcbiAgICAgICAgJ3NzbTpMaXN0Q29tbWFuZEludm9jYXRpb25zJyxcbiAgICAgICAgJ3NzbTpBZGRUYWdzVG9SZXNvdXJjZScsXG4gICAgICAgICdzc206RGVzY3JpYmVJbnN0YW5jZUluZm9ybWF0aW9uJyxcbiAgICAgICAgJ3NzbTpMaXN0SW52ZW50b3J5RW50cmllcycsXG4gICAgICAgICdzc206RGVzY3JpYmVJbnN0YW5jZUFzc29jaWF0aW9uc1N0YXR1cycsXG4gICAgICAgICdzc206RGVzY3JpYmVBc3NvY2lhdGlvbkV4ZWN1dGlvbnMnLFxuICAgICAgICAnc3NtOkdldENvbW1hbmRJbnZvY2F0aW9uJyxcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnc3NtOlNlbmRDb21tYW5kJ10sXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgYGFybjoke3BhcnRpdGlvbn06c3NtOio6Kjpkb2N1bWVudC9BV1MtUnVuUG93ZXJTaGVsbFNjcmlwdGAsXG4gICAgICAgIGBhcm46JHtwYXJ0aXRpb259OnNzbToqOio6ZG9jdW1lbnQvQVdTLVJ1blNoZWxsU2NyaXB0YCxcbiAgICAgICAgYGFybjoke3BhcnRpdGlvbn06c3NtOio6Kjpkb2N1bWVudC9BV1NFQzItUnVuU3lzcHJlcGAsXG4gICAgICAgIGBhcm46JHtwYXJ0aXRpb259OnMzOjo6KmAsXG4gICAgICBdLFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnc3NtOlNlbmRDb21tYW5kJ10sXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7cGFydGl0aW9ufTplYzI6KjoqOmluc3RhbmNlLypgXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgJ3NzbTpyZXNvdXJjZVRhZy9DcmVhdGVkQnknOiBbJ0VDMiBJbWFnZSBCdWlsZGVyJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnc3NtOkNyZWF0ZUFzc29jaWF0aW9uJywgJ3NzbTpEZWxldGVBc3NvY2lhdGlvbiddLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIGBhcm46JHtwYXJ0aXRpb259OnNzbToqOio6ZG9jdW1lbnQvQVdTLUdhdGhlclNvZnR3YXJlSW52ZW50b3J5YCxcbiAgICAgICAgYGFybjoke3BhcnRpdGlvbn06c3NtOio6Kjphc3NvY2lhdGlvbi8qYCxcbiAgICAgICAgYGFybjoke3BhcnRpdGlvbn06ZWMyOio6KjppbnN0YW5jZS8qYCxcbiAgICAgIF0sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAna21zOkVuY3J5cHQnLFxuICAgICAgICAna21zOkRlY3J5cHQnLFxuICAgICAgICAna21zOlJlRW5jcnlwdEZyb20nLFxuICAgICAgICAna21zOlJlRW5jcnlwdFRvJyxcbiAgICAgICAgJ2ttczpHZW5lcmF0ZURhdGFLZXlXaXRob3V0UGxhaW50ZXh0JyxcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAnRm9yQWxsVmFsdWVzOlN0cmluZ0VxdWFscyc6IHtcbiAgICAgICAgICAna21zOkVuY3J5cHRpb25Db250ZXh0S2V5cyc6IFsnYXdzOmViczppZCddLFxuICAgICAgICB9LFxuICAgICAgICAnU3RyaW5nTGlrZSc6IHtcbiAgICAgICAgICAna21zOlZpYVNlcnZpY2UnOiBbJ2VjMi4qLmFtYXpvbmF3cy5jb20nXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydrbXM6RGVzY3JpYmVLZXknXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgIFN0cmluZ0xpa2U6IHtcbiAgICAgICAgICAna21zOlZpYVNlcnZpY2UnOiBbJ2VjMi4qLmFtYXpvbmF3cy5jb20nXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydrbXM6Q3JlYXRlR3JhbnQnXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgIEJvb2w6IHtcbiAgICAgICAgICAna21zOkdyYW50SXNGb3JBV1NSZXNvdXJjZSc6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIFN0cmluZ0xpa2U6IHtcbiAgICAgICAgICAna21zOlZpYVNlcnZpY2UnOiBbJ2VjMi4qLmFtYXpvbmF3cy5jb20nXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsICdsb2dzOkNyZWF0ZUxvZ0dyb3VwJywgJ2xvZ3M6UHV0TG9nRXZlbnRzJ10sXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7cGFydGl0aW9ufTpsb2dzOio6Kjpsb2ctZ3JvdXA6L2F3cy9pbWFnZWJ1aWxkZXIvKmBdLFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnaWFtOkNyZWF0ZVNlcnZpY2VMaW5rZWRSb2xlJ10sXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAnaWFtOkFXU1NlcnZpY2VOYW1lJzogWydzc20uYW1hem9uYXdzLmNvbSddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSxcbiAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgICdldmVudHM6RGVsZXRlUnVsZScsXG4gICAgICAgICdldmVudHM6RGVzY3JpYmVSdWxlJyxcbiAgICAgICAgJ2V2ZW50czpQdXRSdWxlJyxcbiAgICAgICAgJ2V2ZW50czpQdXRUYXJnZXRzJyxcbiAgICAgICAgJ2V2ZW50czpSZW1vdmVUYXJnZXRzJyxcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7cGFydGl0aW9ufTpldmVudHM6KjoqOnJ1bGUvSW1hZ2VCdWlsZGVyLSpgXSxcbiAgICB9KSxcbiAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ3NzbTpHZXRQYXJhbWV0ZXInLCAnc3NtOlB1dFBhcmFtZXRlciddLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke3BhcnRpdGlvbn06c3NtOio6KjpwYXJhbWV0ZXIvaW1hZ2VidWlsZGVyLypgXSxcbiAgICB9KSxcbiAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ3NzbTpHZXRQYXJhbWV0ZXInXSxcbiAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OnNzbToqOjpwYXJhbWV0ZXIvYXdzL3NlcnZpY2UvKmBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGNvbnN0IGhhc1Byb3BzID0gcHJvcHMgIT09IHVuZGVmaW5lZDtcbiAgaWYgKCFoYXNQcm9wcyB8fCAocHJvcHMucmVjaXBlLl9pc0ltYWdlUmVjaXBlKCkgJiYgcHJvcHMuZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiAhPT0gdW5kZWZpbmVkKSkge1xuICAgIC8vIERpc3RyaWJ1dGlvbi1zcGVjaWZpYyBwZXJtaXNzaW9ucyBpZiBkaXN0cmlidXRpb24gc2V0dGluZ3MgYXJlIHByb3ZpZGVkLiBBbGwgcGVybWlzc2lvbnMgaGVyZSBhcmUgZm9yIEFNSSBidWlsZHNcbiAgICAvLyBzcGVjaWZpY2FsbHkuXG4gICAgcG9saWNpZXMucHVzaChcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ2VjMjpEZXNjcmliZUV4cG9ydEltYWdlVGFza3MnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pLFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnbGljZW5zZS1tYW5hZ2VyOlVwZGF0ZUxpY2Vuc2VTcGVjaWZpY2F0aW9uc0ZvclJlc291cmNlJ10sXG4gICAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OmxpY2Vuc2UtbWFuYWdlcjoqOiR7YWNjb3VudH06bGljZW5zZS1jb25maWd1cmF0aW9uOipgXSxcbiAgICAgIH0pLFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnc3RzOkFzc3VtZVJvbGUnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbYGFybjoke3BhcnRpdGlvbn06aWFtOjoqOnJvbGUvRUMySW1hZ2VCdWlsZGVyRGlzdHJpYnV0aW9uQ3Jvc3NBY2NvdW50Um9sZWBdLFxuICAgICAgfSksXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydlYzI6RGVzY3JpYmVMYXVuY2hUZW1wbGF0ZXMnLCAnZWMyOkRlc2NyaWJlTGF1bmNoVGVtcGxhdGVWZXJzaW9ucyddLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSksXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydlYzI6Q3JlYXRlTGF1bmNoVGVtcGxhdGVWZXJzaW9uJywgJ2VjMjpNb2RpZnlMYXVuY2hUZW1wbGF0ZSddLFxuICAgICAgICByZXNvdXJjZXM6IFtgYXJuOiR7cGFydGl0aW9ufTplYzI6JHtyZWdpb259OiR7YWNjb3VudH06bGF1bmNoLXRlbXBsYXRlLypgXSxcbiAgICAgIH0pLFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnZWMyOkV4cG9ydEltYWdlJ10sXG4gICAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OmVjMjoqOjppbWFnZS8qYF0sXG4gICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICdlYzI6UmVzb3VyY2VUYWcvQ3JlYXRlZEJ5JzogJ0VDMiBJbWFnZSBCdWlsZGVyJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydlYzI6RXhwb3J0SW1hZ2UnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbYGFybjoke3BhcnRpdGlvbn06ZWMyOio6KjpleHBvcnQtaW1hZ2UtdGFzay8qYF0sXG4gICAgICB9KSxcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ2VjMjpDYW5jZWxFeHBvcnRUYXNrJ10sXG4gICAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OmVjMjoqOio6ZXhwb3J0LWltYWdlLXRhc2svKmBdLFxuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAnZWMyOlJlc291cmNlVGFnL0NyZWF0ZWRCeSc6ICdFQzIgSW1hZ2UgQnVpbGRlcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnaWFtOkNyZWF0ZVNlcnZpY2VMaW5rZWRSb2xlJ10sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICdpYW06QVdTU2VydmljZU5hbWUnOiBbJ2VjMmZhc3RsYXVuY2guYW1hem9uYXdzLmNvbSddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ2VjMjpFbmFibGVGYXN0TGF1bmNoJ10sXG4gICAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OmVjMjoqOjppbWFnZS8qYCwgYGFybjoke3BhcnRpdGlvbn06ZWMyOio6KjpsYXVuY2gtdGVtcGxhdGUvKmBdLFxuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAnZWMyOlJlc291cmNlVGFnL0NyZWF0ZWRCeSc6ICdFQzIgSW1hZ2UgQnVpbGRlcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BzIHx8IHByb3BzLmltYWdlU2Nhbm5pbmdFbmFibGVkICE9PSBmYWxzZSkge1xuICAgIC8vIEFkZCBJbnNwZWN0b3IgcGVybWlzc2lvbnMgaWYgc2Nhbm5pbmcgaXMgZW5hYmxlZFxuICAgIHBvbGljaWVzLnB1c2goXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydpbnNwZWN0b3IyOkxpc3RDb3ZlcmFnZScsICdpbnNwZWN0b3IyOkxpc3RGaW5kaW5ncyddLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIEFkZCBpbWFnZSBzY2FubmluZyBFQ1IgcGVybWlzc2lvbnMgZm9yIGNvbnRhaW5lciBidWlsZHNcbiAgICBpZiAoIWhhc1Byb3BzIHx8IHByb3BzLnJlY2lwZS5faXNDb250YWluZXJSZWNpcGUoKSkge1xuICAgICAgcG9saWNpZXMucHVzaChcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ2VjcjpDcmVhdGVSZXBvc2l0b3J5J10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICAgJ2F3czpSZXF1ZXN0VGFnL0NyZWF0ZWRCeSc6ICdFQzIgSW1hZ2UgQnVpbGRlcicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnZWNyOlRhZ1Jlc291cmNlJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjoke3BhcnRpdGlvbn06ZWNyOio6KjpyZXBvc2l0b3J5L2ltYWdlLWJ1aWxkZXItKmBdLFxuICAgICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgICAnYXdzOlJlcXVlc3RUYWcvQ3JlYXRlZEJ5JzogJ0VDMiBJbWFnZSBCdWlsZGVyJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogWydlY3I6QmF0Y2hEZWxldGVJbWFnZSddLFxuICAgICAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OmVjcjoqOio6cmVwb3NpdG9yeS9pbWFnZS1idWlsZGVyLSpgXSxcbiAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICAgJ2VjcjpSZXNvdXJjZVRhZy9DcmVhdGVkQnknOiAnRUMyIEltYWdlIEJ1aWxkZXInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBvbGljaWVzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEV4ZWN1dGlvblJvbGUgPSAoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGdyYW50RGVmYXVsdEV4ZWN1dGlvblJvbGVQZXJtaXNzaW9uczogKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKSA9PiB2b2lkLFxuICB7XG4gICAgZXhlY3V0aW9uUm9sZSxcbiAgICB3b3JrZmxvd3MsXG4gICAgaW1hZ2VMb2dHcm91cCxcbiAgICBpbWFnZVBpcGVsaW5lTG9nR3JvdXAsXG4gIH06IHtcbiAgICBleGVjdXRpb25Sb2xlPzogaWFtLklSb2xlO1xuICAgIGltYWdlTG9nR3JvdXA/OiBsb2dzLklMb2dHcm91cDtcbiAgICBpbWFnZVBpcGVsaW5lTG9nR3JvdXA/OiBsb2dzLklMb2dHcm91cDtcbiAgICB3b3JrZmxvd3M/OiBXb3JrZmxvd0NvbmZpZ3VyYXRpb25bXTtcbiAgfSxcbik6IGlhbS5JUm9sZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHsgZXhlY3V0aW9uUm9sZVJlcXVpcmVkLCBhcHBseUdyYW50cyB9ID0gZ2V0RXhlY3V0aW9uUm9sZVJlcXVpcmVtZW50cyh7XG4gICAgd29ya2Zsb3dzLFxuICAgIGltYWdlTG9nR3JvdXAsXG4gICAgaW1hZ2VQaXBlbGluZUxvZ0dyb3VwLFxuICB9KTtcbiAgaWYgKCFleGVjdXRpb25Sb2xlUmVxdWlyZWQpIHtcbiAgICByZXR1cm4gZXhlY3V0aW9uUm9sZTtcbiAgfVxuXG4gIGlmIChleGVjdXRpb25Sb2xlICE9PSB1bmRlZmluZWQpIHtcbiAgICBhcHBseUdyYW50cyhleGVjdXRpb25Sb2xlKTtcbiAgICByZXR1cm4gZXhlY3V0aW9uUm9sZTtcbiAgfVxuXG4gIGNvbnN0IGF1dG9HZW5lcmF0ZWRFeGVjdXRpb25Sb2xlID0gbmV3IGlhbS5Sb2xlKHNjb3BlLCAnRXhlY3V0aW9uUm9sZScsIHtcbiAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnaW1hZ2VidWlsZGVyLmFtYXpvbmF3cy5jb20nKSxcbiAgfSk7XG4gIGdyYW50RGVmYXVsdEV4ZWN1dGlvblJvbGVQZXJtaXNzaW9ucyhhdXRvR2VuZXJhdGVkRXhlY3V0aW9uUm9sZSk7XG4gIGFwcGx5R3JhbnRzKGF1dG9HZW5lcmF0ZWRFeGVjdXRpb25Sb2xlKTtcblxuICByZXR1cm4gYXV0b0dlbmVyYXRlZEV4ZWN1dGlvblJvbGU7XG59O1xuXG5jb25zdCBnZXRFeGVjdXRpb25Sb2xlUmVxdWlyZW1lbnRzID0gKHtcbiAgd29ya2Zsb3dzLFxuICBpbWFnZUxvZ0dyb3VwLFxuICBpbWFnZVBpcGVsaW5lTG9nR3JvdXAsXG59OiB7XG4gIGltYWdlTG9nR3JvdXA/OiBsb2dzLklMb2dHcm91cDtcbiAgaW1hZ2VQaXBlbGluZUxvZ0dyb3VwPzogbG9ncy5JTG9nR3JvdXA7XG4gIHdvcmtmbG93cz86IFdvcmtmbG93Q29uZmlndXJhdGlvbltdO1xufSk6IHsgZXhlY3V0aW9uUm9sZVJlcXVpcmVkOiBib29sZWFuOyBhcHBseUdyYW50czogKHJvbGU6IGlhbS5JUm9sZSkgPT4gdm9pZCB9ID0+IHtcbiAgY29uc3QgZ3JhbnRlcnM6IEFycmF5PChyb2xlOiBpYW0uSVJvbGUpID0+IHZvaWQ+ID0gW107XG5cbiAgY29uc3QgaGFzV29ya2Zsb3dzID0gQm9vbGVhbih3b3JrZmxvd3M/Lmxlbmd0aCk7XG4gIGNvbnN0IGFkZEltYWdlTG9nR3JvdXBQZXJtaXNzaW9ucyA9XG4gICAgaW1hZ2VMb2dHcm91cCAhPT0gdW5kZWZpbmVkICYmXG4gICAgIWNkay5Ub2tlbi5pc1VucmVzb2x2ZWQoaW1hZ2VMb2dHcm91cC5sb2dHcm91cE5hbWUpICYmXG4gICAgIWltYWdlTG9nR3JvdXAubG9nR3JvdXBOYW1lLnN0YXJ0c1dpdGgoJy9hd3MvaW1hZ2VidWlsZGVyLycpO1xuICBjb25zdCBhZGRQaXBlbGluZUxvZ0dyb3VwUGVybWlzc2lvbnMgPVxuICAgIGltYWdlUGlwZWxpbmVMb2dHcm91cCAhPT0gdW5kZWZpbmVkICYmXG4gICAgIWNkay5Ub2tlbi5pc1VucmVzb2x2ZWQoaW1hZ2VQaXBlbGluZUxvZ0dyb3VwLmxvZ0dyb3VwTmFtZSkgJiZcbiAgICAhaW1hZ2VQaXBlbGluZUxvZ0dyb3VwLmxvZ0dyb3VwTmFtZS5zdGFydHNXaXRoKCcvYXdzL2ltYWdlYnVpbGRlci8nKTtcblxuICBpZiAoYWRkSW1hZ2VMb2dHcm91cFBlcm1pc3Npb25zKSB7XG4gICAgZ3JhbnRlcnMucHVzaCgocm9sZSkgPT4gaW1hZ2VMb2dHcm91cCEuZ3JhbnRXcml0ZShyb2xlKSk7XG4gIH1cblxuICBpZiAoYWRkUGlwZWxpbmVMb2dHcm91cFBlcm1pc3Npb25zKSB7XG4gICAgZ3JhbnRlcnMucHVzaCgocm9sZSkgPT4gaW1hZ2VQaXBlbGluZUxvZ0dyb3VwIS5ncmFudFdyaXRlKHJvbGUpKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhlY3V0aW9uUm9sZVJlcXVpcmVkOiBoYXNXb3JrZmxvd3MgfHwgYWRkSW1hZ2VMb2dHcm91cFBlcm1pc3Npb25zIHx8IGFkZFBpcGVsaW5lTG9nR3JvdXBQZXJtaXNzaW9ucyxcbiAgICBhcHBseUdyYW50czogKHJvbGU6IGlhbS5JUm9sZSkgPT4gZ3JhbnRlcnMuZm9yRWFjaCgoZ3JhbnRlcikgPT4gZ3JhbnRlcihyb2xlKSksXG4gIH07XG59O1xuIl19
|
package/lib/recipe-base.js
CHANGED
|
@@ -6,7 +6,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
6
6
|
* The parameter value for a component parameter
|
|
7
7
|
*/
|
|
8
8
|
class ComponentParameterValue {
|
|
9
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentParameterValue", version: "2.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentParameterValue", version: "2.231.0-alpha.0" };
|
|
10
10
|
/**
|
|
11
11
|
* The value of the parameter as a string
|
|
12
12
|
*
|