@aws-cdk/aws-imagebuilder-alpha 2.229.1-alpha.0 → 2.230.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 +4184 -928
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +173 -1
- package/README.md +588 -0
- package/lib/base-image.js +3 -3
- 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/index.d.ts +2 -0
- package/lib/index.js +3 -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/image-and-pipeline-props-helper.d.ts +25 -0
- package/lib/private/image-and-pipeline-props-helper.js +67 -0
- package/lib/private/policy-helper.d.ts +20 -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 +37 -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtYW5kLXBpcGVsaW5lLXByb3BzLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltYWdlLWFuZC1waXBlbGluZS1wcm9wcy1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW1DO0FBS25DOzs7OztHQUtHO0FBQ0ksTUFBTSw0QkFBNEIsR0FBRyxDQUkxQyxLQUFhLEVBQ1EsRUFBRTtJQUN2QixJQUFJLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMxQyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBYSxDQUFDO0FBQ25FLENBQUMsQ0FBQztBQVhXLFFBQUEsNEJBQTRCLGdDQVd2QztBQUVGOzs7Ozs7R0FNRztBQUNJLE1BQU0sK0JBQStCLEdBQUcsQ0FJN0MsS0FBZ0IsRUFDaEIsS0FBYSxFQUNRLEVBQUU7SUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxLQUFLLENBQUMsMEJBQTBCLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDekYsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsMEVBQTBFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkgsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLElBQUksS0FBSyxDQUFDLG9CQUFvQixLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ25GLE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLG9FQUFvRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRCxNQUFNLGdCQUFnQixHQUE4QztRQUNsRSxHQUFHLENBQUMsS0FBSyxDQUFDLDBCQUEwQixLQUFLLFNBQVMsSUFBSTtZQUNwRCxjQUFjLEVBQUUsS0FBSyxDQUFDLDBCQUEwQixDQUFDLGNBQWM7U0FDaEUsQ0FBQztRQUNGLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7S0FDaEcsQ0FBQztJQUVGLE1BQU0sMEJBQTBCLEdBQUc7UUFDakMsR0FBRyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsS0FBSyxTQUFTLElBQUksRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNyRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLGdCQUFnQixFQUFFLENBQUM7S0FDbEUsQ0FBQztJQUVGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsMEJBQXNDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUM5RyxDQUFDLENBQUM7QUE1QlcsUUFBQSwrQkFBK0IsbUNBNEIxQztBQUVGOzs7OztHQUtHO0FBQ0ksTUFBTSxjQUFjLEdBQUcsQ0FJNUIsS0FBYSxFQUNRLEVBQUU7SUFDdkIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNyRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkYsSUFBSTtZQUNKLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztTQUNuQixDQUFDLENBQUMsQ0FBQztRQUNKLE9BQU87WUFDTCxXQUFXLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXO1lBQzFDLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztZQUM3QixhQUFhLEVBQUUsUUFBUSxDQUFDLGFBQWE7WUFDckMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztTQUN6QyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFFLFlBQXdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN0RSxDQUFDLENBQUM7QUFwQlcsUUFBQSxjQUFjLGtCQW9CekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ2ZuSW1hZ2UsIENmbkltYWdlUGlwZWxpbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaW1hZ2VidWlsZGVyJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSW1hZ2VQaXBlbGluZVByb3BzIH0gZnJvbSAnLi4vaW1hZ2UtcGlwZWxpbmUnO1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgaW1hZ2UgdGVzdHMgY29uZmlndXJhdGlvbiBwcm9wZXJ0eSBpbnRvIHRoZSBgSW1hZ2VUZXN0c0NvbmZpZ3VyYXRpb25gIHR5cGUgaW4gdGhlIENsb3VkRm9ybWF0aW9uIEwxXG4gKiBkZWZpbml0aW9uLlxuICpcbiAqIEBwYXJhbSBwcm9wcyBQcm9wcyBpbnB1dCBmb3IgdGhlIGNvbnN0cnVjdFxuICovXG5leHBvcnQgY29uc3QgYnVpbGRJbWFnZVRlc3RzQ29uZmlndXJhdGlvbiA9IDxcbiAgUHJvcHNUIGV4dGVuZHMgSW1hZ2VQaXBlbGluZVByb3BzLFxuICBPdXRwdXRUIGV4dGVuZHMgQ2ZuSW1hZ2VQaXBlbGluZS5JbWFnZVRlc3RzQ29uZmlndXJhdGlvblByb3BlcnR5IHwgQ2ZuSW1hZ2UuSW1hZ2VUZXN0c0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSxcbj4oXG4gIHByb3BzOiBQcm9wc1QsXG4pOiBPdXRwdXRUIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHByb3BzLmltYWdlVGVzdHNFbmFibGVkID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHsgaW1hZ2VUZXN0c0VuYWJsZWQ6IHByb3BzLmltYWdlVGVzdHNFbmFibGVkIH0gYXMgT3V0cHV0VDtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBpbWFnZSBzY2FubmluZyBjb25maWd1cmF0aW9uIHByb3BlcnR5IGludG8gdGhlIGBJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbmAgdHlwZSBpbiB0aGUgQ2xvdWRGb3JtYXRpb25cbiAqIEwxIGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAqIEBwYXJhbSBwcm9wcyBQcm9wcyBpbnB1dCBmb3IgdGhlIGNvbnN0cnVjdFxuICovXG5leHBvcnQgY29uc3QgYnVpbGRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbiA9IDxcbiAgUHJvcHNUIGV4dGVuZHMgSW1hZ2VQaXBlbGluZVByb3BzLFxuICBPdXRwdXRUIGV4dGVuZHMgQ2ZuSW1hZ2VQaXBlbGluZS5JbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvblByb3BlcnR5IHwgQ2ZuSW1hZ2UuSW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSxcbj4oXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIHByb3BzOiBQcm9wc1QsXG4pOiBPdXRwdXRUIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFwcm9wcy5yZWNpcGUuX2lzQ29udGFpbmVyUmVjaXBlKCkgJiYgcHJvcHMuaW1hZ2VTY2FubmluZ0VjclJlcG9zaXRvcnkgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCdpbWFnZVNjYW5uaW5nRWNyUmVwb3NpdG9yeSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY29udGFpbmVyIHJlY2lwZSBidWlsZHMnLCBzY29wZSk7XG4gIH1cblxuICBpZiAoIXByb3BzLnJlY2lwZS5faXNDb250YWluZXJSZWNpcGUoKSAmJiBwcm9wcy5pbWFnZVNjYW5uaW5nRWNyVGFncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ2ltYWdlU2Nhbm5pbmdFY3JUYWdzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjb250YWluZXIgcmVjaXBlIGJ1aWxkcycsIHNjb3BlKTtcbiAgfVxuXG4gIGNvbnN0IGVjckNvbmZpZ3VyYXRpb246IENmbkltYWdlUGlwZWxpbmUuRWNyQ29uZmlndXJhdGlvblByb3BlcnR5ID0ge1xuICAgIC4uLihwcm9wcy5pbWFnZVNjYW5uaW5nRWNyUmVwb3NpdG9yeSAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgIHJlcG9zaXRvcnlOYW1lOiBwcm9wcy5pbWFnZVNjYW5uaW5nRWNyUmVwb3NpdG9yeS5yZXBvc2l0b3J5TmFtZSxcbiAgICB9KSxcbiAgICAuLi4oKHByb3BzLmltYWdlU2Nhbm5pbmdFY3JUYWdzID8/IFtdKS5sZW5ndGggJiYgeyBjb250YWluZXJUYWdzOiBwcm9wcy5pbWFnZVNjYW5uaW5nRWNyVGFncyB9KSxcbiAgfTtcblxuICBjb25zdCBpbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbiA9IHtcbiAgICAuLi4ocHJvcHMuaW1hZ2VTY2FubmluZ0VuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiB7IGltYWdlU2Nhbm5pbmdFbmFibGVkOiBwcm9wcy5pbWFnZVNjYW5uaW5nRW5hYmxlZCB9KSxcbiAgICAuLi4oT2JqZWN0LmtleXMoZWNyQ29uZmlndXJhdGlvbikubGVuZ3RoICYmIHsgZWNyQ29uZmlndXJhdGlvbiB9KSxcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0LmtleXMoaW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb24pLmxlbmd0aCA/IChpbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbiBhcyBPdXRwdXRUKSA6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB3b3JrZmxvd3MgcHJvcGVydHkgaW50byB0aGUgYFdvcmtmbG93Q29uZmlndXJhdGlvbmAgdHlwZSBpbiB0aGUgQ2xvdWRGb3JtYXRpb24gTDFcbiAqIGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIHByb3BzIFByb3BzIGlucHV0IGZvciB0aGUgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZFdvcmtmbG93cyA9IDxcbiAgUHJvcHNUIGV4dGVuZHMgSW1hZ2VQaXBlbGluZVByb3BzLFxuICBPdXRwdXRUIGV4dGVuZHMgQ2ZuSW1hZ2VQaXBlbGluZS5Xb3JrZmxvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdIHwgQ2ZuSW1hZ2UuV29ya2Zsb3dDb25maWd1cmF0aW9uUHJvcGVydHlbXSxcbj4oXG4gIHByb3BzOiBQcm9wc1QsXG4pOiBPdXRwdXRUIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgY2ZuV29ya2Zsb3dzID0gcHJvcHMud29ya2Zsb3dzPy5tYXAoKHdvcmtmbG93KSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IE9iamVjdC5lbnRyaWVzKHdvcmtmbG93LnBhcmFtZXRlcnMgPz8ge30pLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgfSkpO1xuICAgIHJldHVybiB7XG4gICAgICB3b3JrZmxvd0Fybjogd29ya2Zsb3cud29ya2Zsb3cud29ya2Zsb3dBcm4sXG4gICAgICBvbkZhaWx1cmU6IHdvcmtmbG93Lm9uRmFpbHVyZSxcbiAgICAgIHBhcmFsbGVsR3JvdXA6IHdvcmtmbG93LnBhcmFsbGVsR3JvdXAsXG4gICAgICAuLi4ocGFyYW1ldGVycy5sZW5ndGggJiYgeyBwYXJhbWV0ZXJzIH0pLFxuICAgIH07XG4gIH0pO1xuXG4gIHJldHVybiBjZm5Xb3JrZmxvd3M/Lmxlbmd0aCA/IChjZm5Xb3JrZmxvd3MgYXMgT3V0cHV0VCkgOiB1bmRlZmluZWQ7XG59O1xuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
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 { ImagePipelineProps } from '../image-pipeline';
|
|
5
|
+
import { WorkflowConfiguration } from '../workflow';
|
|
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
|
+
export declare const defaultExecutionRolePolicy: <PropsT extends ImagePipelineProps>(scope: Construct, props?: PropsT) => iam.PolicyStatement[];
|
|
15
|
+
export declare const getExecutionRole: (scope: Construct, grantDefaultExecutionRolePermissions: (grantee: iam.IGrantable) => void, { executionRole, workflows, imageLogGroup, imagePipelineLogGroup, }: {
|
|
16
|
+
executionRole?: iam.IRole;
|
|
17
|
+
imageLogGroup?: logs.ILogGroup;
|
|
18
|
+
imagePipelineLogGroup?: logs.ILogGroup;
|
|
19
|
+
workflows?: WorkflowConfiguration[];
|
|
20
|
+
}) => 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBvbGljeS1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW1DO0FBQ25DLDJDQUEyQztBQU0zQzs7Ozs7OztHQU9HO0FBQ0ksTUFBTSwwQkFBMEIsR0FBRyxDQUN4QyxLQUFnQixFQUNoQixLQUFjLEVBQ1MsRUFBRTtJQUN6QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDNUIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUU5QixrSUFBa0k7SUFDbEksbUdBQW1HO0lBQ25HLE1BQU0sUUFBUSxHQUFHO1FBQ2YsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDeEIsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDOUIsU0FBUyxFQUFFLENBQUMsT0FBTyxTQUFTLGlCQUFpQixDQUFDO1lBQzlDLFVBQVUsRUFBRTtnQkFDVixZQUFZLEVBQUU7b0JBQ1osMEJBQTBCLEVBQUUsbUJBQW1CO2lCQUNoRDthQUNGO1NBQ0YsQ0FBQztRQUNGLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUN0QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ3hCLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO1lBQzlCLFNBQVMsRUFBRSxDQUFDLE9BQU8sU0FBUyxvQkFBb0IsQ0FBQztZQUNqRCxVQUFVLEVBQUU7Z0JBQ1YsWUFBWSxFQUFFO29CQUNaLDJCQUEyQixFQUFFLG1CQUFtQjtpQkFDakQ7YUFDRjtTQUNGLENBQUM7UUFD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SUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsT0FBTztRQUNMLHFCQUFxQixFQUFFLFlBQVksSUFBSSwyQkFBMkIsSUFBSSw4QkFBOEI7UUFDcEcsV0FBVyxFQUFFLENBQUMsSUFBZSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDL0UsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSW1hZ2VQaXBlbGluZVByb3BzIH0gZnJvbSAnLi4vaW1hZ2UtcGlwZWxpbmUnO1xuaW1wb3J0IHsgV29ya2Zsb3dDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vd29ya2Zsb3cnO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlZmF1bHQgZXhlY3V0aW9uIHJvbGUgcG9saWN5LCBmb3IgYXV0by1nZW5lcmF0ZWQgZXhlY3V0aW9uIHJvbGVzLlxuICpcbiAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gKiBAcGFyYW0gcHJvcHMgUHJvcHMgaW5wdXQgZm9yIHRoZSBjb25zdHJ1Y3RcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hd3MtbWFuYWdlZC1wb2xpY3kvbGF0ZXN0L3JlZmVyZW5jZS9BV1NTZXJ2aWNlUm9sZUZvckltYWdlQnVpbGRlci5odG1sXG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0RXhlY3V0aW9uUm9sZVBvbGljeSA9IDxQcm9wc1QgZXh0ZW5kcyBJbWFnZVBpcGVsaW5lUHJvcHM+KFxuICBzY29wZTogQ29uc3RydWN0LFxuICBwcm9wcz86IFByb3BzVCxcbik6IGlhbS5Qb2xpY3lTdGF0ZW1lbnRbXSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gY2RrLlN0YWNrLm9mKHNjb3BlKTtcbiAgY29uc3QgcGFydGl0aW9uID0gc3RhY2sucGFydGl0aW9uO1xuICBjb25zdCByZWdpb24gPSBzdGFjay5yZWdpb247XG4gIGNvbnN0IGFjY291bnQgPSBzdGFjay5hY2NvdW50O1xuXG4gIC8vIFBlcm1pc3Npb25zIGFyZSBpZGVudGljYWwgdG8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F3cy1tYW5hZ2VkLXBvbGljeS9sYXRlc3QvcmVmZXJlbmNlL0FXU1NlcnZpY2VSb2xlRm9ySW1hZ2VCdWlsZGVyLmh0bWxcbiAgLy8gU0xSIHBvbGljaWVzIGNhbm5vdCBiZSBhdHRhY2hlZCB0byByb2xlcywgYW5kIG5vIG1hbmFnZWQgcG9saWN5IGV4aXN0cyBmb3IgdGhlc2UgcGVybWlzc2lvbnMgeWV0XG4gIGNvbnN0IHBvbGljaWVzID0gW1xuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnZWMyOlJlZ2lzdGVySW1hZ2UnXSxcbiAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OmVjMjoqOjppbWFnZS8qYF0sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICdhd3M6UmVxdWVzdFRhZy9DcmVhdGVkQnknOiAnRUMyIEltYWdlIEJ1aWxkZXInLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSxcbiAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ2VjMjpSZWdpc3RlckltYWdlJ10sXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7cGFydGl0aW9ufTplYzI6Kjo6c25hcHNob3QvKmBdLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAnZWMyOlJlc291cmNlVGFnL0NyZWF0ZWRCeSc6ICdFQzIgSW1hZ2UgQnVpbGRlcicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnZWMyOlJ1bkluc3RhbmNlcyddLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIGBhcm46JHtwYXJ0aXRpb259OmVjMjoqOjppbWFnZS8qYCxcbiAgICAgICAgYGFybjoke3BhcnRpdGlvbn06ZWMyOio6OnNuYXBzaG90LypgLFxuICAgICAgICBgYXJuOiR7cGFydGl0aW9ufTplYzI6KjoqOnN1Ym5ldC8qYCxcbiAgICAgICAgYGFybjoke3BhcnRpdGlvbn06ZWMyOio6KjpuZXR3b3JrLWludGVyZmFjZS8qYCxcbiAgICAgICAgYGFybjoke3BhcnRpdGlvbn06ZWMyOio6KjpzZWN1cml0eS1ncm91cC8qYCxcbiAgICAgICAgYGFybjoke3BhcnRpdGlvbn06ZWMyOio6KjprZXktcGFpci8qYCxcbiAgICAgICAgYGFybjoke3BhcnRpdGlvbn06ZWMyOio6KjpsYXVuY2gtdGVtcGxhdGUvKmAsXG4gICAgICAgIGBhcm46JHtwYXJ0aXRpb259OmxpY2Vuc2UtbWFuYWdlcjoqOio6bGljZW5zZS1jb25maWd1cmF0aW9uOipgLFxuICAgICAgXSxcbiAgICB9KSxcbiAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ2VjMjpSdW5JbnN0YW5jZXMnXSxcbiAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OmVjMjoqOio6dm9sdW1lLypgLCBgYXJuOiR7cGFydGl0aW9ufTplYzI6KjoqOmluc3RhbmNlLypgXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgJ2F3czpSZXF1ZXN0VGFnL0NyZWF0ZWRCeSc6IFsnRUMyIEltYWdlIEJ1aWxkZXInLCAnRUMyIEZhc3QgTGF1bmNoJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnaWFtOlBhc3NSb2xlJ10sXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAnaWFtOlBhc3NlZFRvU2VydmljZSc6IFsnZWMyLmFtYXpvbmF3cy5jb20nLCAnZWMyLmFtYXpvbmF3cy5jb20uY24nLCAndm1pZS5hbWF6b25hd3MuY29tJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnZWMyOlN0b3BJbnN0YW5jZXMnLCAnZWMyOlN0YXJ0SW5zdGFuY2VzJywgJ2VjMjpUZXJtaW5hdGVJbnN0YW5jZXMnXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICdlYzI6UmVzb3VyY2VUYWcvQ3JlYXRlZEJ5JzogJ0VDMiBJbWFnZSBCdWlsZGVyJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnZWMyOkNvcHlJbWFnZScsXG4gICAgICAgICdlYzI6Q3JlYXRlSW1hZ2UnLFxuICAgICAgICAnZWMyOkNyZWF0ZUxhdW5jaFRlbXBsYXRlJyxcbiAgICAgICAgJ2VjMjpEZXJlZ2lzdGVySW1hZ2UnLFxuICAgICAgICAnZWMyOkRlc2NyaWJlSW1hZ2VzJyxcbiAgICAgICAgJ2VjMjpEZXNjcmliZUluc3RhbmNlQXR0cmlidXRlJyxcbiAgICAgICAgJ2VjMjpEZXNjcmliZUluc3RhbmNlU3RhdHVzJyxcbiAgICAgICAgJ2VjMjpEZXNjcmliZUluc3RhbmNlcycsXG4gICAgICAgICdlYzI6RGVzY3JpYmVJbnN0YW5jZVR5cGVPZmZlcmluZ3MnLFxuICAgICAgICAnZWMyOkRlc2NyaWJlSW5zdGFuY2VUeXBlcycsXG4gICAgICAgICdlYzI6RGVzY3JpYmVTdWJuZXRzJyxcbiAgICAgICAgJ2VjMjpEZXNjcmliZVRhZ3MnLFxuICAgICAgICAnZWMyOk1vZGlmeUltYWdlQXR0cmlidXRlJyxcbiAgICAgICAgJ2VjMjpEZXNjcmliZUltcG9ydEltYWdlVGFza3MnLFxuICAgICAgICAnZWMyOkRlc2NyaWJlU25hcHNob3RzJyxcbiAgICAgICAgJ2VjMjpEZXNjcmliZUhvc3RzJyxcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnZWMyOk1vZGlmeVNuYXBzaG90QXR0cmlidXRlJ10sXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7cGFydGl0aW9ufTplYzI6Kjo6c25hcHNob3QvKmBdLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAnZWMyOlJlc291cmNlVGFnL0NyZWF0ZWRCeSc6ICdFQzIgSW1hZ2UgQnVpbGRlcicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnZWMyOkNyZWF0ZVRhZ3MnXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICdlYzI6Q3JlYXRlQWN0aW9uJzogWydSdW5JbnN0YW5jZXMnLCAnQ3JlYXRlSW1hZ2UnXSxcbiAgICAgICAgICAnYXdzOlJlcXVlc3RUYWcvQ3JlYXRlZEJ5JzogWydFQzIgSW1hZ2UgQnVpbGRlcicsICdFQzIgRmFzdCBMYXVuY2gnXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydlYzI6Q3JlYXRlVGFncyddLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke3BhcnRpdGlvbn06ZWMyOio6OmltYWdlLypgLCBgYXJuOiR7cGFydGl0aW9ufTplYzI6KjoqOmV4cG9ydC1pbWFnZS10YXNrLypgXSxcbiAgICB9KSxcbiAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ2VjMjpDcmVhdGVUYWdzJ10sXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7cGFydGl0aW9ufTplYzI6Kjo6c25hcHNob3QvKmAsIGBhcm46JHtwYXJ0aXRpb259OmVjMjoqOio6bGF1bmNoLXRlbXBsYXRlLypgXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgJ2F3czpSZXF1ZXN0VGFnL0NyZWF0ZWRCeSc6IFsnRUMyIEltYWdlIEJ1aWxkZXInLCAnRUMyIEZhc3QgTGF1bmNoJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnc25zOlB1Ymxpc2gnXSxcbiAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OnNuczoke3JlZ2lvbn06JHthY2NvdW50fToqYF0sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnc3NtOkxpc3RDb21tYW5kcycsXG4gICAgICAgICdzc206TGlzdENvbW1hbmRJbnZvY2F0aW9ucycsXG4gICAgICAgICdzc206QWRkVGFnc1RvUmVzb3VyY2UnLFxuICAgICAgICAnc3NtOkRlc2NyaWJlSW5zdGFuY2VJbmZvcm1hdGlvbicsXG4gICAgICAgICdzc206TGlzdEludmVudG9yeUVudHJpZXMnLFxuICAgICAgICAnc3NtOkRlc2NyaWJlSW5zdGFuY2VBc3NvY2lhdGlvbnNTdGF0dXMnLFxuICAgICAgICAnc3NtOkRlc2NyaWJlQXNzb2NpYXRpb25FeGVjdXRpb25zJyxcbiAgICAgICAgJ3NzbTpHZXRDb21tYW5kSW52b2NhdGlvbicsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICB9KSxcbiAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ3NzbTpTZW5kQ29tbWFuZCddLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIGBhcm46JHtwYXJ0aXRpb259OnNzbToqOio6ZG9jdW1lbnQvQVdTLVJ1blBvd2VyU2hlbGxTY3JpcHRgLFxuICAgICAgICBgYXJuOiR7cGFydGl0aW9ufTpzc206KjoqOmRvY3VtZW50L0FXUy1SdW5TaGVsbFNjcmlwdGAsXG4gICAgICAgIGBhcm46JHtwYXJ0aXRpb259OnNzbToqOio6ZG9jdW1lbnQvQVdTRUMyLVJ1blN5c3ByZXBgLFxuICAgICAgICBgYXJuOiR7cGFydGl0aW9ufTpzMzo6OipgLFxuICAgICAgXSxcbiAgICB9KSxcbiAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ3NzbTpTZW5kQ29tbWFuZCddLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke3BhcnRpdGlvbn06ZWMyOio6KjppbnN0YW5jZS8qYF0sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICdzc206cmVzb3VyY2VUYWcvQ3JlYXRlZEJ5JzogWydFQzIgSW1hZ2UgQnVpbGRlciddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSxcbiAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ3NzbTpDcmVhdGVBc3NvY2lhdGlvbicsICdzc206RGVsZXRlQXNzb2NpYXRpb24nXSxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICBgYXJuOiR7cGFydGl0aW9ufTpzc206KjoqOmRvY3VtZW50L0FXUy1HYXRoZXJTb2Z0d2FyZUludmVudG9yeWAsXG4gICAgICAgIGBhcm46JHtwYXJ0aXRpb259OnNzbToqOio6YXNzb2NpYXRpb24vKmAsXG4gICAgICAgIGBhcm46JHtwYXJ0aXRpb259OmVjMjoqOio6aW5zdGFuY2UvKmAsXG4gICAgICBdLFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ2ttczpFbmNyeXB0JyxcbiAgICAgICAgJ2ttczpEZWNyeXB0JyxcbiAgICAgICAgJ2ttczpSZUVuY3J5cHRGcm9tJyxcbiAgICAgICAgJ2ttczpSZUVuY3J5cHRUbycsXG4gICAgICAgICdrbXM6R2VuZXJhdGVEYXRhS2V5V2l0aG91dFBsYWludGV4dCcsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgJ0ZvckFsbFZhbHVlczpTdHJpbmdFcXVhbHMnOiB7XG4gICAgICAgICAgJ2ttczpFbmNyeXB0aW9uQ29udGV4dEtleXMnOiBbJ2F3czplYnM6aWQnXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ1N0cmluZ0xpa2UnOiB7XG4gICAgICAgICAgJ2ttczpWaWFTZXJ2aWNlJzogWydlYzIuKi5hbWF6b25hd3MuY29tJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsna21zOkRlc2NyaWJlS2V5J10sXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBTdHJpbmdMaWtlOiB7XG4gICAgICAgICAgJ2ttczpWaWFTZXJ2aWNlJzogWydlYzIuKi5hbWF6b25hd3MuY29tJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsna21zOkNyZWF0ZUdyYW50J10sXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBCb29sOiB7XG4gICAgICAgICAgJ2ttczpHcmFudElzRm9yQVdTUmVzb3VyY2UnOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBTdHJpbmdMaWtlOiB7XG4gICAgICAgICAgJ2ttczpWaWFTZXJ2aWNlJzogWydlYzIuKi5hbWF6b25hd3MuY29tJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pLFxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnbG9nczpDcmVhdGVMb2dTdHJlYW0nLCAnbG9nczpDcmVhdGVMb2dHcm91cCcsICdsb2dzOlB1dExvZ0V2ZW50cyddLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke3BhcnRpdGlvbn06bG9nczoqOio6bG9nLWdyb3VwOi9hd3MvaW1hZ2VidWlsZGVyLypgXSxcbiAgICB9KSxcbiAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ2lhbTpDcmVhdGVTZXJ2aWNlTGlua2VkUm9sZSddLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgJ2lhbTpBV1NTZXJ2aWNlTmFtZSc6IFsnc3NtLmFtYXpvbmF3cy5jb20nXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnZXZlbnRzOkRlbGV0ZVJ1bGUnLFxuICAgICAgICAnZXZlbnRzOkRlc2NyaWJlUnVsZScsXG4gICAgICAgICdldmVudHM6UHV0UnVsZScsXG4gICAgICAgICdldmVudHM6UHV0VGFyZ2V0cycsXG4gICAgICAgICdldmVudHM6UmVtb3ZlVGFyZ2V0cycsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke3BhcnRpdGlvbn06ZXZlbnRzOio6KjpydWxlL0ltYWdlQnVpbGRlci0qYF0sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydzc206R2V0UGFyYW1ldGVyJywgJ3NzbTpQdXRQYXJhbWV0ZXInXSxcbiAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OnNzbToqOio6cGFyYW1ldGVyL2ltYWdlYnVpbGRlci8qYF0sXG4gICAgfSksXG4gICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydzc206R2V0UGFyYW1ldGVyJ10sXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7cGFydGl0aW9ufTpzc206Kjo6cGFyYW1ldGVyL2F3cy9zZXJ2aWNlLypgXSxcbiAgICB9KSxcbiAgXTtcblxuICBjb25zdCBoYXNQcm9wcyA9IHByb3BzICE9PSB1bmRlZmluZWQ7XG4gIGlmICghaGFzUHJvcHMgfHwgKHByb3BzLnJlY2lwZS5faXNJbWFnZVJlY2lwZSgpICYmIHByb3BzLmRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gIT09IHVuZGVmaW5lZCkpIHtcbiAgICAvLyBEaXN0cmlidXRpb24tc3BlY2lmaWMgcGVybWlzc2lvbnMgaWYgZGlzdHJpYnV0aW9uIHNldHRpbmdzIGFyZSBwcm92aWRlZC4gQWxsIHBlcm1pc3Npb25zIGhlcmUgYXJlIGZvciBBTUkgYnVpbGRzXG4gICAgLy8gc3BlY2lmaWNhbGx5LlxuICAgIHBvbGljaWVzLnB1c2goXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydlYzI6RGVzY3JpYmVFeHBvcnRJbWFnZVRhc2tzJ10sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSxcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ2xpY2Vuc2UtbWFuYWdlcjpVcGRhdGVMaWNlbnNlU3BlY2lmaWNhdGlvbnNGb3JSZXNvdXJjZSddLFxuICAgICAgICByZXNvdXJjZXM6IFtgYXJuOiR7cGFydGl0aW9ufTpsaWNlbnNlLW1hbmFnZXI6Kjoke2FjY291bnR9OmxpY2Vuc2UtY29uZmlndXJhdGlvbjoqYF0sXG4gICAgICB9KSxcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ3N0czpBc3N1bWVSb2xlJ10sXG4gICAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OmlhbTo6Kjpyb2xlL0VDMkltYWdlQnVpbGRlckRpc3RyaWJ1dGlvbkNyb3NzQWNjb3VudFJvbGVgXSxcbiAgICAgIH0pLFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnZWMyOkRlc2NyaWJlTGF1bmNoVGVtcGxhdGVzJywgJ2VjMjpEZXNjcmliZUxhdW5jaFRlbXBsYXRlVmVyc2lvbnMnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pLFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnZWMyOkNyZWF0ZUxhdW5jaFRlbXBsYXRlVmVyc2lvbicsICdlYzI6TW9kaWZ5TGF1bmNoVGVtcGxhdGUnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbYGFybjoke3BhcnRpdGlvbn06ZWMyOiR7cmVnaW9ufToke2FjY291bnR9OmxhdW5jaC10ZW1wbGF0ZS8qYF0sXG4gICAgICB9KSxcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ2VjMjpFeHBvcnRJbWFnZSddLFxuICAgICAgICByZXNvdXJjZXM6IFtgYXJuOiR7cGFydGl0aW9ufTplYzI6Kjo6aW1hZ2UvKmBdLFxuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAnZWMyOlJlc291cmNlVGFnL0NyZWF0ZWRCeSc6ICdFQzIgSW1hZ2UgQnVpbGRlcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnZWMyOkV4cG9ydEltYWdlJ10sXG4gICAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OmVjMjoqOio6ZXhwb3J0LWltYWdlLXRhc2svKmBdLFxuICAgICAgfSksXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydlYzI6Q2FuY2VsRXhwb3J0VGFzayddLFxuICAgICAgICByZXNvdXJjZXM6IFtgYXJuOiR7cGFydGl0aW9ufTplYzI6KjoqOmV4cG9ydC1pbWFnZS10YXNrLypgXSxcbiAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgJ2VjMjpSZXNvdXJjZVRhZy9DcmVhdGVkQnknOiAnRUMyIEltYWdlIEJ1aWxkZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ2lhbTpDcmVhdGVTZXJ2aWNlTGlua2VkUm9sZSddLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAnaWFtOkFXU1NlcnZpY2VOYW1lJzogWydlYzJmYXN0bGF1bmNoLmFtYXpvbmF3cy5jb20nXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydlYzI6RW5hYmxlRmFzdExhdW5jaCddLFxuICAgICAgICByZXNvdXJjZXM6IFtgYXJuOiR7cGFydGl0aW9ufTplYzI6Kjo6aW1hZ2UvKmAsIGBhcm46JHtwYXJ0aXRpb259OmVjMjoqOio6bGF1bmNoLXRlbXBsYXRlLypgXSxcbiAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgJ2VjMjpSZXNvdXJjZVRhZy9DcmVhdGVkQnknOiAnRUMyIEltYWdlIEJ1aWxkZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wcyB8fCBwcm9wcy5pbWFnZVNjYW5uaW5nRW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICAvLyBBZGQgSW5zcGVjdG9yIHBlcm1pc3Npb25zIGlmIHNjYW5uaW5nIGlzIGVuYWJsZWRcbiAgICBwb2xpY2llcy5wdXNoKFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnaW5zcGVjdG9yMjpMaXN0Q292ZXJhZ2UnLCAnaW5zcGVjdG9yMjpMaXN0RmluZGluZ3MnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBBZGQgaW1hZ2Ugc2Nhbm5pbmcgRUNSIHBlcm1pc3Npb25zIGZvciBjb250YWluZXIgYnVpbGRzXG4gICAgaWYgKCFoYXNQcm9wcyB8fCBwcm9wcy5yZWNpcGUuX2lzQ29udGFpbmVyUmVjaXBlKCkpIHtcbiAgICAgIHBvbGljaWVzLnB1c2goXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogWydlY3I6Q3JlYXRlUmVwb3NpdG9yeSddLFxuICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAgICdhd3M6UmVxdWVzdFRhZy9DcmVhdGVkQnknOiAnRUMyIEltYWdlIEJ1aWxkZXInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ2VjcjpUYWdSZXNvdXJjZSddLFxuICAgICAgICAgIHJlc291cmNlczogW2Bhcm46JHtwYXJ0aXRpb259OmVjcjoqOio6cmVwb3NpdG9yeS9pbWFnZS1idWlsZGVyLSpgXSxcbiAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICAgJ2F3czpSZXF1ZXN0VGFnL0NyZWF0ZWRCeSc6ICdFQzIgSW1hZ2UgQnVpbGRlcicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnZWNyOkJhdGNoRGVsZXRlSW1hZ2UnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtgYXJuOiR7cGFydGl0aW9ufTplY3I6KjoqOnJlcG9zaXRvcnkvaW1hZ2UtYnVpbGRlci0qYF0sXG4gICAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAgICdlY3I6UmVzb3VyY2VUYWcvQ3JlYXRlZEJ5JzogJ0VDMiBJbWFnZSBCdWlsZGVyJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwb2xpY2llcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFeGVjdXRpb25Sb2xlID0gKFxuICBzY29wZTogQ29uc3RydWN0LFxuICBncmFudERlZmF1bHRFeGVjdXRpb25Sb2xlUGVybWlzc2lvbnM6IChncmFudGVlOiBpYW0uSUdyYW50YWJsZSkgPT4gdm9pZCxcbiAge1xuICAgIGV4ZWN1dGlvblJvbGUsXG4gICAgd29ya2Zsb3dzLFxuICAgIGltYWdlTG9nR3JvdXAsXG4gICAgaW1hZ2VQaXBlbGluZUxvZ0dyb3VwLFxuICB9OiB7XG4gICAgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcbiAgICBpbWFnZUxvZ0dyb3VwPzogbG9ncy5JTG9nR3JvdXA7XG4gICAgaW1hZ2VQaXBlbGluZUxvZ0dyb3VwPzogbG9ncy5JTG9nR3JvdXA7XG4gICAgd29ya2Zsb3dzPzogV29ya2Zsb3dDb25maWd1cmF0aW9uW107XG4gIH0sXG4pOiBpYW0uSVJvbGUgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCB7IGV4ZWN1dGlvblJvbGVSZXF1aXJlZCwgYXBwbHlHcmFudHMgfSA9IGdldEV4ZWN1dGlvblJvbGVSZXF1aXJlbWVudHMoe1xuICAgIHdvcmtmbG93cyxcbiAgICBpbWFnZUxvZ0dyb3VwLFxuICAgIGltYWdlUGlwZWxpbmVMb2dHcm91cCxcbiAgfSk7XG4gIGlmICghZXhlY3V0aW9uUm9sZVJlcXVpcmVkKSB7XG4gICAgcmV0dXJuIGV4ZWN1dGlvblJvbGU7XG4gIH1cblxuICBpZiAoZXhlY3V0aW9uUm9sZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXBwbHlHcmFudHMoZXhlY3V0aW9uUm9sZSk7XG4gICAgcmV0dXJuIGV4ZWN1dGlvblJvbGU7XG4gIH1cblxuICBjb25zdCBhdXRvR2VuZXJhdGVkRXhlY3V0aW9uUm9sZSA9IG5ldyBpYW0uUm9sZShzY29wZSwgJ0V4ZWN1dGlvblJvbGUnLCB7XG4gICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2ltYWdlYnVpbGRlci5hbWF6b25hd3MuY29tJyksXG4gIH0pO1xuICBncmFudERlZmF1bHRFeGVjdXRpb25Sb2xlUGVybWlzc2lvbnMoYXV0b0dlbmVyYXRlZEV4ZWN1dGlvblJvbGUpO1xuICBhcHBseUdyYW50cyhhdXRvR2VuZXJhdGVkRXhlY3V0aW9uUm9sZSk7XG5cbiAgcmV0dXJuIGF1dG9HZW5lcmF0ZWRFeGVjdXRpb25Sb2xlO1xufTtcblxuY29uc3QgZ2V0RXhlY3V0aW9uUm9sZVJlcXVpcmVtZW50cyA9ICh7XG4gIHdvcmtmbG93cyxcbiAgaW1hZ2VMb2dHcm91cCxcbiAgaW1hZ2VQaXBlbGluZUxvZ0dyb3VwLFxufToge1xuICBpbWFnZUxvZ0dyb3VwPzogbG9ncy5JTG9nR3JvdXA7XG4gIGltYWdlUGlwZWxpbmVMb2dHcm91cD86IGxvZ3MuSUxvZ0dyb3VwO1xuICB3b3JrZmxvd3M/OiBXb3JrZmxvd0NvbmZpZ3VyYXRpb25bXTtcbn0pOiB7IGV4ZWN1dGlvblJvbGVSZXF1aXJlZDogYm9vbGVhbjsgYXBwbHlHcmFudHM6IChyb2xlOiBpYW0uSVJvbGUpID0+IHZvaWQgfSA9PiB7XG4gIGNvbnN0IGdyYW50ZXJzOiBBcnJheTwocm9sZTogaWFtLklSb2xlKSA9PiB2b2lkPiA9IFtdO1xuXG4gIGNvbnN0IGhhc1dvcmtmbG93cyA9IEJvb2xlYW4od29ya2Zsb3dzPy5sZW5ndGgpO1xuICBjb25zdCBhZGRJbWFnZUxvZ0dyb3VwUGVybWlzc2lvbnMgPVxuICAgIGltYWdlTG9nR3JvdXAgIT09IHVuZGVmaW5lZCAmJlxuICAgICFjZGsuVG9rZW4uaXNVbnJlc29sdmVkKGltYWdlTG9nR3JvdXAubG9nR3JvdXBOYW1lKSAmJlxuICAgICFpbWFnZUxvZ0dyb3VwLmxvZ0dyb3VwTmFtZS5zdGFydHNXaXRoKCcvYXdzL2ltYWdlYnVpbGRlci8nKTtcbiAgY29uc3QgYWRkUGlwZWxpbmVMb2dHcm91cFBlcm1pc3Npb25zID1cbiAgICBpbWFnZVBpcGVsaW5lTG9nR3JvdXAgIT09IHVuZGVmaW5lZCAmJlxuICAgICFjZGsuVG9rZW4uaXNVbnJlc29sdmVkKGltYWdlUGlwZWxpbmVMb2dHcm91cC5sb2dHcm91cE5hbWUpICYmXG4gICAgIWltYWdlUGlwZWxpbmVMb2dHcm91cC5sb2dHcm91cE5hbWUuc3RhcnRzV2l0aCgnL2F3cy9pbWFnZWJ1aWxkZXIvJyk7XG5cbiAgaWYgKGFkZEltYWdlTG9nR3JvdXBQZXJtaXNzaW9ucykge1xuICAgIGdyYW50ZXJzLnB1c2goKHJvbGUpID0+IGltYWdlTG9nR3JvdXAhLmdyYW50V3JpdGUocm9sZSkpO1xuICB9XG5cbiAgaWYgKGFkZFBpcGVsaW5lTG9nR3JvdXBQZXJtaXNzaW9ucykge1xuICAgIGdyYW50ZXJzLnB1c2goKHJvbGUpID0+IGltYWdlUGlwZWxpbmVMb2dHcm91cCEuZ3JhbnRXcml0ZShyb2xlKSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4ZWN1dGlvblJvbGVSZXF1aXJlZDogaGFzV29ya2Zsb3dzIHx8IGFkZEltYWdlTG9nR3JvdXBQZXJtaXNzaW9ucyB8fCBhZGRQaXBlbGluZUxvZ0dyb3VwUGVybWlzc2lvbnMsXG4gICAgYXBwbHlHcmFudHM6IChyb2xlOiBpYW0uSVJvbGUpID0+IGdyYW50ZXJzLmZvckVhY2goKGdyYW50ZXIpID0+IGdyYW50ZXIocm9sZSkpLFxuICB9O1xufTtcbiJdfQ==
|
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.230.0-alpha.0" };
|
|
10
10
|
/**
|
|
11
11
|
* The value of the parameter as a string
|
|
12
12
|
*
|