@aws-cdk-testing/cli-integ 3.36.2 → 3.37.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/lib/regions.d.ts +0 -4
- package/lib/regions.js +2 -17
- package/lib/with-cdk-app.d.ts +56 -0
- package/lib/with-cdk-app.js +126 -7
- package/npm-shrinkwrap.json +163 -178
- package/package.json +10 -8
- package/resources/cdk-apps/app/app.js +22 -13
- package/resources/cdk-apps/lambda-hook-app/app.js +74 -0
- package/resources/cdk-apps/lambda-hook-app/cdk.json +4 -0
- package/tests/cli-integ-tests/cdk-assets/asset_helpers.js +5 -5
- package/tests/cli-integ-tests/cdk-assets/cdk-assets-uses-profile.integtest.js +4 -4
- package/tests/cli-integ-tests/deploy/cdk-deploy-docker-asset-multi-region.integtest.js +9 -3
- package/tests/cli-integ-tests/deploy/cdk-deploy-lambda-hook-change-set-failure-displays-hook-status-reason.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/deploy/cdk-deploy-lambda-hook-change-set-failure-displays-hook-status-reason.integtest.js +17 -0
- package/tests/cli-integ-tests/diagnose/cdk-diagnose-guard-hook-failure-displays-hook-details.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diagnose/cdk-diagnose-guard-hook-failure-displays-hook-details.integtest.js +24 -0
- package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-caches-template.integtest.js +3 -4
- package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-supports-cloudcontrol-based-resources.integtest.js +4 -5
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
const cdk = require('aws-cdk-lib/core');
|
|
2
|
+
const iam = require('aws-cdk-lib/aws-iam');
|
|
3
|
+
const lambda = require('aws-cdk-lib/aws-lambda');
|
|
4
|
+
const s3 = require('aws-cdk-lib/aws-s3');
|
|
5
|
+
|
|
6
|
+
const stackPrefix = process.env.STACK_NAME_PREFIX;
|
|
7
|
+
if (!stackPrefix) {
|
|
8
|
+
throw new Error('the STACK_NAME_PREFIX environment variable is required');
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const testStackName = `${stackPrefix}-lambda-hook-test`;
|
|
12
|
+
|
|
13
|
+
// The detailed failure reason, only available through the hook result APIs
|
|
14
|
+
const hookFailureMessage = 'Ingress must not allow 0.0.0.0/0 to non-HTTP(s) ports';
|
|
15
|
+
|
|
16
|
+
// Setup a Lambda Hook that will fail change sets of the test stack
|
|
17
|
+
class LambdaHookSetupStack extends cdk.Stack {
|
|
18
|
+
constructor(scope, id, props) {
|
|
19
|
+
super(scope, id, props);
|
|
20
|
+
|
|
21
|
+
// Hook handler that always fails with a detailed message
|
|
22
|
+
const hookFunction = new lambda.Function(this, 'HookFunction', {
|
|
23
|
+
runtime: lambda.Runtime.NODEJS_LATEST,
|
|
24
|
+
handler: 'index.handler',
|
|
25
|
+
code: lambda.Code.fromInline(`
|
|
26
|
+
exports.handler = async (event) => {
|
|
27
|
+
return {
|
|
28
|
+
hookStatus: 'FAILED',
|
|
29
|
+
errorCode: 'NonCompliant',
|
|
30
|
+
message: ${JSON.stringify(hookFailureMessage)},
|
|
31
|
+
clientRequestToken: event.clientRequestToken,
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
`),
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// IAM role for Lambda Hook execution
|
|
38
|
+
const hookRole = new iam.Role(this, 'LambdaHookExecutionRole', {
|
|
39
|
+
assumedBy: new iam.ServicePrincipal('hooks.cloudformation.amazonaws.com'),
|
|
40
|
+
});
|
|
41
|
+
hookFunction.grantInvoke(hookRole);
|
|
42
|
+
|
|
43
|
+
// Lambda Hook - fails CHANGE_SET operations, but only for the test stack
|
|
44
|
+
new cdk.CfnLambdaHook(this, 'LambdaHook', {
|
|
45
|
+
alias: 'Private::Lambda::TestHook',
|
|
46
|
+
executionRole: hookRole.roleArn,
|
|
47
|
+
failureMode: 'FAIL',
|
|
48
|
+
hookStatus: 'ENABLED',
|
|
49
|
+
lambdaFunction: hookFunction.functionArn,
|
|
50
|
+
targetOperations: ['CHANGE_SET'],
|
|
51
|
+
stackFilters: {
|
|
52
|
+
filteringCriteria: 'ALL',
|
|
53
|
+
stackNames: {
|
|
54
|
+
// Only evaluate the test stack, to not interfere with anything else in the account
|
|
55
|
+
include: [testStackName],
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
class LambdaHookTestStack extends cdk.Stack {
|
|
63
|
+
constructor(scope, id, props) {
|
|
64
|
+
super(scope, id, props);
|
|
65
|
+
|
|
66
|
+
new s3.CfnBucket(this, 'SomeBucket');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const app = new cdk.App();
|
|
71
|
+
new LambdaHookSetupStack(app, `${stackPrefix}-lambda-hook-setup`);
|
|
72
|
+
new LambdaHookTestStack(app, testStackName);
|
|
73
|
+
|
|
74
|
+
app.synth();
|
|
@@ -44,8 +44,8 @@ async function writeFileAsset(fixture) {
|
|
|
44
44
|
for (const toCreate of [relativeAssetFile]) {
|
|
45
45
|
await fs_1.promises.writeFile(path.join(fixture.integTestDir, toCreate), 'some asset file');
|
|
46
46
|
}
|
|
47
|
-
const bucketName = `cdk-
|
|
48
|
-
const assumeRoleArn = `arn:\${AWS::Partition}:iam::${account}:role/cdk-
|
|
47
|
+
const bucketName = `cdk-${fixture.qualifier}-assets-${account}-${region}`;
|
|
48
|
+
const assumeRoleArn = `arn:\${AWS::Partition}:iam::${account}:role/cdk-${fixture.qualifier}-file-publishing-role-${account}-${region}`;
|
|
49
49
|
return {
|
|
50
50
|
relativeAssetFile,
|
|
51
51
|
bucketName,
|
|
@@ -65,8 +65,8 @@ async function writeDockerAsset(fixture) {
|
|
|
65
65
|
].join('\n'));
|
|
66
66
|
const account = await fixture.aws.account();
|
|
67
67
|
const region = fixture.aws.region;
|
|
68
|
-
const repositoryName = `cdk-
|
|
69
|
-
const assumeRoleArn = `arn:\${AWS::Partition}:iam::${account}:role/cdk-
|
|
68
|
+
const repositoryName = `cdk-${fixture.qualifier}-container-assets-${account}-${region}`;
|
|
69
|
+
const assumeRoleArn = `arn:\${AWS::Partition}:iam::${account}:role/cdk-${fixture.qualifier}-image-publishing-role-${account}-${region}`;
|
|
70
70
|
const repositoryDomain = `${account}.dkr.ecr.${region}.amazonaws.com`;
|
|
71
71
|
return {
|
|
72
72
|
repositoryName,
|
|
@@ -75,4 +75,4 @@ async function writeDockerAsset(fixture) {
|
|
|
75
75
|
repositoryDomain,
|
|
76
76
|
};
|
|
77
77
|
}
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRfaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFzc2V0X2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJQSx3Q0FnQkM7QUFFRCw0Q0EwQkM7QUFoREQsMkJBQW9DO0FBQ3BDLDJDQUE2QjtBQUd0QixLQUFLLFVBQVUsY0FBYyxDQUFDLE9BQW9CO0lBQ3ZELE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUVsQyxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FBQztJQUN6QyxLQUFLLE1BQU0sUUFBUSxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1FBQzNDLE1BQU0sYUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxPQUFPLENBQUMsU0FBUyxXQUFXLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUMxRSxNQUFNLGFBQWEsR0FBRywrQkFBK0IsT0FBTyxhQUFhLE9BQU8sQ0FBQyxTQUFTLHlCQUF5QixPQUFPLElBQUksTUFBTSxFQUFFLENBQUM7SUFFdkksT0FBTztRQUNMLGlCQUFpQjtRQUNqQixVQUFVO1FBQ1YsYUFBYTtLQUNkLENBQUM7QUFDSixDQUFDO0FBRU0sS0FBSyxVQUFVLGdCQUFnQixDQUFDLE9BQW9CO0lBQ3pELE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDO0lBQ3BDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDM0UsTUFBTSxhQUFFLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFdEQsS0FBSyxNQUFNLFFBQVEsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDNUQsTUFBTSxhQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLGFBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsRUFBRTtRQUM1RCxjQUFjO1FBQ2QsK0JBQStCO0tBQ2hDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFZCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDNUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDbEMsTUFBTSxjQUFjLEdBQUcsT0FBTyxPQUFPLENBQUMsU0FBUyxxQkFBcUIsT0FBTyxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBQ3hGLE1BQU0sYUFBYSxHQUFHLCtCQUErQixPQUFPLGFBQWEsT0FBTyxDQUFDLFNBQVMsMEJBQTBCLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUN4SSxNQUFNLGdCQUFnQixHQUFHLEdBQUcsT0FBTyxZQUFZLE1BQU0sZ0JBQWdCLENBQUM7SUFFdEUsT0FBTztRQUNMLGNBQWM7UUFDZCxhQUFhO1FBQ2IsZ0JBQWdCO1FBQ2hCLGdCQUFnQjtLQUNqQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB0eXBlIHsgVGVzdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWIvd2l0aC1jZGstYXBwJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlRmlsZUFzc2V0KGZpeHR1cmU6IFRlc3RGaXh0dXJlKSB7XG4gIGNvbnN0IGFjY291bnQgPSBhd2FpdCBmaXh0dXJlLmF3cy5hY2NvdW50KCk7XG4gIGNvbnN0IHJlZ2lvbiA9IGZpeHR1cmUuYXdzLnJlZ2lvbjtcblxuICBjb25zdCByZWxhdGl2ZUFzc2V0RmlsZSA9ICd0ZXN0ZmlsZS50eHQnO1xuICBmb3IgKGNvbnN0IHRvQ3JlYXRlIG9mIFtyZWxhdGl2ZUFzc2V0RmlsZV0pIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCB0b0NyZWF0ZSksICdzb21lIGFzc2V0IGZpbGUnKTtcbiAgfVxuICBjb25zdCBidWNrZXROYW1lID0gYGNkay0ke2ZpeHR1cmUucXVhbGlmaWVyfS1hc3NldHMtJHthY2NvdW50fS0ke3JlZ2lvbn1gO1xuICBjb25zdCBhc3N1bWVSb2xlQXJuID0gYGFybjpcXCR7QVdTOjpQYXJ0aXRpb259OmlhbTo6JHthY2NvdW50fTpyb2xlL2Nkay0ke2ZpeHR1cmUucXVhbGlmaWVyfS1maWxlLXB1Ymxpc2hpbmctcm9sZS0ke2FjY291bnR9LSR7cmVnaW9ufWA7XG5cbiAgcmV0dXJuIHtcbiAgICByZWxhdGl2ZUFzc2V0RmlsZSxcbiAgICBidWNrZXROYW1lLFxuICAgIGFzc3VtZVJvbGVBcm4sXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZURvY2tlckFzc2V0KGZpeHR1cmU6IFRlc3RGaXh0dXJlKSB7XG4gIGNvbnN0IHJlbGF0aXZlSW1hZ2VEaXIgPSAnaW1hZ2VkaXInO1xuICBjb25zdCBhYnNvbHV0ZUltYWdlRGlyID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCByZWxhdGl2ZUltYWdlRGlyKTtcbiAgYXdhaXQgZnMubWtkaXIoYWJzb2x1dGVJbWFnZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgZm9yIChjb25zdCB0b0NyZWF0ZSBvZiBbYCR7YWJzb2x1dGVJbWFnZURpcn0vZGF0YWZpbGUudHh0YF0pIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUodG9DcmVhdGUsICdzb21lIGFzc2V0IGZpbGUnKTtcbiAgfVxuXG4gIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLmpvaW4oYWJzb2x1dGVJbWFnZURpciwgJ0RvY2tlcmZpbGUnKSwgW1xuICAgICdGUk9NIHNjcmF0Y2gnLFxuICAgICdBREQgZGF0YWZpbGUudHh0IGRhdGFmaWxlLnR4dCcsXG4gIF0uam9pbignXFxuJykpO1xuXG4gIGNvbnN0IGFjY291bnQgPSBhd2FpdCBmaXh0dXJlLmF3cy5hY2NvdW50KCk7XG4gIGNvbnN0IHJlZ2lvbiA9IGZpeHR1cmUuYXdzLnJlZ2lvbjtcbiAgY29uc3QgcmVwb3NpdG9yeU5hbWUgPSBgY2RrLSR7Zml4dHVyZS5xdWFsaWZpZXJ9LWNvbnRhaW5lci1hc3NldHMtJHthY2NvdW50fS0ke3JlZ2lvbn1gO1xuICBjb25zdCBhc3N1bWVSb2xlQXJuID0gYGFybjpcXCR7QVdTOjpQYXJ0aXRpb259OmlhbTo6JHthY2NvdW50fTpyb2xlL2Nkay0ke2ZpeHR1cmUucXVhbGlmaWVyfS1pbWFnZS1wdWJsaXNoaW5nLXJvbGUtJHthY2NvdW50fS0ke3JlZ2lvbn1gO1xuICBjb25zdCByZXBvc2l0b3J5RG9tYWluID0gYCR7YWNjb3VudH0uZGtyLmVjci4ke3JlZ2lvbn0uYW1hem9uYXdzLmNvbWA7XG5cbiAgcmV0dXJuIHtcbiAgICByZXBvc2l0b3J5TmFtZSxcbiAgICBhc3N1bWVSb2xlQXJuLFxuICAgIHJlbGF0aXZlSW1hZ2VEaXIsXG4gICAgcmVwb3NpdG9yeURvbWFpbixcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -41,7 +41,7 @@ const lib_1 = require("../../../lib");
|
|
|
41
41
|
await fixture.cdkAssets.makeCliAvailable();
|
|
42
42
|
const account = await fixture.aws.account();
|
|
43
43
|
const region = fixture.aws.region;
|
|
44
|
-
const bucketName = `cdk-
|
|
44
|
+
const bucketName = `cdk-${fixture.qualifier}-assets-${account}-${region}`;
|
|
45
45
|
// Write some asset files. Its important to have more than 1 because cdk-assets
|
|
46
46
|
// code has some funky state mutations that happens on each asset publishing.
|
|
47
47
|
const assetFile1 = 'testfile.txt';
|
|
@@ -60,7 +60,7 @@ const lib_1 = require("../../../lib");
|
|
|
60
60
|
destinations: {
|
|
61
61
|
current: {
|
|
62
62
|
region,
|
|
63
|
-
assumeRoleArn: `arn:\${AWS::Partition}:iam::${account}:role/cdk-
|
|
63
|
+
assumeRoleArn: `arn:\${AWS::Partition}:iam::${account}:role/cdk-${fixture.qualifier}-file-publishing-role-${account}-${region}`,
|
|
64
64
|
bucketName,
|
|
65
65
|
objectKey: `test-file1-${Date.now()}.json`,
|
|
66
66
|
},
|
|
@@ -74,7 +74,7 @@ const lib_1 = require("../../../lib");
|
|
|
74
74
|
destinations: {
|
|
75
75
|
current: {
|
|
76
76
|
region,
|
|
77
|
-
assumeRoleArn: `arn:\${AWS::Partition}:iam::${account}:role/cdk-
|
|
77
|
+
assumeRoleArn: `arn:\${AWS::Partition}:iam::${account}:role/cdk-${fixture.qualifier}-file-publishing-role-${account}-${region}`,
|
|
78
78
|
bucketName,
|
|
79
79
|
objectKey: `test-file2-${Date.now()}.json`,
|
|
80
80
|
},
|
|
@@ -108,4 +108,4 @@ aws_session_token=${currentCreds.sessionToken}`);
|
|
|
108
108
|
},
|
|
109
109
|
});
|
|
110
110
|
}));
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWFzc2V0cy11c2VzLXByb2ZpbGUuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWFzc2V0cy11c2VzLXByb2ZpbGUuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsMkJBQW9DO0FBQ3BDLDJDQUE2QjtBQUM3QixzQ0FBNkQ7QUFFN0QsSUFBQSxlQUFTLEVBQUMsd0NBQXdDLEVBQUUsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDdkYsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXJELE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBRTNDLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUNsQyxNQUFNLFVBQVUsR0FBRyxPQUFPLE9BQU8sQ0FBQyxTQUFTLFdBQVcsT0FBTyxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBRTFFLCtFQUErRTtJQUMvRSw2RUFBNkU7SUFDN0UsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDO0lBQ2xDLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQztJQUNsQyxNQUFNLGFBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDbkYsTUFBTSxhQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBRW5GLHNFQUFzRTtJQUN0RSxNQUFNLFVBQVUsR0FBRztRQUNqQixPQUFPLEVBQUUsUUFBUTtRQUNqQixLQUFLLEVBQUU7WUFDTCxTQUFTLEVBQUU7Z0JBQ1QsTUFBTSxFQUFFO29CQUNOLElBQUksRUFBRSxVQUFVO29CQUNoQixTQUFTLEVBQUUsTUFBTTtpQkFDbEI7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLE9BQU8sRUFBRTt3QkFDUCxNQUFNO3dCQUNOLGFBQWEsRUFBRSwrQkFBK0IsT0FBTyxhQUFhLE9BQU8sQ0FBQyxTQUFTLHlCQUF5QixPQUFPLElBQUksTUFBTSxFQUFFO3dCQUMvSCxVQUFVO3dCQUNWLFNBQVMsRUFBRSxjQUFjLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTztxQkFDM0M7aUJBQ0Y7YUFDRjtZQUNELFNBQVMsRUFBRTtnQkFDVCxNQUFNLEVBQUU7b0JBQ04sSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFNBQVMsRUFBRSxNQUFNO2lCQUNsQjtnQkFDRCxZQUFZLEVBQUU7b0JBQ1osT0FBTyxFQUFFO3dCQUNQLE1BQU07d0JBQ04sYUFBYSxFQUFFLCtCQUErQixPQUFPLGFBQWEsT0FBTyxDQUFDLFNBQVMseUJBQXlCLE9BQU8sSUFBSSxNQUFNLEVBQUU7d0JBQy9ILFVBQVU7d0JBQ1YsU0FBUyxFQUFFLGNBQWMsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPO3FCQUMzQztpQkFDRjthQUNGO1NBQ0Y7S0FDRixDQUFDO0lBRUYsaURBQWlEO0lBQ2pELEVBQUU7SUFDRixvR0FBb0c7SUFDcEcsMkZBQTJGO0lBQzNGLDJGQUEyRjtJQUMzRix3QkFBd0I7SUFDeEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDM0UsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDO0lBRTdCLDhFQUE4RTtJQUM5RSxNQUFNLGFBQUUsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLElBQUksT0FBTztvQkFDN0IsWUFBWSxDQUFDLFdBQVc7d0JBQ3BCLFlBQVksQ0FBQyxlQUFlO29CQUNoQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUUvQyxNQUFNLGFBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdHLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFDNUYsTUFBTSxFQUFFO1lBQ04sR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQ3hCLDJCQUEyQixFQUFFLGVBQWU7WUFFNUMsOERBQThEO1lBQzlELGlGQUFpRjtZQUNqRixpQkFBaUIsRUFBRSxFQUFFO1lBQ3JCLHFCQUFxQixFQUFFLEVBQUU7WUFDekIsaUJBQWlCLEVBQUUsRUFBRTtTQUV0QjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KCdjZGstYXNzZXRzIHVzZXMgcHJvZmlsZSB3aGVuIHNwZWNpZmllZCcsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBjdXJyZW50Q3JlZHMgPSBhd2FpdCBmaXh0dXJlLmF3cy5jcmVkZW50aWFscygpO1xuXG4gIGF3YWl0IGZpeHR1cmUuY2RrQXNzZXRzLm1ha2VDbGlBdmFpbGFibGUoKTtcblxuICBjb25zdCBhY2NvdW50ID0gYXdhaXQgZml4dHVyZS5hd3MuYWNjb3VudCgpO1xuICBjb25zdCByZWdpb24gPSBmaXh0dXJlLmF3cy5yZWdpb247XG4gIGNvbnN0IGJ1Y2tldE5hbWUgPSBgY2RrLSR7Zml4dHVyZS5xdWFsaWZpZXJ9LWFzc2V0cy0ke2FjY291bnR9LSR7cmVnaW9ufWA7XG5cbiAgLy8gV3JpdGUgc29tZSBhc3NldCBmaWxlcy4gSXRzIGltcG9ydGFudCB0byBoYXZlIG1vcmUgdGhhbiAxIGJlY2F1c2UgY2RrLWFzc2V0c1xuICAvLyBjb2RlIGhhcyBzb21lIGZ1bmt5IHN0YXRlIG11dGF0aW9ucyB0aGF0IGhhcHBlbnMgb24gZWFjaCBhc3NldCBwdWJsaXNoaW5nLlxuICBjb25zdCBhc3NldEZpbGUxID0gJ3Rlc3RmaWxlLnR4dCc7XG4gIGNvbnN0IGFzc2V0RmlsZTIgPSAndGVzdGZpbGUudHh0JztcbiAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgYXNzZXRGaWxlMSksICdzb21lIGFzc2V0IGZpbGUnKTtcbiAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgYXNzZXRGaWxlMiksICdzb21lIGFzc2V0IGZpbGUnKTtcblxuICAvLyBXcml0ZSBhbiBhc3NldCBKU09OIGZpbGUgdG8gcHVibGlzaCB0byB0aGUgYm9vdHN0cmFwcGVkIGVudmlyb25tZW50XG4gIGNvbnN0IGFzc2V0c0pzb24gPSB7XG4gICAgdmVyc2lvbjogJzM4LjAuMScsXG4gICAgZmlsZXM6IHtcbiAgICAgIHRlc3RmaWxlMToge1xuICAgICAgICBzb3VyY2U6IHtcbiAgICAgICAgICBwYXRoOiBhc3NldEZpbGUxLFxuICAgICAgICAgIHBhY2thZ2luZzogJ2ZpbGUnLFxuICAgICAgICB9LFxuICAgICAgICBkZXN0aW5hdGlvbnM6IHtcbiAgICAgICAgICBjdXJyZW50OiB7XG4gICAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgICBhc3N1bWVSb2xlQXJuOiBgYXJuOlxcJHtBV1M6OlBhcnRpdGlvbn06aWFtOjoke2FjY291bnR9OnJvbGUvY2RrLSR7Zml4dHVyZS5xdWFsaWZpZXJ9LWZpbGUtcHVibGlzaGluZy1yb2xlLSR7YWNjb3VudH0tJHtyZWdpb259YCxcbiAgICAgICAgICAgIGJ1Y2tldE5hbWUsXG4gICAgICAgICAgICBvYmplY3RLZXk6IGB0ZXN0LWZpbGUxLSR7RGF0ZS5ub3coKX0uanNvbmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0ZXN0ZmlsZTI6IHtcbiAgICAgICAgc291cmNlOiB7XG4gICAgICAgICAgcGF0aDogYXNzZXRGaWxlMixcbiAgICAgICAgICBwYWNrYWdpbmc6ICdmaWxlJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVzdGluYXRpb25zOiB7XG4gICAgICAgICAgY3VycmVudDoge1xuICAgICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgICAgYXNzdW1lUm9sZUFybjogYGFybjpcXCR7QVdTOjpQYXJ0aXRpb259OmlhbTo6JHthY2NvdW50fTpyb2xlL2Nkay0ke2ZpeHR1cmUucXVhbGlmaWVyfS1maWxlLXB1Ymxpc2hpbmctcm9sZS0ke2FjY291bnR9LSR7cmVnaW9ufWAsXG4gICAgICAgICAgICBidWNrZXROYW1lLFxuICAgICAgICAgICAgb2JqZWN0S2V5OiBgdGVzdC1maWxlMi0ke0RhdGUubm93KCl9Lmpzb25gLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgLy8gY3JlYXRlIGEgcHJvZmlsZSB3aXRoIG91ciBjdXJyZW50IGNyZWRlbnRpYWxzLlxuICAvL1xuICAvLyBpZiB5b3UncmUgd29uZGVyaW5nIHdoeSBjYW4ndCB3ZSBkbyB0aGUgcmV2ZXJzZSAoaS5lIHdyaXRlIGEgYm9ndXMgcHJvZmlsZSBhbmQgYXNzZXJ0IGEgZmFpbHVyZSksXG4gIC8vIGl0cyBiZWNhdXNlIHdoZW4gY2RrLWFzc2V0cyBkaXNjb3ZlcnMgdGhlIGN1cnJlbnQgYWNjb3VudCwgaXQgRE9FUyBjb25zaWRlciB0aGUgcHJvZmlsZS5cbiAgLy8gd3JpdGluZyBhIGJvZ3VzIHByb2ZpbGUgd291bGQgZmFpbCB0aGlzIG9wZXJhdGlvbiBhbmQgd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFjaCB0aGUgY29kZVxuICAvLyB3ZSdyZSB0cnlpbmcgdG8gdGVzdC5cbiAgY29uc3QgY3JlZGVudGlhbHNGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnYXdzLmNyZWRlbnRpYWxzJyk7XG4gIGNvbnN0IHByb2ZpbGUgPSAnY2RrLWFzc2V0cyc7XG5cbiAgLy8gdGhpcyBraW5kIHN1Y2tzIGJ1dCBpdHMgd2hhdCBpdCBpcyBnaXZlbiB3ZSBuZWVkIHRvIHdyaXRlIGEgd29ya2luZyBwcm9maWxlXG4gIGF3YWl0IGZzLndyaXRlRmlsZShjcmVkZW50aWFsc0ZpbGUsIGBbJHtwcm9maWxlfV1cbmF3c19hY2Nlc3Nfa2V5X2lkPSR7Y3VycmVudENyZWRzLmFjY2Vzc0tleUlkfVxuYXdzX3NlY3JldF9hY2Nlc3Nfa2V5PSR7Y3VycmVudENyZWRzLnNlY3JldEFjY2Vzc0tleX1cbmF3c19zZXNzaW9uX3Rva2VuPSR7Y3VycmVudENyZWRzLnNlc3Npb25Ub2tlbn1gKTtcblxuICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnYXNzZXRzLmpzb24nKSwgSlNPTi5zdHJpbmdpZnkoYXNzZXRzSnNvbiwgdW5kZWZpbmVkLCAyKSk7XG4gIGF3YWl0IGZpeHR1cmUuc2hlbGwoWydjZGstYXNzZXRzJywgJy0tcGF0aCcsICdhc3NldHMuanNvbicsICdwdWJsaXNoJywgJy0tcHJvZmlsZScsIHByb2ZpbGVdLCB7XG4gICAgbW9kRW52OiB7XG4gICAgICAuLi5maXh0dXJlLmNka1NoZWxsRW52KCksXG4gICAgICBBV1NfU0hBUkVEX0NSRURFTlRJQUxTX0ZJTEU6IGNyZWRlbnRpYWxzRmlsZSxcblxuICAgICAgLy8gcmVtb3ZlIHRoZSBkZWZhdWx0IGNyZWRzIHNvIHRoYXQgaWYgdGhlIGNvbW1hbmQgZG9lc24ndCB1c2VcbiAgICAgIC8vIHRoZSBwcm9maWxlLCBpdCB3aWxsIGZhaWwgd2l0aCBcIkNvdWxkIG5vdCBsb2FkIGNyZWRlbnRpYWxzIGZyb20gYW55IHByb3ZpZGVyc1wiXG4gICAgICBBV1NfQUNDRVNTX0tFWV9JRDogJycsXG4gICAgICBBV1NfU0VDUkVUX0FDQ0VTU19LRVk6ICcnLFxuICAgICAgQVdTX1NFU1NJT05fVE9LRU46ICcnLFxuXG4gICAgfSxcbiAgfSk7XG59KSxcbik7XG4iXX0=
|
|
@@ -5,9 +5,15 @@ const lib_1 = require("../../../lib");
|
|
|
5
5
|
const primaryRegion = fixture.aws.region;
|
|
6
6
|
const availableRegions = (process.env.AWS_REGIONS ?? 'us-east-1,us-west-2').split(',');
|
|
7
7
|
const secondaryRegion = availableRegions.find((r) => r !== primaryRegion) ?? 'us-west-2';
|
|
8
|
-
// Bootstrap the secondary region
|
|
8
|
+
// Bootstrap the secondary region (with the same random qualifier the app
|
|
9
|
+
// is synthesized with, and a unique stack name to avoid clashing with
|
|
10
|
+
// other tests bootstrapping this region)
|
|
9
11
|
const account = await fixture.aws.account();
|
|
10
|
-
await fixture.cdk(['bootstrap',
|
|
12
|
+
await fixture.cdk(['bootstrap',
|
|
13
|
+
'--bootstrap-kms-key-id', 'AWS_MANAGED_KEY',
|
|
14
|
+
'--qualifier', fixture.qualifier,
|
|
15
|
+
'--toolkit-stack-name', fixture.bootstrapStackName,
|
|
16
|
+
`aws://${account}/${secondaryRegion}`], {
|
|
11
17
|
modEnv: { CDK_NEW_BOOTSTRAP: '1' },
|
|
12
18
|
});
|
|
13
19
|
// Deploy both stacks — same docker source, different target regions
|
|
@@ -15,4 +21,4 @@ const lib_1 = require("../../../lib");
|
|
|
15
21
|
modEnv: { CDK_SECONDARY_REGION: secondaryRegion },
|
|
16
22
|
});
|
|
17
23
|
}));
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRlcGxveS1kb2NrZXItYXNzZXQtbXVsdGktcmVnaW9uLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1kZXBsb3ktZG9ja2VyLWFzc2V0LW11bHRpLXJlZ2lvbi5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBNkQ7QUFFN0QsSUFBQSxlQUFTLEVBQ1AsOENBQThDLEVBQzlDLElBQUEsd0JBQWtCLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25DLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxxQkFBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2RixNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUM7SUFFekYseUVBQXlFO0lBQ3pFLHNFQUFzRTtJQUN0RSx5Q0FBeUM7SUFDekMsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzVDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVc7UUFDNUIsd0JBQXdCLEVBQUUsaUJBQWlCO1FBQzNDLGFBQWEsRUFBRSxPQUFPLENBQUMsU0FBUztRQUNoQyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsa0JBQWtCO1FBQ2xELFNBQVMsT0FBTyxJQUFJLGVBQWUsRUFBRSxDQUFDLEVBQUU7UUFDeEMsTUFBTSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0tBQ25DLENBQUMsQ0FBQztJQUVILG9FQUFvRTtJQUNwRSxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSx1QkFBdUIsQ0FBQyxFQUFFO1FBQzFFLE1BQU0sRUFBRSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRTtLQUNsRCxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgc2FtZSBkb2NrZXIgYXNzZXQgdG8gbXVsdGlwbGUgcmVnaW9ucycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHByaW1hcnlSZWdpb24gPSBmaXh0dXJlLmF3cy5yZWdpb247XG4gICAgY29uc3QgYXZhaWxhYmxlUmVnaW9ucyA9IChwcm9jZXNzLmVudi5BV1NfUkVHSU9OUyA/PyAndXMtZWFzdC0xLHVzLXdlc3QtMicpLnNwbGl0KCcsJyk7XG4gICAgY29uc3Qgc2Vjb25kYXJ5UmVnaW9uID0gYXZhaWxhYmxlUmVnaW9ucy5maW5kKChyKSA9PiByICE9PSBwcmltYXJ5UmVnaW9uKSA/PyAndXMtd2VzdC0yJztcblxuICAgIC8vIEJvb3RzdHJhcCB0aGUgc2Vjb25kYXJ5IHJlZ2lvbiAod2l0aCB0aGUgc2FtZSByYW5kb20gcXVhbGlmaWVyIHRoZSBhcHBcbiAgICAvLyBpcyBzeW50aGVzaXplZCB3aXRoLCBhbmQgYSB1bmlxdWUgc3RhY2sgbmFtZSB0byBhdm9pZCBjbGFzaGluZyB3aXRoXG4gICAgLy8gb3RoZXIgdGVzdHMgYm9vdHN0cmFwcGluZyB0aGlzIHJlZ2lvbilcbiAgICBjb25zdCBhY2NvdW50ID0gYXdhaXQgZml4dHVyZS5hd3MuYWNjb3VudCgpO1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnYm9vdHN0cmFwJyxcbiAgICAgICctLWJvb3RzdHJhcC1rbXMta2V5LWlkJywgJ0FXU19NQU5BR0VEX0tFWScsXG4gICAgICAnLS1xdWFsaWZpZXInLCBmaXh0dXJlLnF1YWxpZmllcixcbiAgICAgICctLXRvb2xraXQtc3RhY2stbmFtZScsIGZpeHR1cmUuYm9vdHN0cmFwU3RhY2tOYW1lLFxuICAgICAgYGF3czovLyR7YWNjb3VudH0vJHtzZWNvbmRhcnlSZWdpb259YF0sIHtcbiAgICAgIG1vZEVudjogeyBDREtfTkVXX0JPT1RTVFJBUDogJzEnIH0sXG4gICAgfSk7XG5cbiAgICAvLyBEZXBsb3kgYm90aCBzdGFja3Mg4oCUIHNhbWUgZG9ja2VyIHNvdXJjZSwgZGlmZmVyZW50IHRhcmdldCByZWdpb25zXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koWydkb2NrZXItbXVsdGktcmVnaW9uLTEnLCAnZG9ja2VyLW11bHRpLXJlZ2lvbi0yJ10sIHtcbiAgICAgIG1vZEVudjogeyBDREtfU0VDT05EQVJZX1JFR0lPTjogc2Vjb25kYXJ5UmVnaW9uIH0sXG4gICAgfSk7XG4gIH0pLFxuKTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../../lib");
|
|
4
|
+
jest.setTimeout(2 * 60 * 60_000);
|
|
5
|
+
(0, lib_1.integTest)('deploy with lambda hook change set failure displays hook status reason', (0, lib_1.withSpecificFixture)('lambda-hook-app', async (fixture) => {
|
|
6
|
+
// Deploy the setup stack which creates the Lambda Hook via CloudFormation
|
|
7
|
+
await fixture.cdkDeploy('lambda-hook-setup');
|
|
8
|
+
// Attempt to deploy the test stack; the Lambda Hook fails its change set.
|
|
9
|
+
// Lambda Hooks don't emit annotations, so the detailed failure reason is only
|
|
10
|
+
// available via the hook result APIs and must be surfaced from there.
|
|
11
|
+
const deployOutput = await fixture.cdkDeploy('lambda-hook-test', {
|
|
12
|
+
allowErrExit: true,
|
|
13
|
+
});
|
|
14
|
+
expect(deployOutput).toContain("Hook 'Private::Lambda::TestHook' failed");
|
|
15
|
+
expect(deployOutput).toContain('Ingress must not allow 0.0.0.0/0 to non-HTTP(s) ports');
|
|
16
|
+
}));
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRlcGxveS1sYW1iZGEtaG9vay1jaGFuZ2Utc2V0LWZhaWx1cmUtZGlzcGxheXMtaG9vay1zdGF0dXMtcmVhc29uLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1kZXBsb3ktbGFtYmRhLWhvb2stY2hhbmdlLXNldC1mYWlsdXJlLWRpc3BsYXlzLWhvb2stc3RhdHVzLXJlYXNvbi5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBOEQ7QUFFOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBRWpDLElBQUEsZUFBUyxFQUNQLHdFQUF3RSxFQUN4RSxJQUFBLHlCQUFtQixFQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUN2RCwwRUFBMEU7SUFDMUUsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFN0MsMEVBQTBFO0lBQzFFLDhFQUE4RTtJQUM5RSxzRUFBc0U7SUFDdEUsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFO1FBQy9ELFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMseUNBQXlDLENBQUMsQ0FBQztJQUMxRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7QUFDMUYsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aFNwZWNpZmljRml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgd2l0aCBsYW1iZGEgaG9vayBjaGFuZ2Ugc2V0IGZhaWx1cmUgZGlzcGxheXMgaG9vayBzdGF0dXMgcmVhc29uJyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgnbGFtYmRhLWhvb2stYXBwJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBEZXBsb3kgdGhlIHNldHVwIHN0YWNrIHdoaWNoIGNyZWF0ZXMgdGhlIExhbWJkYSBIb29rIHZpYSBDbG91ZEZvcm1hdGlvblxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEtaG9vay1zZXR1cCcpO1xuXG4gICAgLy8gQXR0ZW1wdCB0byBkZXBsb3kgdGhlIHRlc3Qgc3RhY2s7IHRoZSBMYW1iZGEgSG9vayBmYWlscyBpdHMgY2hhbmdlIHNldC5cbiAgICAvLyBMYW1iZGEgSG9va3MgZG9uJ3QgZW1pdCBhbm5vdGF0aW9ucywgc28gdGhlIGRldGFpbGVkIGZhaWx1cmUgcmVhc29uIGlzIG9ubHlcbiAgICAvLyBhdmFpbGFibGUgdmlhIHRoZSBob29rIHJlc3VsdCBBUElzIGFuZCBtdXN0IGJlIHN1cmZhY2VkIGZyb20gdGhlcmUuXG4gICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYS1ob29rLXRlc3QnLCB7XG4gICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgfSk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKFwiSG9vayAnUHJpdmF0ZTo6TGFtYmRhOjpUZXN0SG9vaycgZmFpbGVkXCIpO1xuICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbignSW5ncmVzcyBtdXN0IG5vdCBhbGxvdyAwLjAuMC4wLzAgdG8gbm9uLUhUVFAocykgcG9ydHMnKTtcbiAgfSksXG4pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../../lib");
|
|
4
|
+
jest.setTimeout(2 * 60 * 60_000);
|
|
5
|
+
(0, lib_1.integTest)('cdk diagnose after guard hook failure displays hook failure details', (0, lib_1.withSpecificFixture)('guard-hook-app', async (fixture) => {
|
|
6
|
+
// Deploy the setup stack which creates the Guard Hook via CloudFormation
|
|
7
|
+
await fixture.cdkDeploy('guard-hook-setup');
|
|
8
|
+
// Attempt to deploy the non-compliant stack; it fails due to the Guard Hook.
|
|
9
|
+
// --no-rollback leaves the stack in CREATE_FAILED so diagnose can inspect it.
|
|
10
|
+
const deployOutput = await fixture.cdkDeploy('guard-hook-test', {
|
|
11
|
+
options: ['--no-rollback'],
|
|
12
|
+
allowErrExit: true,
|
|
13
|
+
});
|
|
14
|
+
expect(deployOutput).toContain('CREATE_FAILED');
|
|
15
|
+
// Run cdk diagnose on the failed stack
|
|
16
|
+
const diagnoseOutput = await fixture.cdk(['--unstable=diagnose', 'diagnose', fixture.fullStackName('guard-hook-test')], { allowErrExit: true });
|
|
17
|
+
// diagnose has no live activity stream, so the hook failure details must have
|
|
18
|
+
// been fetched via the GetHookResult API and attached to the diagnosis
|
|
19
|
+
expect(diagnoseOutput).toContain("Hook 'Private::Guard::TestHook' failed: NonCompliant Rules:");
|
|
20
|
+
expect(diagnoseOutput).toContain('[AWS_S3_Bucket_AccessControl]');
|
|
21
|
+
expect(diagnoseOutput).toContain('• Check was not compliant as property [/Resources/NonCompliantBucket/Properties/AccessControl[L:0,C:91]] existed.');
|
|
22
|
+
expect(diagnoseOutput).toContain('Remediation: AccessControl is deprecated');
|
|
23
|
+
}));
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRpYWdub3NlLWd1YXJkLWhvb2stZmFpbHVyZS1kaXNwbGF5cy1ob29rLWRldGFpbHMuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWRpYWdub3NlLWd1YXJkLWhvb2stZmFpbHVyZS1kaXNwbGF5cy1ob29rLWRldGFpbHMuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBRTlELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUVqQyxJQUFBLGVBQVMsRUFDUCxxRUFBcUUsRUFDckUsSUFBQSx5QkFBbUIsRUFBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDdEQseUVBQXlFO0lBQ3pFLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRTVDLDZFQUE2RTtJQUM3RSw4RUFBOEU7SUFDOUUsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFO1FBQzlELE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQztRQUMxQixZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRWhELHVDQUF1QztJQUN2QyxNQUFNLGNBQWMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3RDLENBQUMscUJBQXFCLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUM3RSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FDdkIsQ0FBQztJQUVGLDhFQUE4RTtJQUM5RSx1RUFBdUU7SUFDdkUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNsRSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLG1IQUFtSCxDQUFDLENBQUM7SUFDdEosTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0FBQy9FLENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhTcGVjaWZpY0ZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpYWdub3NlIGFmdGVyIGd1YXJkIGhvb2sgZmFpbHVyZSBkaXNwbGF5cyBob29rIGZhaWx1cmUgZGV0YWlscycsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ2d1YXJkLWhvb2stYXBwJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBEZXBsb3kgdGhlIHNldHVwIHN0YWNrIHdoaWNoIGNyZWF0ZXMgdGhlIEd1YXJkIEhvb2sgdmlhIENsb3VkRm9ybWF0aW9uXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2d1YXJkLWhvb2stc2V0dXAnKTtcblxuICAgIC8vIEF0dGVtcHQgdG8gZGVwbG95IHRoZSBub24tY29tcGxpYW50IHN0YWNrOyBpdCBmYWlscyBkdWUgdG8gdGhlIEd1YXJkIEhvb2suXG4gICAgLy8gLS1uby1yb2xsYmFjayBsZWF2ZXMgdGhlIHN0YWNrIGluIENSRUFURV9GQUlMRUQgc28gZGlhZ25vc2UgY2FuIGluc3BlY3QgaXQuXG4gICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2d1YXJkLWhvb2stdGVzdCcsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1uby1yb2xsYmFjayddLFxuICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgIH0pO1xuICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbignQ1JFQVRFX0ZBSUxFRCcpO1xuXG4gICAgLy8gUnVuIGNkayBkaWFnbm9zZSBvbiB0aGUgZmFpbGVkIHN0YWNrXG4gICAgY29uc3QgZGlhZ25vc2VPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhcbiAgICAgIFsnLS11bnN0YWJsZT1kaWFnbm9zZScsICdkaWFnbm9zZScsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnZ3VhcmQtaG9vay10ZXN0JyldLFxuICAgICAgeyBhbGxvd0VyckV4aXQ6IHRydWUgfSxcbiAgICApO1xuXG4gICAgLy8gZGlhZ25vc2UgaGFzIG5vIGxpdmUgYWN0aXZpdHkgc3RyZWFtLCBzbyB0aGUgaG9vayBmYWlsdXJlIGRldGFpbHMgbXVzdCBoYXZlXG4gICAgLy8gYmVlbiBmZXRjaGVkIHZpYSB0aGUgR2V0SG9va1Jlc3VsdCBBUEkgYW5kIGF0dGFjaGVkIHRvIHRoZSBkaWFnbm9zaXNcbiAgICBleHBlY3QoZGlhZ25vc2VPdXRwdXQpLnRvQ29udGFpbihcIkhvb2sgJ1ByaXZhdGU6Okd1YXJkOjpUZXN0SG9vaycgZmFpbGVkOiBOb25Db21wbGlhbnQgUnVsZXM6XCIpO1xuICAgIGV4cGVjdChkaWFnbm9zZU91dHB1dCkudG9Db250YWluKCdbQVdTX1MzX0J1Y2tldF9BY2Nlc3NDb250cm9sXScpO1xuICAgIGV4cGVjdChkaWFnbm9zZU91dHB1dCkudG9Db250YWluKCfigKIgQ2hlY2sgd2FzIG5vdCBjb21wbGlhbnQgYXMgcHJvcGVydHkgWy9SZXNvdXJjZXMvTm9uQ29tcGxpYW50QnVja2V0L1Byb3BlcnRpZXMvQWNjZXNzQ29udHJvbFtMOjAsQzo5MV1dIGV4aXN0ZWQuJyk7XG4gICAgZXhwZWN0KGRpYWdub3NlT3V0cHV0KS50b0NvbnRhaW4oJ1JlbWVkaWF0aW9uOiBBY2Nlc3NDb250cm9sIGlzIGRlcHJlY2F0ZWQnKTtcbiAgfSksXG4pO1xuIl19
|
|
@@ -36,7 +36,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
const fs = __importStar(require("fs"));
|
|
37
37
|
const path = __importStar(require("path"));
|
|
38
38
|
const lib_1 = require("../../../lib");
|
|
39
|
-
const regions_1 = require("../../../lib/regions");
|
|
40
39
|
jest.setTimeout(5 * 60 * 1000);
|
|
41
40
|
(0, lib_1.integTest)('hotswap deployment caches template and uses it for subsequent hotswaps', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
42
41
|
const stackName = 'cc-hotswap';
|
|
@@ -60,7 +59,7 @@ jest.setTimeout(5 * 60 * 1000);
|
|
|
60
59
|
const fullStackName = fixture.fullStackName(stackName);
|
|
61
60
|
const cacheFile = path.join(fixture.integTestDir, 'cdk.out', '.hotswap-cache', `${fullStackName}.json`);
|
|
62
61
|
expect(fs.existsSync(cacheFile)).toBe(true);
|
|
63
|
-
// THEN - second hotswap changes only the
|
|
62
|
+
// THEN - second hotswap changes only the Dashboard (via DYNAMIC_CC_PROPERTY_VALUE_2).
|
|
64
63
|
// If the cache is used, the diff is against the cached template, only 1 resource should be hotswapped.
|
|
65
64
|
const deployOutput = await fixture.cdkDeploy(stackName, {
|
|
66
65
|
options: ['--hotswap'],
|
|
@@ -74,7 +73,7 @@ jest.setTimeout(5 * 60 * 1000);
|
|
|
74
73
|
// should only see one hotswapped message in output
|
|
75
74
|
const hotswapCount = (deployOutput.match(/hotswapped!/g) || []).length;
|
|
76
75
|
expect(hotswapCount).toBe(1);
|
|
77
|
-
}
|
|
76
|
+
}));
|
|
78
77
|
(0, lib_1.integTest)('hotswap cache is invalidated after a full CloudFormation deployment', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
79
78
|
// GIVEN - deploy then hotswap to create cache
|
|
80
79
|
await fixture.cdkDeploy('lambda-hotswap', {
|
|
@@ -103,4 +102,4 @@ jest.setTimeout(5 * 60 * 1000);
|
|
|
103
102
|
// THEN - cache should be invalidated
|
|
104
103
|
expect(fs.existsSync(cacheFile)).toBe(false);
|
|
105
104
|
}));
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWhvdHN3YXAtZGVwbG95bWVudC1jYWNoZXMtdGVtcGxhdGUuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWhvdHN3YXAtZGVwbG95bWVudC1jYWNoZXMtdGVtcGxhdGUuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixzQ0FBNkQ7QUFFN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBRS9CLElBQUEsZUFBUyxFQUNQLHdFQUF3RSxFQUN4RSxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUM7SUFFL0IsOEJBQThCO0lBQzlCLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7UUFDakMsYUFBYSxFQUFFLEtBQUs7UUFDcEIsTUFBTSxFQUFFO1lBQ04seUJBQXlCLEVBQUUsSUFBSTtZQUMvQiwyQkFBMkIsRUFBRSxJQUFJO1NBQ2xDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsZ0VBQWdFO0lBQ2hFLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7UUFDakMsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDO1FBQ3RCLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLE1BQU0sRUFBRTtZQUNOLHlCQUF5QixFQUFFLElBQUk7WUFDL0IsMkJBQTJCLEVBQUUsSUFBSTtTQUNsQztLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLGFBQWEsT0FBTyxDQUFDLENBQUM7SUFDeEcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFNUMsc0ZBQXNGO0lBQ3RGLHVHQUF1RztJQUN2RyxNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO1FBQ3RELE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUN0QixhQUFhLEVBQUUsSUFBSTtRQUNuQixVQUFVLEVBQUUsSUFBSTtRQUNoQixNQUFNLEVBQUU7WUFDTix5QkFBeUIsRUFBRSxJQUFJLEVBQUUsK0JBQStCO1lBQ2hFLDJCQUEyQixFQUFFLElBQUk7U0FDbEM7S0FDRixDQUFDLENBQUM7SUFFSCxtREFBbUQ7SUFDbkQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN2RSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQyxDQUNILENBQUM7QUFFRixJQUFBLGVBQVMsRUFDUCxxRUFBcUUsRUFDckUsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsOENBQThDO0lBQzlDLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN4QyxhQUFhLEVBQUUsS0FBSztRQUNwQixNQUFNLEVBQUU7WUFDTiw2QkFBNkIsRUFBRSxJQUFJO1NBQ3BDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFO1FBQ3hDLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUN0QixhQUFhLEVBQUUsS0FBSztRQUNwQixNQUFNLEVBQUU7WUFDTiw2QkFBNkIsRUFBRSxJQUFJO1NBQ3BDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxTQUFTLE9BQU8sQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTVDLHlCQUF5QjtJQUN6QixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUU7UUFDeEMsYUFBYSxFQUFFLEtBQUs7UUFDcEIsTUFBTSxFQUFFO1lBQ04sNkJBQTZCLEVBQUUsSUFBSTtTQUNwQztLQUNGLENBQUMsQ0FBQztJQUVILHFDQUFxQztJQUNyQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuamVzdC5zZXRUaW1lb3V0KDUgKiA2MCAqIDEwMDApO1xuXG5pbnRlZ1Rlc3QoXG4gICdob3Rzd2FwIGRlcGxveW1lbnQgY2FjaGVzIHRlbXBsYXRlIGFuZCB1c2VzIGl0IGZvciBzdWJzZXF1ZW50IGhvdHN3YXBzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gJ2NjLWhvdHN3YXAnO1xuXG4gICAgLy8gR0lWRU4gLSBpbml0aWFsIGZ1bGwgZGVwbG95XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koc3RhY2tOYW1lLCB7XG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0NDX1BST1BFUlRZX1ZBTFVFOiAndjEnLFxuICAgICAgICBEWU5BTUlDX0NDX1BST1BFUlRZX1ZBTFVFXzI6ICd2MScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTiAtIGZpcnN0IGhvdHN3YXAgY2hhbmdlcyBBTEwgcmVzb3VyY2VzLCBjcmVhdGVzIHRoZSBjYWNoZVxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KHN0YWNrTmFtZSwge1xuICAgICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUU6ICd2MicsXG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUVfMjogJ3YyJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBmdWxsU3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZSk7XG4gICAgY29uc3QgY2FjaGVGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLm91dCcsICcuaG90c3dhcC1jYWNoZScsIGAke2Z1bGxTdGFja05hbWV9Lmpzb25gKTtcbiAgICBleHBlY3QoZnMuZXhpc3RzU3luYyhjYWNoZUZpbGUpKS50b0JlKHRydWUpO1xuXG4gICAgLy8gVEhFTiAtIHNlY29uZCBob3Rzd2FwIGNoYW5nZXMgb25seSB0aGUgRGFzaGJvYXJkICh2aWEgRFlOQU1JQ19DQ19QUk9QRVJUWV9WQUxVRV8yKS5cbiAgICAvLyBJZiB0aGUgY2FjaGUgaXMgdXNlZCwgdGhlIGRpZmYgaXMgYWdhaW5zdCB0aGUgY2FjaGVkIHRlbXBsYXRlLCBvbmx5IDEgcmVzb3VyY2Ugc2hvdWxkIGJlIGhvdHN3YXBwZWQuXG4gICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koc3RhY2tOYW1lLCB7XG4gICAgICBvcHRpb25zOiBbJy0taG90c3dhcCddLFxuICAgICAgY2FwdHVyZVN0ZGVycjogdHJ1ZSxcbiAgICAgIG9ubHlTdGRlcnI6IHRydWUsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgRFlOQU1JQ19DQ19QUk9QRVJUWV9WQUxVRTogJ3YyJywgLy8gdW5jaGFuZ2VkIGZyb20gZmlyc3QgaG90c3dhcFxuICAgICAgICBEWU5BTUlDX0NDX1BST1BFUlRZX1ZBTFVFXzI6ICd2MycsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gc2hvdWxkIG9ubHkgc2VlIG9uZSBob3Rzd2FwcGVkIG1lc3NhZ2UgaW4gb3V0cHV0XG4gICAgY29uc3QgaG90c3dhcENvdW50ID0gKGRlcGxveU91dHB1dC5tYXRjaCgvaG90c3dhcHBlZCEvZykgfHwgW10pLmxlbmd0aDtcbiAgICBleHBlY3QoaG90c3dhcENvdW50KS50b0JlKDEpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2hvdHN3YXAgY2FjaGUgaXMgaW52YWxpZGF0ZWQgYWZ0ZXIgYSBmdWxsIENsb3VkRm9ybWF0aW9uIGRlcGxveW1lbnQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTiAtIGRlcGxveSB0aGVuIGhvdHN3YXAgdG8gY3JlYXRlIGNhY2hlXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYS1ob3Rzd2FwJywge1xuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgRFlOQU1JQ19MQU1CREFfUFJPUEVSVFlfVkFMVUU6ICd2MScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYS1ob3Rzd2FwJywge1xuICAgICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfTEFNQkRBX1BST1BFUlRZX1ZBTFVFOiAndjInLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbGFtYmRhLWhvdHN3YXAnKTtcbiAgICBjb25zdCBjYWNoZUZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsub3V0JywgJy5ob3Rzd2FwLWNhY2hlJywgYCR7c3RhY2tOYW1lfS5qc29uYCk7XG4gICAgZXhwZWN0KGZzLmV4aXN0c1N5bmMoY2FjaGVGaWxlKSkudG9CZSh0cnVlKTtcblxuICAgIC8vIFdIRU4gLSBmdWxsIENGTiBkZXBsb3lcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbGFtYmRhLWhvdHN3YXAnLCB7XG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0xBTUJEQV9QUk9QRVJUWV9WQUxVRTogJ3YzJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOIC0gY2FjaGUgc2hvdWxkIGJlIGludmFsaWRhdGVkXG4gICAgZXhwZWN0KGZzLmV4aXN0c1N5bmMoY2FjaGVGaWxlKSkudG9CZShmYWxzZSk7XG4gIH0pLFxuKTtcbiJdfQ==
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
|
|
4
4
|
const lib_1 = require("../../../lib");
|
|
5
|
-
const regions_1 = require("../../../lib/regions");
|
|
6
5
|
jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
|
|
7
6
|
(0, lib_1.integTest)('hotswap deployment supports CloudControl-based resources with attribute resolution', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
8
7
|
// GIVEN
|
|
@@ -26,7 +25,7 @@ jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-c
|
|
|
26
25
|
StackName: fixture.fullStackName(stackName),
|
|
27
26
|
}));
|
|
28
27
|
const queueUrl = response.Stacks?.[0].Outputs?.find((output) => output.OutputKey === 'QueueUrl')?.OutputValue;
|
|
29
|
-
const
|
|
28
|
+
const dashboardName = response.Stacks?.[0].Outputs?.find((output) => output.OutputKey === 'DashboardName')?.OutputValue;
|
|
30
29
|
const ruleName = response.Stacks?.[0].Outputs?.find((output) => output.OutputKey === 'RuleName')?.OutputValue;
|
|
31
30
|
// THEN
|
|
32
31
|
// The deployment should not trigger a full deployment, thus the stack's status must remain
|
|
@@ -36,7 +35,7 @@ jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-c
|
|
|
36
35
|
expect(deployOutput).toMatch(/hotswapped!/);
|
|
37
36
|
// Verify all three CCAPI-based resources were hotswapped
|
|
38
37
|
expect(queueUrl).toBeDefined();
|
|
39
|
-
expect(
|
|
38
|
+
expect(dashboardName).toBeDefined();
|
|
40
39
|
expect(ruleName).toBeDefined();
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
}));
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWhvdHN3YXAtZGVwbG95bWVudC1zdXBwb3J0cy1jbG91ZGNvbnRyb2wtYmFzZWQtcmVzb3VyY2VzLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1ob3Rzd2FwLWRlcGxveW1lbnQtc3VwcG9ydHMtY2xvdWRjb250cm9sLWJhc2VkLXJlc291cmNlcy5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwRUFBdUU7QUFDdkUsc0NBQTZEO0FBRTdELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxJQUFBLGVBQVMsRUFDUCxvRkFBb0YsRUFDcEYsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsUUFBUTtJQUNSLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQztJQUMvQixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO1FBQ2pDLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLE1BQU0sRUFBRTtZQUNOLHlCQUF5QixFQUFFLGdCQUFnQjtTQUM1QztLQUNGLENBQUMsQ0FBQztJQUVILE9BQU87SUFDUCxNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO1FBQ3RELE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUN0QixhQUFhLEVBQUUsSUFBSTtRQUNuQixVQUFVLEVBQUUsSUFBSTtRQUNoQixNQUFNLEVBQUU7WUFDTix5QkFBeUIsRUFBRSxXQUFXO1NBQ3ZDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3BELElBQUksNkNBQXFCLENBQUM7UUFDeEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO0tBQzVDLENBQUMsQ0FDSCxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDLEVBQUUsV0FBVyxDQUFDO0lBQzlHLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxFQUFFLFdBQVcsQ0FBQztJQUN4SCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUMsRUFBRSxXQUFXLENBQUM7SUFFOUcsT0FBTztJQUVQLDJGQUEyRjtJQUMzRixvQkFBb0I7SUFDcEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwRSwwQkFBMEI7SUFDMUIsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1Qyx5REFBeUQ7SUFDekQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9CLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaWJlU3RhY2tzQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApOyAvLyBJbmNsdWRlcyB0aGUgdGltZSB0byBhY3F1aXJlIGxvY2tzLCB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lXG5cbmludGVnVGVzdChcbiAgJ2hvdHN3YXAgZGVwbG95bWVudCBzdXBwb3J0cyBDbG91ZENvbnRyb2wtYmFzZWQgcmVzb3VyY2VzIHdpdGggYXR0cmlidXRlIHJlc29sdXRpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrTmFtZSA9ICdjYy1ob3Rzd2FwJztcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUU6ICdvcmlnaW5hbCB2YWx1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KHN0YWNrTmFtZSwge1xuICAgICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IHRydWUsXG4gICAgICBvbmx5U3RkZXJyOiB0cnVlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUU6ICduZXcgdmFsdWUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHF1ZXVlVXJsID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZCgob3V0cHV0KSA9PiBvdXRwdXQuT3V0cHV0S2V5ID09PSAnUXVldWVVcmwnKT8uT3V0cHV0VmFsdWU7XG4gICAgY29uc3QgZGFzaGJvYXJkTmFtZSA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LmZpbmQoKG91dHB1dCkgPT4gb3V0cHV0Lk91dHB1dEtleSA9PT0gJ0Rhc2hib2FyZE5hbWUnKT8uT3V0cHV0VmFsdWU7XG4gICAgY29uc3QgcnVsZU5hbWUgPSByZXNwb25zZS5TdGFja3M/LlswXS5PdXRwdXRzPy5maW5kKChvdXRwdXQpID0+IG91dHB1dC5PdXRwdXRLZXkgPT09ICdSdWxlTmFtZScpPy5PdXRwdXRWYWx1ZTtcblxuICAgIC8vIFRIRU5cblxuICAgIC8vIFRoZSBkZXBsb3ltZW50IHNob3VsZCBub3QgdHJpZ2dlciBhIGZ1bGwgZGVwbG95bWVudCwgdGh1cyB0aGUgc3RhY2sncyBzdGF0dXMgbXVzdCByZW1haW5cbiAgICAvLyBcIkNSRUFURV9DT01QTEVURVwiXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgICAvLyBWZXJpZnkgaG90c3dhcCB3YXMgdXNlZFxuICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvTWF0Y2goL2hvdHN3YXBwZWQhLyk7XG4gICAgLy8gVmVyaWZ5IGFsbCB0aHJlZSBDQ0FQSS1iYXNlZCByZXNvdXJjZXMgd2VyZSBob3Rzd2FwcGVkXG4gICAgZXhwZWN0KHF1ZXVlVXJsKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChkYXNoYm9hcmROYW1lKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChydWxlTmFtZSkudG9CZURlZmluZWQoKTtcbiAgfSksXG4pO1xuIl19
|