@aws-cdk-testing/cli-integ 3.30.1 → 3.31.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/aws.d.ts +2 -0
- package/lib/aws.js +4 -1
- package/lib/regions.d.ts +5 -1
- package/lib/regions.js +18 -3
- package/npm-shrinkwrap.json +1409 -1384
- package/package.json +22 -21
- package/resources/cdk-apps/app/app.js +33 -2
- package/resources/cdk-apps/diagnose-app/app.js +74 -0
- package/resources/cdk-apps/diagnose-app/cdk.json +7 -0
- package/tests/cli-integ-tests/deploy/cdk-deploy-skips-approval-prompt-on-no-change-deploy.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/deploy/cdk-deploy-skips-approval-prompt-on-no-change-deploy.integtest.js +23 -0
- package/tests/cli-integ-tests/deploy/cdk-import-existing-resources-error-message-includes-construct-paths.integtest.js +2 -2
- package/tests/cli-integ-tests/deploy/cdk-two-step-deploy-prepare-then-execute-change-set.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/deploy/cdk-two-step-deploy-prepare-then-execute-change-set.integtest.js +36 -0
- package/tests/cli-integ-tests/diagnose/cdk-diagnose-changeset-failure.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diagnose/cdk-diagnose-changeset-failure.integtest.js +43 -0
- package/tests/cli-integ-tests/diagnose/cdk-diagnose-deployment-failure.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diagnose/cdk-diagnose-deployment-failure.integtest.js +20 -0
- package/tests/cli-integ-tests/diagnose/cdk-diagnose-early-validation-failure.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diagnose/cdk-diagnose-early-validation-failure.integtest.js +26 -0
- package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-caches-template.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-caches-template.integtest.js +73 -0
- package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-supports-cloudcontrol-based-resources.integtest.js +3 -2
- package/tests/cli-integ-tests/orphan/cdk-orphan-detaches-resource.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/orphan/cdk-orphan-detaches-resource.integtest.js +72 -0
package/package.json
CHANGED
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
"organization": true
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@aws-cdk/toolkit-lib": "1.
|
|
42
|
+
"@aws-cdk/toolkit-lib": "1.25.0",
|
|
43
43
|
"@aws-cdk/yarn-cling": "0.0.0",
|
|
44
|
-
"@cdklabs/eslint-plugin": "^2.0.
|
|
44
|
+
"@cdklabs/eslint-plugin": "^2.0.2",
|
|
45
45
|
"@stylistic/eslint-plugin": "^3",
|
|
46
46
|
"@types/fs-extra": "^11",
|
|
47
47
|
"@types/jest": "^29.5.14",
|
|
@@ -62,30 +62,31 @@
|
|
|
62
62
|
"jest": "^29.7.0",
|
|
63
63
|
"jest-junit": "^16",
|
|
64
64
|
"license-checker": "^25.0.1",
|
|
65
|
-
"nx": "^22.6.
|
|
65
|
+
"nx": "^22.6.5",
|
|
66
66
|
"prettier": "^2.8",
|
|
67
|
-
"projen": "^0.99.
|
|
67
|
+
"projen": "^0.99.52",
|
|
68
68
|
"ts-jest": "^29.2.5",
|
|
69
69
|
"typescript": "5.9"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@aws-sdk/client-cloudformation": "^3
|
|
73
|
-
"@aws-sdk/client-codeartifact": "^3
|
|
74
|
-
"@aws-sdk/client-
|
|
75
|
-
"@aws-sdk/client-ecr
|
|
76
|
-
"@aws-sdk/client-
|
|
77
|
-
"@aws-sdk/client-
|
|
78
|
-
"@aws-sdk/client-
|
|
79
|
-
"@aws-sdk/client-
|
|
80
|
-
"@aws-sdk/client-
|
|
81
|
-
"@aws-sdk/client-
|
|
82
|
-
"@aws-sdk/client-
|
|
83
|
-
"@aws-sdk/client-
|
|
84
|
-
"@aws-sdk/
|
|
85
|
-
"@
|
|
72
|
+
"@aws-sdk/client-cloudformation": "^3",
|
|
73
|
+
"@aws-sdk/client-codeartifact": "^3",
|
|
74
|
+
"@aws-sdk/client-dynamodb": "^3",
|
|
75
|
+
"@aws-sdk/client-ecr": "^3",
|
|
76
|
+
"@aws-sdk/client-ecr-public": "^3",
|
|
77
|
+
"@aws-sdk/client-ecs": "^3",
|
|
78
|
+
"@aws-sdk/client-iam": "^3",
|
|
79
|
+
"@aws-sdk/client-lambda": "^3",
|
|
80
|
+
"@aws-sdk/client-s3": "^3",
|
|
81
|
+
"@aws-sdk/client-secrets-manager": "^3",
|
|
82
|
+
"@aws-sdk/client-sns": "^3",
|
|
83
|
+
"@aws-sdk/client-sso": "^3",
|
|
84
|
+
"@aws-sdk/client-sts": "^3",
|
|
85
|
+
"@aws-sdk/credential-providers": "^3",
|
|
86
|
+
"@cdklabs/cdk-atmosphere-client": "^0.0.98",
|
|
86
87
|
"@octokit/rest": "^20",
|
|
87
|
-
"@smithy/types": "^4
|
|
88
|
-
"@smithy/util-retry": "^4
|
|
88
|
+
"@smithy/types": "^4",
|
|
89
|
+
"@smithy/util-retry": "^4",
|
|
89
90
|
"chalk": "^4",
|
|
90
91
|
"fast-glob": "^3.3.3",
|
|
91
92
|
"fs-extra": "^11",
|
|
@@ -124,7 +125,7 @@
|
|
|
124
125
|
"publishConfig": {
|
|
125
126
|
"access": "public"
|
|
126
127
|
},
|
|
127
|
-
"version": "3.
|
|
128
|
+
"version": "3.31.0",
|
|
128
129
|
"packageManager": "yarn@4.13.0",
|
|
129
130
|
"types": "lib/index.d.ts",
|
|
130
131
|
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"yarn projen\"."
|
|
@@ -479,6 +479,35 @@ class LambdaStack extends cdk.Stack {
|
|
|
479
479
|
}
|
|
480
480
|
}
|
|
481
481
|
|
|
482
|
+
class OrphanableStack extends cdk.Stack {
|
|
483
|
+
constructor(parent, id, props) {
|
|
484
|
+
super(parent, id, props);
|
|
485
|
+
|
|
486
|
+
const table = new cdk.aws_dynamodb.Table(this, 'MyTable', {
|
|
487
|
+
partitionKey: { name: 'PK', type: cdk.aws_dynamodb.AttributeType.STRING },
|
|
488
|
+
billingMode: cdk.aws_dynamodb.BillingMode.PAY_PER_REQUEST,
|
|
489
|
+
removalPolicy: cdk.RemovalPolicy.RETAIN,
|
|
490
|
+
});
|
|
491
|
+
|
|
492
|
+
// Lambda that references the table via Ref (TABLE_NAME) and GetAtt (TABLE_ARN)
|
|
493
|
+
const fn = new lambda.Function(this, 'Consumer', {
|
|
494
|
+
runtime: lambda.Runtime.NODEJS_LATEST,
|
|
495
|
+
handler: 'index.handler',
|
|
496
|
+
code: lambda.Code.fromInline('exports.handler = async () => {}'),
|
|
497
|
+
environment: {
|
|
498
|
+
TABLE_NAME: table.tableName,
|
|
499
|
+
TABLE_ARN: table.tableArn,
|
|
500
|
+
},
|
|
501
|
+
});
|
|
502
|
+
|
|
503
|
+
table.grantReadData(fn);
|
|
504
|
+
|
|
505
|
+
new cdk.CfnOutput(this, 'TableName', { value: table.tableName });
|
|
506
|
+
new cdk.CfnOutput(this, 'TableArn', { value: table.tableArn });
|
|
507
|
+
new cdk.CfnOutput(this, 'FunctionName', { value: fn.functionName });
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
|
|
482
511
|
class DriftableStack extends cdk.Stack {
|
|
483
512
|
constructor(parent, id, props) {
|
|
484
513
|
const synthesizer = parent.node.tryGetContext('legacySynth') === 'true' ?
|
|
@@ -748,8 +777,8 @@ class CloudControlHotswapStack extends cdk.Stack {
|
|
|
748
777
|
agentName: `${cdk.Stack.of(this).stackName}-agent`.substring(0, 40),
|
|
749
778
|
agentResourceRoleArn: agentRole.roleArn,
|
|
750
779
|
instruction: process.env.DYNAMIC_CC_PROPERTY_VALUE
|
|
751
|
-
? `You help query the table ${table.tableName}. ${process.env.DYNAMIC_CC_PROPERTY_VALUE}`
|
|
752
|
-
: `You help query the table ${table.tableName}. original`,
|
|
780
|
+
? `You help query the table ${table.tableName}. ${process.env.DYNAMIC_CC_PROPERTY_VALUE}. ${process.env.DYNAMIC_CC_PROPERTY_VALUE_2 ?? 'original'}`
|
|
781
|
+
: `You help query the table ${table.tableName}. original. original`,
|
|
753
782
|
foundationModel: 'anthropic.claude-instant-v1',
|
|
754
783
|
});
|
|
755
784
|
|
|
@@ -1103,6 +1132,8 @@ switch (stackSet) {
|
|
|
1103
1132
|
|
|
1104
1133
|
new DriftableStack(app, `${stackPrefix}-driftable`);
|
|
1105
1134
|
|
|
1135
|
+
new OrphanableStack(app, `${stackPrefix}-orphanable`);
|
|
1136
|
+
|
|
1106
1137
|
new EarlyValidationStack(app, `${stackPrefix}-early-validation-stack1`);
|
|
1107
1138
|
new EarlyValidationStack(app, `${stackPrefix}-early-validation-stack2`);
|
|
1108
1139
|
break;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
const cdk = require('aws-cdk-lib');
|
|
2
|
+
const s3 = require('aws-cdk-lib/aws-s3');
|
|
3
|
+
const iam = require('aws-cdk-lib/aws-iam');
|
|
4
|
+
|
|
5
|
+
const stackPrefix = process.env.STACK_NAME_PREFIX;
|
|
6
|
+
if (!stackPrefix) {
|
|
7
|
+
throw new Error('the STACK_NAME_PREFIX environment variable is required');
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const app = new cdk.App({
|
|
11
|
+
context: {
|
|
12
|
+
'@aws-cdk/core:assetHashSalt': process.env.CODEBUILD_BUILD_ID ?? process.env.GITHUB_RUN_ID,
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
const defaultEnv = {
|
|
17
|
+
account: process.env.CDK_DEFAULT_ACCOUNT,
|
|
18
|
+
region: process.env.CDK_DEFAULT_REGION,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* A stack that will fail during deployment because it creates an IAM Policy
|
|
23
|
+
* without the required PolicyDocument property.
|
|
24
|
+
*/
|
|
25
|
+
class DeployFailStack extends cdk.Stack {
|
|
26
|
+
constructor(scope, id, props) {
|
|
27
|
+
super(scope, id, props);
|
|
28
|
+
|
|
29
|
+
new cdk.CfnResource(this, 'BadPolicy', {
|
|
30
|
+
type: 'AWS::IAM::Policy',
|
|
31
|
+
// Missing required PolicyDocument property — will fail during deployment
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Two stacks that create S3 buckets with the same name.
|
|
38
|
+
* Deploying the first, then the second, triggers an early validation error.
|
|
39
|
+
*/
|
|
40
|
+
class EarlyValidationStack extends cdk.Stack {
|
|
41
|
+
constructor(scope, id, props) {
|
|
42
|
+
super(scope, id, props);
|
|
43
|
+
|
|
44
|
+
new s3.Bucket(this, 'MyBucket', {
|
|
45
|
+
bucketName: process.env.BUCKET_NAME,
|
|
46
|
+
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* A stack with a named IAM role. Used for the auto-import failure test:
|
|
53
|
+
* deploy with RETAIN, destroy, then re-deploy without RETAIN using --import-existing-resources.
|
|
54
|
+
*/
|
|
55
|
+
class ImportFailStack extends cdk.Stack {
|
|
56
|
+
constructor(scope, id, props) {
|
|
57
|
+
super(scope, id, props);
|
|
58
|
+
|
|
59
|
+
const retain = process.env.REMOVAL_POLICY === 'retain';
|
|
60
|
+
|
|
61
|
+
const role = new iam.Role(this, 'MyRole', {
|
|
62
|
+
assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
|
|
63
|
+
roleName: `${stackPrefix}-diagnose-import-role`,
|
|
64
|
+
});
|
|
65
|
+
role.applyRemovalPolicy(retain ? cdk.RemovalPolicy.RETAIN : cdk.RemovalPolicy.DESTROY);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
new DeployFailStack(app, `${stackPrefix}-diagnose-deploy-fail`, { env: defaultEnv });
|
|
70
|
+
new EarlyValidationStack(app, `${stackPrefix}-diagnose-early-val-1`, { env: defaultEnv });
|
|
71
|
+
new EarlyValidationStack(app, `${stackPrefix}-diagnose-early-val-2`, { env: defaultEnv });
|
|
72
|
+
new ImportFailStack(app, `${stackPrefix}-diagnose-import-fail`, { env: defaultEnv });
|
|
73
|
+
|
|
74
|
+
app.synth();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../../lib");
|
|
4
|
+
(0, lib_1.integTest)('deploy with --require-approval skips the approval prompt on a no-change deploy', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
5
|
+
// First deploy — creates the stack.
|
|
6
|
+
await fixture.cdkDeploy('test-2');
|
|
7
|
+
// Second deploy — no changes. With --require-approval=any-change and no
|
|
8
|
+
// --yes, the CLI must *not* prompt for approval: there is nothing for the
|
|
9
|
+
// user to approve. If the bug regresses, this call will hang waiting for
|
|
10
|
+
// stdin and the test will time out.
|
|
11
|
+
const output = await fixture.cdkDeploy('test-2', {
|
|
12
|
+
options: ['--require-approval=any-change', '--method=change-set'],
|
|
13
|
+
neverRequireApproval: false,
|
|
14
|
+
modEnv: {
|
|
15
|
+
FORCE_COLOR: '0',
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
// The deploy completed and reported no changes — and, crucially, never
|
|
19
|
+
// asked the user to confirm "updates" that don't exist.
|
|
20
|
+
expect(output).toContain('(no changes)');
|
|
21
|
+
expect(output).not.toContain('Do you wish to deploy these changes');
|
|
22
|
+
}));
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRlcGxveS1za2lwcy1hcHByb3ZhbC1wcm9tcHQtb24tbm8tY2hhbmdlLWRlcGxveS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstZGVwbG95LXNraXBzLWFwcHJvdmFsLXByb21wdC1vbi1uby1jaGFuZ2UtZGVwbG95LmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUE2RDtBQUU3RCxJQUFBLGVBQVMsRUFDUCxnRkFBZ0YsRUFDaEYsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsb0NBQW9DO0lBQ3BDLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVsQyx3RUFBd0U7SUFDeEUsMEVBQTBFO0lBQzFFLHlFQUF5RTtJQUN6RSxvQ0FBb0M7SUFDcEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtRQUMvQyxPQUFPLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxxQkFBcUIsQ0FBQztRQUNqRSxvQkFBb0IsRUFBRSxLQUFLO1FBQzNCLE1BQU0sRUFBRTtZQUNOLFdBQVcsRUFBRSxHQUFHO1NBQ2pCO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsdUVBQXVFO0lBQ3ZFLHdEQUF3RDtJQUN4RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFDdEUsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnZGVwbG95IHdpdGggLS1yZXF1aXJlLWFwcHJvdmFsIHNraXBzIHRoZSBhcHByb3ZhbCBwcm9tcHQgb24gYSBuby1jaGFuZ2UgZGVwbG95JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRmlyc3QgZGVwbG95IOKAlCBjcmVhdGVzIHRoZSBzdGFjay5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJyk7XG5cbiAgICAvLyBTZWNvbmQgZGVwbG95IOKAlCBubyBjaGFuZ2VzLiBXaXRoIC0tcmVxdWlyZS1hcHByb3ZhbD1hbnktY2hhbmdlIGFuZCBub1xuICAgIC8vIC0teWVzLCB0aGUgQ0xJIG11c3QgKm5vdCogcHJvbXB0IGZvciBhcHByb3ZhbDogdGhlcmUgaXMgbm90aGluZyBmb3IgdGhlXG4gICAgLy8gdXNlciB0byBhcHByb3ZlLiBJZiB0aGUgYnVnIHJlZ3Jlc3NlcywgdGhpcyBjYWxsIHdpbGwgaGFuZyB3YWl0aW5nIGZvclxuICAgIC8vIHN0ZGluIGFuZCB0aGUgdGVzdCB3aWxsIHRpbWUgb3V0LlxuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInLCB7XG4gICAgICBvcHRpb25zOiBbJy0tcmVxdWlyZS1hcHByb3ZhbD1hbnktY2hhbmdlJywgJy0tbWV0aG9kPWNoYW5nZS1zZXQnXSxcbiAgICAgIG5ldmVyUmVxdWlyZUFwcHJvdmFsOiBmYWxzZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBGT1JDRV9DT0xPUjogJzAnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFRoZSBkZXBsb3kgY29tcGxldGVkIGFuZCByZXBvcnRlZCBubyBjaGFuZ2VzIOKAlCBhbmQsIGNydWNpYWxseSwgbmV2ZXJcbiAgICAvLyBhc2tlZCB0aGUgdXNlciB0byBjb25maXJtIFwidXBkYXRlc1wiIHRoYXQgZG9uJ3QgZXhpc3QuXG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCcobm8gY2hhbmdlcyknKTtcbiAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9Db250YWluKCdEbyB5b3Ugd2lzaCB0byBkZXBsb3kgdGhlc2UgY2hhbmdlcycpO1xuICB9KSxcbik7XG4iXX0=
|
|
@@ -20,7 +20,7 @@ const lib_1 = require("../../../lib");
|
|
|
20
20
|
options: ['--import-existing-resources'],
|
|
21
21
|
allowErrExit: true,
|
|
22
22
|
});
|
|
23
|
-
expect(stdErr).toContain('
|
|
23
|
+
expect(stdErr).toContain('needs a DeletionPolicy');
|
|
24
24
|
expect(stdErr).toContain('MyRole');
|
|
25
25
|
expect(stdErr).toContain('RemovalPolicy.RETAIN');
|
|
26
26
|
expect(stdErr).toContain('https://docs.aws.amazon.com/cdk/v2/guide/resources.html#resources-removal');
|
|
@@ -40,4 +40,4 @@ const lib_1 = require("../../../lib");
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
}));
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMtZXJyb3ItbWVzc2FnZS1pbmNsdWRlcy1jb25zdHJ1Y3QtcGF0aHMuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMtZXJyb3ItbWVzc2FnZS1pbmNsdWRlcy1jb25zdHJ1Y3QtcGF0aHMuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsb0RBQXdEO0FBQ3hELHNDQUE4RDtBQUU5RCxJQUFBLGVBQVMsRUFDUCxrRUFBa0UsRUFDbEUsSUFBQSx5QkFBbUIsRUFBQywrQkFBK0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDckUsTUFBTSxRQUFRLEdBQUcsR0FBRyxPQUFPLENBQUMsZUFBZSxjQUFjLENBQUM7SUFFMUQsSUFBSSxDQUFDO1FBQ0gsK0VBQStFO1FBQy9FLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRTtZQUN6QyxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFO1NBQ3JDLENBQUMsQ0FBQztRQUVILGlFQUFpRTtRQUNqRSxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUU7WUFDMUMsTUFBTSxFQUFFLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRTtTQUNyQyxDQUFDLENBQUM7UUFFSCw2RUFBNkU7UUFDN0Usb0ZBQW9GO1FBQ3BGLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRTtZQUN4RCxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFO1lBQ3JDLE9BQU8sRUFBRSxDQUFDLDZCQUE2QixDQUFDO1lBQ3hDLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNuRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLDJFQUEyRSxDQUFDLENBQUM7UUFFdEcsbUZBQW1GO1FBQ25GLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRTtZQUN6QyxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFO1lBQ3BDLE9BQU8sRUFBRSxDQUFDLDZCQUE2QixDQUFDO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7WUFBUyxDQUFDO1FBQ1QsK0NBQStDO1FBQy9DLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksOEJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCw4QkFBOEI7UUFDaEMsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVsZXRlUm9sZUNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtaWFtJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aFNwZWNpZmljRml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmludGVnVGVzdChcbiAgJ2ltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMgZXJyb3IgbWVzc2FnZSBpbmNsdWRlcyBjb25zdHJ1Y3QgcGF0aHMnLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCdpbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzLWFwcCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgcm9sZU5hbWUgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0taW1wb3J0LXJvbGVgO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFN0ZXAgMTogRGVwbG95IHdpdGggUkVUQUlOIHNvIHRoZSByb2xlIGV4aXN0cyBhbmQgY2FuIHN1cnZpdmUgc3RhY2sgZGVsZXRpb25cbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdpbXBvcnQtZXhpc3RpbmcnLCB7XG4gICAgICAgIG1vZEVudjogeyBSRU1PVkFMX1BPTElDWTogJ3JldGFpbicgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTdGVwIDI6IERlbGV0ZSB0aGUgc3RhY2sg4oCUIHRoZSByb2xlIHN1cnZpdmVzIGJlY2F1c2Ugb2YgUkVUQUlOXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ2ltcG9ydC1leGlzdGluZycsIHtcbiAgICAgICAgbW9kRW52OiB7IFJFTU9WQUxfUE9MSUNZOiAncmV0YWluJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFN0ZXAgMzogUmUtZGVwbG95IHdpdGggREVTVFJPWSAobm8gcmV0YWluKSBhbmQgLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzXG4gICAgICAvLyBUaGlzIHNob3VsZCBmYWlsIGJlY2F1c2UgQ2xvdWRGb3JtYXRpb24gcmVxdWlyZXMgRGVsZXRpb25Qb2xpY3k9UmV0YWluIGZvciBpbXBvcnRcbiAgICAgIGNvbnN0IHN0ZEVyciA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdpbXBvcnQtZXhpc3RpbmcnLCB7XG4gICAgICAgIG1vZEVudjogeyBSRU1PVkFMX1BPTElDWTogJ2Rlc3Ryb3knIH0sXG4gICAgICAgIG9wdGlvbnM6IFsnLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzJ10sXG4gICAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc3RkRXJyKS50b0NvbnRhaW4oJ25lZWRzIGEgRGVsZXRpb25Qb2xpY3knKTtcbiAgICAgIGV4cGVjdChzdGRFcnIpLnRvQ29udGFpbignTXlSb2xlJyk7XG4gICAgICBleHBlY3Qoc3RkRXJyKS50b0NvbnRhaW4oJ1JlbW92YWxQb2xpY3kuUkVUQUlOJyk7XG4gICAgICBleHBlY3Qoc3RkRXJyKS50b0NvbnRhaW4oJ2h0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvdjIvZ3VpZGUvcmVzb3VyY2VzLmh0bWwjcmVzb3VyY2VzLXJlbW92YWwnKTtcblxuICAgICAgLy8gU3RlcCA0OiBEZXBsb3kgd2l0aCBSRVRBSU4gYW5kIC0taW1wb3J0LWV4aXN0aW5nLXJlc291cmNlcyDigJQgdGhpcyBzaG91bGQgc3VjY2VlZFxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2ltcG9ydC1leGlzdGluZycsIHtcbiAgICAgICAgbW9kRW52OiB7IFJFTU9WQUxfUE9MSUNZOiAncmV0YWluJyB9LFxuICAgICAgICBvcHRpb25zOiBbJy0taW1wb3J0LWV4aXN0aW5nLXJlc291cmNlcyddLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIENsZWFuIHVwOiBkZWxldGUgdGhlIHJvbGUgaWYgaXQgd2FzIHJldGFpbmVkXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmaXh0dXJlLmF3cy5pYW0uc2VuZChuZXcgRGVsZXRlUm9sZUNvbW1hbmQoeyBSb2xlTmFtZTogcm9sZU5hbWUgfSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFJvbGUgbWF5IGFscmVhZHkgYmUgZGVsZXRlZFxuICAgICAgfVxuICAgIH1cbiAgfSksXG4pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
|
|
4
|
+
const lib_1 = require("../../../lib");
|
|
5
|
+
(0, lib_1.integTest)('two-step deploy: prepare then execute change set', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
6
|
+
const changeSetName = `review-${fixture.stackNamePrefix}`;
|
|
7
|
+
const stackName = 'test-2';
|
|
8
|
+
const fullStackName = fixture.fullStackName(stackName);
|
|
9
|
+
// Step 1: Create the change set without executing it
|
|
10
|
+
await fixture.cdkDeploy(stackName, {
|
|
11
|
+
options: ['--method=prepare-change-set', '--change-set-name', changeSetName],
|
|
12
|
+
captureStderr: false,
|
|
13
|
+
});
|
|
14
|
+
// Verify the stack is in REVIEW_IN_PROGRESS
|
|
15
|
+
const describeResponse = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStacksCommand({ StackName: fullStackName }));
|
|
16
|
+
expect(describeResponse.Stacks?.[0].StackStatus).toEqual('REVIEW_IN_PROGRESS');
|
|
17
|
+
// Verify the change set exists and is ready
|
|
18
|
+
const changeSetResponse = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeChangeSetCommand({
|
|
19
|
+
StackName: fullStackName,
|
|
20
|
+
ChangeSetName: changeSetName,
|
|
21
|
+
}));
|
|
22
|
+
expect(changeSetResponse.Status).toEqual('CREATE_COMPLETE');
|
|
23
|
+
// Step 2: Execute the change set
|
|
24
|
+
await fixture.cdk([
|
|
25
|
+
'deploy',
|
|
26
|
+
'--require-approval=never',
|
|
27
|
+
'--method=execute-change-set',
|
|
28
|
+
'--change-set-name', changeSetName,
|
|
29
|
+
'--progress', 'events',
|
|
30
|
+
fullStackName,
|
|
31
|
+
]);
|
|
32
|
+
// Verify the stack is now deployed
|
|
33
|
+
const finalResponse = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStacksCommand({ StackName: fullStackName }));
|
|
34
|
+
expect(finalResponse.Stacks?.[0].StackStatus).toEqual('CREATE_COMPLETE');
|
|
35
|
+
}));
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXR3by1zdGVwLWRlcGxveS1wcmVwYXJlLXRoZW4tZXhlY3V0ZS1jaGFuZ2Utc2V0LmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay10d28tc3RlcC1kZXBsb3ktcHJlcGFyZS10aGVuLWV4ZWN1dGUtY2hhbmdlLXNldC5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwRUFBaUc7QUFDakcsc0NBQTZEO0FBRTdELElBQUEsZUFBUyxFQUNQLGtEQUFrRCxFQUNsRCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLGFBQWEsR0FBRyxVQUFVLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDM0IsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV2RCxxREFBcUQ7SUFDckQsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtRQUNqQyxPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLENBQUM7UUFDNUUsYUFBYSxFQUFFLEtBQUs7S0FDckIsQ0FBQyxDQUFDO0lBRUgsNENBQTRDO0lBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzVELElBQUksNkNBQXFCLENBQUMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FDeEQsQ0FBQztJQUNGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUUvRSw0Q0FBNEM7SUFDNUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDN0QsSUFBSSxnREFBd0IsQ0FBQztRQUMzQixTQUFTLEVBQUUsYUFBYTtRQUN4QixhQUFhLEVBQUUsYUFBYTtLQUM3QixDQUFDLENBQ0gsQ0FBQztJQUNGLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUU1RCxpQ0FBaUM7SUFDakMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ2hCLFFBQVE7UUFDUiwwQkFBMEI7UUFDMUIsNkJBQTZCO1FBQzdCLG1CQUFtQixFQUFFLGFBQWE7UUFDbEMsWUFBWSxFQUFFLFFBQVE7UUFDdEIsYUFBYTtLQUNkLENBQUMsQ0FBQztJQUVILG1DQUFtQztJQUNuQyxNQUFNLGFBQWEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDekQsSUFBSSw2Q0FBcUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUN4RCxDQUFDO0lBQ0YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUMzRSxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kLCBEZXNjcmliZVN0YWNrc0NvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5pbnRlZ1Rlc3QoXG4gICd0d28tc3RlcCBkZXBsb3k6IHByZXBhcmUgdGhlbiBleGVjdXRlIGNoYW5nZSBzZXQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBjaGFuZ2VTZXROYW1lID0gYHJldmlldy0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWA7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gJ3Rlc3QtMic7XG4gICAgY29uc3QgZnVsbFN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpO1xuXG4gICAgLy8gU3RlcCAxOiBDcmVhdGUgdGhlIGNoYW5nZSBzZXQgd2l0aG91dCBleGVjdXRpbmcgaXRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1tZXRob2Q9cHJlcGFyZS1jaGFuZ2Utc2V0JywgJy0tY2hhbmdlLXNldC1uYW1lJywgY2hhbmdlU2V0TmFtZV0sXG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIC8vIFZlcmlmeSB0aGUgc3RhY2sgaXMgaW4gUkVWSUVXX0lOX1BST0dSRVNTXG4gICAgY29uc3QgZGVzY3JpYmVSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHsgU3RhY2tOYW1lOiBmdWxsU3RhY2tOYW1lIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KGRlc2NyaWJlUmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ1JFVklFV19JTl9QUk9HUkVTUycpO1xuXG4gICAgLy8gVmVyaWZ5IHRoZSBjaGFuZ2Ugc2V0IGV4aXN0cyBhbmQgaXMgcmVhZHlcbiAgICBjb25zdCBjaGFuZ2VTZXRSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBmdWxsU3RhY2tOYW1lLFxuICAgICAgICBDaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXROYW1lLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QoY2hhbmdlU2V0UmVzcG9uc2UuU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcblxuICAgIC8vIFN0ZXAgMjogRXhlY3V0ZSB0aGUgY2hhbmdlIHNldFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrKFtcbiAgICAgICdkZXBsb3knLFxuICAgICAgJy0tcmVxdWlyZS1hcHByb3ZhbD1uZXZlcicsXG4gICAgICAnLS1tZXRob2Q9ZXhlY3V0ZS1jaGFuZ2Utc2V0JyxcbiAgICAgICctLWNoYW5nZS1zZXQtbmFtZScsIGNoYW5nZVNldE5hbWUsXG4gICAgICAnLS1wcm9ncmVzcycsICdldmVudHMnLFxuICAgICAgZnVsbFN0YWNrTmFtZSxcbiAgICBdKTtcblxuICAgIC8vIFZlcmlmeSB0aGUgc3RhY2sgaXMgbm93IGRlcGxveWVkXG4gICAgY29uc3QgZmluYWxSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHsgU3RhY2tOYW1lOiBmdWxsU3RhY2tOYW1lIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KGZpbmFsUmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICB9KSxcbik7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const client_iam_1 = require("@aws-sdk/client-iam");
|
|
4
|
+
const lib_1 = require("../../../lib");
|
|
5
|
+
(0, lib_1.integTest)('cdk diagnose after changeset failure (auto-import)', (0, lib_1.withSpecificFixture)('diagnose-app', async (fixture) => {
|
|
6
|
+
const roleName = `${fixture.stackNamePrefix}-diagnose-import-role`;
|
|
7
|
+
try {
|
|
8
|
+
// Step 1: Deploy with RETAIN so the role survives stack deletion
|
|
9
|
+
await fixture.cdkDeploy('diagnose-import-fail', {
|
|
10
|
+
modEnv: { REMOVAL_POLICY: 'retain' },
|
|
11
|
+
});
|
|
12
|
+
// Step 2: Delete the stack — the role survives because of RETAIN
|
|
13
|
+
await fixture.cdkDestroy('diagnose-import-fail', {
|
|
14
|
+
modEnv: { REMOVAL_POLICY: 'retain' },
|
|
15
|
+
});
|
|
16
|
+
// Step 3: Re-deploy with DESTROY (no retain) and --import-existing-resources
|
|
17
|
+
// This should fail because CloudFormation requires DeletionPolicy=Retain for import
|
|
18
|
+
const deployOutput = await fixture.cdkDeploy('diagnose-import-fail', {
|
|
19
|
+
modEnv: { REMOVAL_POLICY: 'destroy' },
|
|
20
|
+
options: ['--import-existing-resources'],
|
|
21
|
+
allowErrExit: true,
|
|
22
|
+
});
|
|
23
|
+
expect(deployOutput).toContain('DeletionPolicy');
|
|
24
|
+
// Step 4: Run cdk diagnose
|
|
25
|
+
const diagnoseOutput = await fixture.cdk(['--unstable=diagnose', 'diagnose', fixture.fullStackName('diagnose-import-fail')], {
|
|
26
|
+
modEnv: { REMOVAL_POLICY: 'destroy' },
|
|
27
|
+
allowErrExit: true,
|
|
28
|
+
});
|
|
29
|
+
// The diagnose output should mention the import issue
|
|
30
|
+
expect(diagnoseOutput).toContain('diagnose-import-fail');
|
|
31
|
+
expect(diagnoseOutput).toContain('DeletionPolicy');
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
// Clean up: delete the role if it was retained
|
|
35
|
+
try {
|
|
36
|
+
await fixture.aws.iam.send(new client_iam_1.DeleteRoleCommand({ RoleName: roleName }));
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Role may already be deleted
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}));
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRpYWdub3NlLWNoYW5nZXNldC1mYWlsdXJlLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1kaWFnbm9zZS1jaGFuZ2VzZXQtZmFpbHVyZS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxvREFBd0Q7QUFDeEQsc0NBQThEO0FBRTlELElBQUEsZUFBUyxFQUNQLG9EQUFvRCxFQUNwRCxJQUFBLHlCQUFtQixFQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDcEQsTUFBTSxRQUFRLEdBQUcsR0FBRyxPQUFPLENBQUMsZUFBZSx1QkFBdUIsQ0FBQztJQUVuRSxJQUFJLENBQUM7UUFDSCxpRUFBaUU7UUFDakUsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFO1lBQzlDLE1BQU0sRUFBRSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUU7U0FDckMsQ0FBQyxDQUFDO1FBRUgsaUVBQWlFO1FBQ2pFLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRTtZQUMvQyxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFO1NBQ3JDLENBQUMsQ0FBQztRQUVILDZFQUE2RTtRQUM3RSxvRkFBb0Y7UUFDcEYsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFO1lBQ25FLE1BQU0sRUFBRSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUU7WUFDckMsT0FBTyxFQUFFLENBQUMsNkJBQTZCLENBQUM7WUFDeEMsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRWpELDJCQUEyQjtRQUMzQixNQUFNLGNBQWMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3RDLENBQUMscUJBQXFCLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxFQUNsRjtZQUNFLE1BQU0sRUFBRSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUU7WUFDckMsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FDRixDQUFDO1FBRUYsc0RBQXNEO1FBQ3RELE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN6RCxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDckQsQ0FBQztZQUFTLENBQUM7UUFDVCwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSw4QkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLDhCQUE4QjtRQUNoQyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWxldGVSb2xlQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1pYW0nO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpYWdub3NlIGFmdGVyIGNoYW5nZXNldCBmYWlsdXJlIChhdXRvLWltcG9ydCknLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCdkaWFnbm9zZS1hcHAnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHJvbGVOYW1lID0gYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LWRpYWdub3NlLWltcG9ydC1yb2xlYDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBTdGVwIDE6IERlcGxveSB3aXRoIFJFVEFJTiBzbyB0aGUgcm9sZSBzdXJ2aXZlcyBzdGFjayBkZWxldGlvblxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2RpYWdub3NlLWltcG9ydC1mYWlsJywge1xuICAgICAgICBtb2RFbnY6IHsgUkVNT1ZBTF9QT0xJQ1k6ICdyZXRhaW4nIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gU3RlcCAyOiBEZWxldGUgdGhlIHN0YWNrIOKAlCB0aGUgcm9sZSBzdXJ2aXZlcyBiZWNhdXNlIG9mIFJFVEFJTlxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdkaWFnbm9zZS1pbXBvcnQtZmFpbCcsIHtcbiAgICAgICAgbW9kRW52OiB7IFJFTU9WQUxfUE9MSUNZOiAncmV0YWluJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFN0ZXAgMzogUmUtZGVwbG95IHdpdGggREVTVFJPWSAobm8gcmV0YWluKSBhbmQgLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzXG4gICAgICAvLyBUaGlzIHNob3VsZCBmYWlsIGJlY2F1c2UgQ2xvdWRGb3JtYXRpb24gcmVxdWlyZXMgRGVsZXRpb25Qb2xpY3k9UmV0YWluIGZvciBpbXBvcnRcbiAgICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdkaWFnbm9zZS1pbXBvcnQtZmFpbCcsIHtcbiAgICAgICAgbW9kRW52OiB7IFJFTU9WQUxfUE9MSUNZOiAnZGVzdHJveScgfSxcbiAgICAgICAgb3B0aW9uczogWyctLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMnXSxcbiAgICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbignRGVsZXRpb25Qb2xpY3knKTtcblxuICAgICAgLy8gU3RlcCA0OiBSdW4gY2RrIGRpYWdub3NlXG4gICAgICBjb25zdCBkaWFnbm9zZU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFxuICAgICAgICBbJy0tdW5zdGFibGU9ZGlhZ25vc2UnLCAnZGlhZ25vc2UnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2RpYWdub3NlLWltcG9ydC1mYWlsJyldLFxuICAgICAgICB7XG4gICAgICAgICAgbW9kRW52OiB7IFJFTU9WQUxfUE9MSUNZOiAnZGVzdHJveScgfSxcbiAgICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICAvLyBUaGUgZGlhZ25vc2Ugb3V0cHV0IHNob3VsZCBtZW50aW9uIHRoZSBpbXBvcnQgaXNzdWVcbiAgICAgIGV4cGVjdChkaWFnbm9zZU91dHB1dCkudG9Db250YWluKCdkaWFnbm9zZS1pbXBvcnQtZmFpbCcpO1xuICAgICAgZXhwZWN0KGRpYWdub3NlT3V0cHV0KS50b0NvbnRhaW4oJ0RlbGV0aW9uUG9saWN5Jyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIENsZWFuIHVwOiBkZWxldGUgdGhlIHJvbGUgaWYgaXQgd2FzIHJldGFpbmVkXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmaXh0dXJlLmF3cy5pYW0uc2VuZChuZXcgRGVsZXRlUm9sZUNvbW1hbmQoeyBSb2xlTmFtZTogcm9sZU5hbWUgfSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFJvbGUgbWF5IGFscmVhZHkgYmUgZGVsZXRlZFxuICAgICAgfVxuICAgIH1cbiAgfSksXG4pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../../lib");
|
|
4
|
+
(0, lib_1.integTest)('cdk diagnose after deployment failure', (0, lib_1.withSpecificFixture)('diagnose-app', async (fixture) => {
|
|
5
|
+
// Deploy a stack that will fail (IAM Policy without PolicyDocument)
|
|
6
|
+
const deployOutput = await fixture.cdkDeploy('diagnose-deploy-fail', {
|
|
7
|
+
allowErrExit: true,
|
|
8
|
+
});
|
|
9
|
+
// The deploy should have failed.
|
|
10
|
+
// Missing property failure counts as "early validation failure".
|
|
11
|
+
expect(deployOutput).toContain('Early validation failed for change set');
|
|
12
|
+
expect(deployOutput).toContain('Required property [PolicyDocument] not found');
|
|
13
|
+
// Run cdk diagnose on the failed stack
|
|
14
|
+
const diagnoseOutput = await fixture.cdk(['--unstable=diagnose', 'diagnose', fixture.fullStackName('diagnose-deploy-fail')], { allowErrExit: true });
|
|
15
|
+
// The diagnose output should mention the stack and contain error information
|
|
16
|
+
expect(diagnoseOutput).toContain('diagnose-deploy-fail');
|
|
17
|
+
expect(diagnoseOutput).toContain('Early validation failed for change set');
|
|
18
|
+
expect(diagnoseOutput).toContain('Required property [PolicyDocument] not found');
|
|
19
|
+
}));
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRpYWdub3NlLWRlcGxveW1lbnQtZmFpbHVyZS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstZGlhZ25vc2UtZGVwbG95bWVudC1mYWlsdXJlLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUE4RDtBQUU5RCxJQUFBLGVBQVMsRUFDUCx1Q0FBdUMsRUFDdkMsSUFBQSx5QkFBbUIsRUFBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ3BELG9FQUFvRTtJQUNwRSxNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEVBQUU7UUFDbkUsWUFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQyxDQUFDO0lBRUgsaUNBQWlDO0lBQ2pDLGlFQUFpRTtJQUNqRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7SUFDekUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBRS9FLHVDQUF1QztJQUN2QyxNQUFNLGNBQWMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3RDLENBQUMscUJBQXFCLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxFQUNsRixFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FDdkIsQ0FBQztJQUVGLDZFQUE2RTtJQUM3RSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDekQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLENBQUMsOENBQThDLENBQUMsQ0FBQztBQUNuRixDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpYWdub3NlIGFmdGVyIGRlcGxveW1lbnQgZmFpbHVyZScsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ2RpYWdub3NlLWFwcCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRGVwbG95IGEgc3RhY2sgdGhhdCB3aWxsIGZhaWwgKElBTSBQb2xpY3kgd2l0aG91dCBQb2xpY3lEb2N1bWVudClcbiAgICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZGlhZ25vc2UtZGVwbG95LWZhaWwnLCB7XG4gICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBUaGUgZGVwbG95IHNob3VsZCBoYXZlIGZhaWxlZC5cbiAgICAvLyBNaXNzaW5nIHByb3BlcnR5IGZhaWx1cmUgY291bnRzIGFzIFwiZWFybHkgdmFsaWRhdGlvbiBmYWlsdXJlXCIuXG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCdFYXJseSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgY2hhbmdlIHNldCcpO1xuICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbignUmVxdWlyZWQgcHJvcGVydHkgW1BvbGljeURvY3VtZW50XSBub3QgZm91bmQnKTtcblxuICAgIC8vIFJ1biBjZGsgZGlhZ25vc2Ugb24gdGhlIGZhaWxlZCBzdGFja1xuICAgIGNvbnN0IGRpYWdub3NlT3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoXG4gICAgICBbJy0tdW5zdGFibGU9ZGlhZ25vc2UnLCAnZGlhZ25vc2UnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2RpYWdub3NlLWRlcGxveS1mYWlsJyldLFxuICAgICAgeyBhbGxvd0VyckV4aXQ6IHRydWUgfSxcbiAgICApO1xuXG4gICAgLy8gVGhlIGRpYWdub3NlIG91dHB1dCBzaG91bGQgbWVudGlvbiB0aGUgc3RhY2sgYW5kIGNvbnRhaW4gZXJyb3IgaW5mb3JtYXRpb25cbiAgICBleHBlY3QoZGlhZ25vc2VPdXRwdXQpLnRvQ29udGFpbignZGlhZ25vc2UtZGVwbG95LWZhaWwnKTtcbiAgICBleHBlY3QoZGlhZ25vc2VPdXRwdXQpLnRvQ29udGFpbignRWFybHkgdmFsaWRhdGlvbiBmYWlsZWQgZm9yIGNoYW5nZSBzZXQnKTtcbiAgICBleHBlY3QoZGlhZ25vc2VPdXRwdXQpLnRvQ29udGFpbignUmVxdWlyZWQgcHJvcGVydHkgW1BvbGljeURvY3VtZW50XSBub3QgZm91bmQnKTtcbiAgfSksXG4pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const node_crypto_1 = require("node:crypto");
|
|
4
|
+
const lib_1 = require("../../../lib");
|
|
5
|
+
(0, lib_1.integTest)('cdk diagnose after early validation failure', (0, lib_1.withSpecificFixture)('diagnose-app', async (fixture) => {
|
|
6
|
+
const bucketName = (0, node_crypto_1.randomUUID)();
|
|
7
|
+
// Deploy the first stack with a named bucket — should succeed
|
|
8
|
+
await fixture.cdkDeploy('diagnose-early-val-1', {
|
|
9
|
+
modEnv: { BUCKET_NAME: bucketName },
|
|
10
|
+
});
|
|
11
|
+
// Deploy the second stack with the same bucket name — should fail with early validation
|
|
12
|
+
const deployOutput = await fixture.cdkDeploy('diagnose-early-val-2', {
|
|
13
|
+
modEnv: { BUCKET_NAME: bucketName },
|
|
14
|
+
allowErrExit: true,
|
|
15
|
+
});
|
|
16
|
+
expect(deployOutput).toContain('already exists');
|
|
17
|
+
// Run cdk diagnose on the second stack
|
|
18
|
+
const diagnoseOutput = await fixture.cdk(['--unstable=diagnose', 'diagnose', fixture.fullStackName('diagnose-early-val-2')], {
|
|
19
|
+
modEnv: { BUCKET_NAME: bucketName },
|
|
20
|
+
allowErrExit: true,
|
|
21
|
+
});
|
|
22
|
+
// The diagnose output should mention the stack and the validation error
|
|
23
|
+
expect(diagnoseOutput).toContain('diagnose-early-val-2');
|
|
24
|
+
expect(diagnoseOutput).toContain('already exists');
|
|
25
|
+
}));
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRpYWdub3NlLWVhcmx5LXZhbGlkYXRpb24tZmFpbHVyZS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstZGlhZ25vc2UtZWFybHktdmFsaWRhdGlvbi1mYWlsdXJlLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUF5QztBQUN6QyxzQ0FBOEQ7QUFFOUQsSUFBQSxlQUFTLEVBQ1AsNkNBQTZDLEVBQzdDLElBQUEseUJBQW1CLEVBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNwRCxNQUFNLFVBQVUsR0FBRyxJQUFBLHdCQUFVLEdBQUUsQ0FBQztJQUVoQyw4REFBOEQ7SUFDOUQsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFO1FBQzlDLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUU7S0FDcEMsQ0FBQyxDQUFDO0lBRUgsd0ZBQXdGO0lBQ3hGLE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRTtRQUNuRSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFO1FBQ25DLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUVqRCx1Q0FBdUM7SUFDdkMsTUFBTSxjQUFjLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUN0QyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUMsRUFDbEY7UUFDRSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFO1FBQ25DLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQ0YsQ0FBQztJQUVGLHdFQUF3RTtJQUN4RSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDekQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpYWdub3NlIGFmdGVyIGVhcmx5IHZhbGlkYXRpb24gZmFpbHVyZScsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ2RpYWdub3NlLWFwcCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgYnVja2V0TmFtZSA9IHJhbmRvbVVVSUQoKTtcblxuICAgIC8vIERlcGxveSB0aGUgZmlyc3Qgc3RhY2sgd2l0aCBhIG5hbWVkIGJ1Y2tldCDigJQgc2hvdWxkIHN1Y2NlZWRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZGlhZ25vc2UtZWFybHktdmFsLTEnLCB7XG4gICAgICBtb2RFbnY6IHsgQlVDS0VUX05BTUU6IGJ1Y2tldE5hbWUgfSxcbiAgICB9KTtcblxuICAgIC8vIERlcGxveSB0aGUgc2Vjb25kIHN0YWNrIHdpdGggdGhlIHNhbWUgYnVja2V0IG5hbWUg4oCUIHNob3VsZCBmYWlsIHdpdGggZWFybHkgdmFsaWRhdGlvblxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdkaWFnbm9zZS1lYXJseS12YWwtMicsIHtcbiAgICAgIG1vZEVudjogeyBCVUNLRVRfTkFNRTogYnVja2V0TmFtZSB9LFxuICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCdhbHJlYWR5IGV4aXN0cycpO1xuXG4gICAgLy8gUnVuIGNkayBkaWFnbm9zZSBvbiB0aGUgc2Vjb25kIHN0YWNrXG4gICAgY29uc3QgZGlhZ25vc2VPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhcbiAgICAgIFsnLS11bnN0YWJsZT1kaWFnbm9zZScsICdkaWFnbm9zZScsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnZGlhZ25vc2UtZWFybHktdmFsLTInKV0sXG4gICAgICB7XG4gICAgICAgIG1vZEVudjogeyBCVUNLRVRfTkFNRTogYnVja2V0TmFtZSB9LFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBUaGUgZGlhZ25vc2Ugb3V0cHV0IHNob3VsZCBtZW50aW9uIHRoZSBzdGFjayBhbmQgdGhlIHZhbGlkYXRpb24gZXJyb3JcbiAgICBleHBlY3QoZGlhZ25vc2VPdXRwdXQpLnRvQ29udGFpbignZGlhZ25vc2UtZWFybHktdmFsLTInKTtcbiAgICBleHBlY3QoZGlhZ25vc2VPdXRwdXQpLnRvQ29udGFpbignYWxyZWFkeSBleGlzdHMnKTtcbiAgfSksXG4pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const lib_1 = require("../../../lib");
|
|
6
|
+
const regions_1 = require("../../../lib/regions");
|
|
7
|
+
jest.setTimeout(5 * 60 * 1000);
|
|
8
|
+
(0, lib_1.integTest)('hotswap deployment caches template and uses it for subsequent hotswaps', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
9
|
+
const stackName = 'cc-hotswap';
|
|
10
|
+
// GIVEN - initial full deploy
|
|
11
|
+
await fixture.cdkDeploy(stackName, {
|
|
12
|
+
captureStderr: false,
|
|
13
|
+
modEnv: {
|
|
14
|
+
DYNAMIC_CC_PROPERTY_VALUE: 'v1',
|
|
15
|
+
DYNAMIC_CC_PROPERTY_VALUE_2: 'v1',
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
// WHEN - first hotswap changes ALL resources, creates the cache
|
|
19
|
+
await fixture.cdkDeploy(stackName, {
|
|
20
|
+
options: ['--hotswap'],
|
|
21
|
+
captureStderr: false,
|
|
22
|
+
modEnv: {
|
|
23
|
+
DYNAMIC_CC_PROPERTY_VALUE: 'v2',
|
|
24
|
+
DYNAMIC_CC_PROPERTY_VALUE_2: 'v2',
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
const fullStackName = fixture.fullStackName(stackName);
|
|
28
|
+
const cacheFile = path.join(fixture.integTestDir, 'cdk.out', '.hotswap-cache', `${fullStackName}.json`);
|
|
29
|
+
expect(fs.existsSync(cacheFile)).toBe(true);
|
|
30
|
+
// THEN - second hotswap changes only the Agent (via DYNAMIC_CC_PROPERTY_VALUE_2).
|
|
31
|
+
// If the cache is used, the diff is against the cached template, only 1 resource should be hotswapped.
|
|
32
|
+
const deployOutput = await fixture.cdkDeploy(stackName, {
|
|
33
|
+
options: ['--hotswap'],
|
|
34
|
+
captureStderr: true,
|
|
35
|
+
onlyStderr: true,
|
|
36
|
+
modEnv: {
|
|
37
|
+
DYNAMIC_CC_PROPERTY_VALUE: 'v2', // unchanged from first hotswap
|
|
38
|
+
DYNAMIC_CC_PROPERTY_VALUE_2: 'v3',
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
// should only see one hotswapped message in output
|
|
42
|
+
const hotswapCount = (deployOutput.match(/hotswapped!/g) || []).length;
|
|
43
|
+
expect(hotswapCount).toBe(1);
|
|
44
|
+
}, { aws: { regions: regions_1.BEDROCK_AGENT_REGIONS } }));
|
|
45
|
+
(0, lib_1.integTest)('hotswap cache is invalidated after a full CloudFormation deployment', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
46
|
+
// GIVEN - deploy then hotswap to create cache
|
|
47
|
+
await fixture.cdkDeploy('lambda-hotswap', {
|
|
48
|
+
captureStderr: false,
|
|
49
|
+
modEnv: {
|
|
50
|
+
DYNAMIC_LAMBDA_PROPERTY_VALUE: 'v1',
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
await fixture.cdkDeploy('lambda-hotswap', {
|
|
54
|
+
options: ['--hotswap'],
|
|
55
|
+
captureStderr: false,
|
|
56
|
+
modEnv: {
|
|
57
|
+
DYNAMIC_LAMBDA_PROPERTY_VALUE: 'v2',
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
const stackName = fixture.fullStackName('lambda-hotswap');
|
|
61
|
+
const cacheFile = path.join(fixture.integTestDir, 'cdk.out', '.hotswap-cache', `${stackName}.json`);
|
|
62
|
+
expect(fs.existsSync(cacheFile)).toBe(true);
|
|
63
|
+
// WHEN - full CFN deploy
|
|
64
|
+
await fixture.cdkDeploy('lambda-hotswap', {
|
|
65
|
+
captureStderr: false,
|
|
66
|
+
modEnv: {
|
|
67
|
+
DYNAMIC_LAMBDA_PROPERTY_VALUE: 'v3',
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
// THEN - cache should be invalidated
|
|
71
|
+
expect(fs.existsSync(cacheFile)).toBe(false);
|
|
72
|
+
}));
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWhvdHN3YXAtZGVwbG95bWVudC1jYWNoZXMtdGVtcGxhdGUuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWhvdHN3YXAtZGVwbG95bWVudC1jYWNoZXMtdGVtcGxhdGUuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixzQ0FBNkQ7QUFDN0Qsa0RBQTZEO0FBRTdELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUUvQixJQUFBLGVBQVMsRUFDUCx3RUFBd0UsRUFDeEUsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDO0lBRS9CLDhCQUE4QjtJQUM5QixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO1FBQ2pDLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLE1BQU0sRUFBRTtZQUNOLHlCQUF5QixFQUFFLElBQUk7WUFDL0IsMkJBQTJCLEVBQUUsSUFBSTtTQUNsQztLQUNGLENBQUMsQ0FBQztJQUVILGdFQUFnRTtJQUNoRSxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO1FBQ2pDLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUN0QixhQUFhLEVBQUUsS0FBSztRQUNwQixNQUFNLEVBQUU7WUFDTix5QkFBeUIsRUFBRSxJQUFJO1lBQy9CLDJCQUEyQixFQUFFLElBQUk7U0FDbEM7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxhQUFhLE9BQU8sQ0FBQyxDQUFDO0lBQ3hHLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTVDLGtGQUFrRjtJQUNsRix1R0FBdUc7SUFDdkcsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtRQUN0RCxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUM7UUFDdEIsYUFBYSxFQUFFLElBQUk7UUFDbkIsVUFBVSxFQUFFLElBQUk7UUFDaEIsTUFBTSxFQUFFO1lBQ04seUJBQXlCLEVBQUUsSUFBSSxFQUFFLCtCQUErQjtZQUNoRSwyQkFBMkIsRUFBRSxJQUFJO1NBQ2xDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsbURBQW1EO0lBQ25ELE1BQU0sWUFBWSxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsK0JBQXFCLEVBQUUsRUFBRSxDQUFDLENBQ2hELENBQUM7QUFFRixJQUFBLGVBQVMsRUFDUCxxRUFBcUUsRUFDckUsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsOENBQThDO0lBQzlDLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN4QyxhQUFhLEVBQUUsS0FBSztRQUNwQixNQUFNLEVBQUU7WUFDTiw2QkFBNkIsRUFBRSxJQUFJO1NBQ3BDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFO1FBQ3hDLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUN0QixhQUFhLEVBQUUsS0FBSztRQUNwQixNQUFNLEVBQUU7WUFDTiw2QkFBNkIsRUFBRSxJQUFJO1NBQ3BDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxTQUFTLE9BQU8sQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTVDLHlCQUF5QjtJQUN6QixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUU7UUFDeEMsYUFBYSxFQUFFLEtBQUs7UUFDcEIsTUFBTSxFQUFFO1lBQ04sNkJBQTZCLEVBQUUsSUFBSTtTQUNwQztLQUNGLENBQUMsQ0FBQztJQUVILHFDQUFxQztJQUNyQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcbmltcG9ydCB7IEJFRFJPQ0tfQUdFTlRfUkVHSU9OUyB9IGZyb20gJy4uLy4uLy4uL2xpYi9yZWdpb25zJztcblxuamVzdC5zZXRUaW1lb3V0KDUgKiA2MCAqIDEwMDApO1xuXG5pbnRlZ1Rlc3QoXG4gICdob3Rzd2FwIGRlcGxveW1lbnQgY2FjaGVzIHRlbXBsYXRlIGFuZCB1c2VzIGl0IGZvciBzdWJzZXF1ZW50IGhvdHN3YXBzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gJ2NjLWhvdHN3YXAnO1xuXG4gICAgLy8gR0lWRU4gLSBpbml0aWFsIGZ1bGwgZGVwbG95XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koc3RhY2tOYW1lLCB7XG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0NDX1BST1BFUlRZX1ZBTFVFOiAndjEnLFxuICAgICAgICBEWU5BTUlDX0NDX1BST1BFUlRZX1ZBTFVFXzI6ICd2MScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTiAtIGZpcnN0IGhvdHN3YXAgY2hhbmdlcyBBTEwgcmVzb3VyY2VzLCBjcmVhdGVzIHRoZSBjYWNoZVxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KHN0YWNrTmFtZSwge1xuICAgICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUU6ICd2MicsXG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUVfMjogJ3YyJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBmdWxsU3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZSk7XG4gICAgY29uc3QgY2FjaGVGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLm91dCcsICcuaG90c3dhcC1jYWNoZScsIGAke2Z1bGxTdGFja05hbWV9Lmpzb25gKTtcbiAgICBleHBlY3QoZnMuZXhpc3RzU3luYyhjYWNoZUZpbGUpKS50b0JlKHRydWUpO1xuXG4gICAgLy8gVEhFTiAtIHNlY29uZCBob3Rzd2FwIGNoYW5nZXMgb25seSB0aGUgQWdlbnQgKHZpYSBEWU5BTUlDX0NDX1BST1BFUlRZX1ZBTFVFXzIpLlxuICAgIC8vIElmIHRoZSBjYWNoZSBpcyB1c2VkLCB0aGUgZGlmZiBpcyBhZ2FpbnN0IHRoZSBjYWNoZWQgdGVtcGxhdGUsIG9ubHkgMSByZXNvdXJjZSBzaG91bGQgYmUgaG90c3dhcHBlZC5cbiAgICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0NDX1BST1BFUlRZX1ZBTFVFOiAndjInLCAvLyB1bmNoYW5nZWQgZnJvbSBmaXJzdCBob3Rzd2FwXG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUVfMjogJ3YzJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBzaG91bGQgb25seSBzZWUgb25lIGhvdHN3YXBwZWQgbWVzc2FnZSBpbiBvdXRwdXRcbiAgICBjb25zdCBob3Rzd2FwQ291bnQgPSAoZGVwbG95T3V0cHV0Lm1hdGNoKC9ob3Rzd2FwcGVkIS9nKSB8fCBbXSkubGVuZ3RoO1xuICAgIGV4cGVjdChob3Rzd2FwQ291bnQpLnRvQmUoMSk7XG4gIH0sIHsgYXdzOiB7IHJlZ2lvbnM6IEJFRFJPQ0tfQUdFTlRfUkVHSU9OUyB9IH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnaG90c3dhcCBjYWNoZSBpcyBpbnZhbGlkYXRlZCBhZnRlciBhIGZ1bGwgQ2xvdWRGb3JtYXRpb24gZGVwbG95bWVudCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEdJVkVOIC0gZGVwbG95IHRoZW4gaG90c3dhcCB0byBjcmVhdGUgY2FjaGVcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbGFtYmRhLWhvdHN3YXAnLCB7XG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0xBTUJEQV9QUk9QRVJUWV9WQUxVRTogJ3YxJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbGFtYmRhLWhvdHN3YXAnLCB7XG4gICAgICBvcHRpb25zOiBbJy0taG90c3dhcCddLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgRFlOQU1JQ19MQU1CREFfUFJPUEVSVFlfVkFMVUU6ICd2MicsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdsYW1iZGEtaG90c3dhcCcpO1xuICAgIGNvbnN0IGNhY2hlRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5vdXQnLCAnLmhvdHN3YXAtY2FjaGUnLCBgJHtzdGFja05hbWV9Lmpzb25gKTtcbiAgICBleHBlY3QoZnMuZXhpc3RzU3luYyhjYWNoZUZpbGUpKS50b0JlKHRydWUpO1xuXG4gICAgLy8gV0hFTiAtIGZ1bGwgQ0ZOIGRlcGxveVxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEtaG90c3dhcCcsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfTEFNQkRBX1BST1BFUlRZX1ZBTFVFOiAndjMnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU4gLSBjYWNoZSBzaG91bGQgYmUgaW52YWxpZGF0ZWRcbiAgICBleHBlY3QoZnMuZXhpc3RzU3luYyhjYWNoZUZpbGUpKS50b0JlKGZhbHNlKTtcbiAgfSksXG4pO1xuIl19
|
|
@@ -2,6 +2,7 @@
|
|
|
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");
|
|
5
6
|
jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
|
|
6
7
|
(0, lib_1.integTest)('hotswap deployment supports CloudControl-based resources with attribute resolution', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
7
8
|
// GIVEN
|
|
@@ -37,5 +38,5 @@ jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-c
|
|
|
37
38
|
expect(queueUrl).toBeDefined();
|
|
38
39
|
expect(agentName).toBeDefined();
|
|
39
40
|
expect(ruleName).toBeDefined();
|
|
40
|
-
}));
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
}, { aws: { regions: regions_1.BEDROCK_AGENT_REGIONS } }));
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWhvdHN3YXAtZGVwbG95bWVudC1zdXBwb3J0cy1jbG91ZGNvbnRyb2wtYmFzZWQtcmVzb3VyY2VzLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1ob3Rzd2FwLWRlcGxveW1lbnQtc3VwcG9ydHMtY2xvdWRjb250cm9sLWJhc2VkLXJlc291cmNlcy5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwRUFBdUU7QUFDdkUsc0NBQTZEO0FBQzdELGtEQUE2RDtBQUU3RCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyx5RUFBeUU7QUFFM0csSUFBQSxlQUFTLEVBQ1Asb0ZBQW9GLEVBQ3BGLElBQUEsd0JBQWtCLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25DLFFBQVE7SUFDUixNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUM7SUFDL0IsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtRQUNqQyxhQUFhLEVBQUUsS0FBSztRQUNwQixNQUFNLEVBQUU7WUFDTix5QkFBeUIsRUFBRSxnQkFBZ0I7U0FDNUM7S0FDRixDQUFDLENBQUM7SUFFSCxPQUFPO0lBQ1AsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtRQUN0RCxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUM7UUFDdEIsYUFBYSxFQUFFLElBQUk7UUFDbkIsVUFBVSxFQUFFLElBQUk7UUFDaEIsTUFBTSxFQUFFO1lBQ04seUJBQXlCLEVBQUUsV0FBVztTQUN2QztLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUNwRCxJQUFJLDZDQUFxQixDQUFDO1FBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztLQUM1QyxDQUFDLENBQ0gsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FBQyxFQUFFLFdBQVcsQ0FBQztJQUM5RyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxXQUFXLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDaEgsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDLEVBQUUsV0FBVyxDQUFDO0lBRTlHLE9BQU87SUFFUCwyRkFBMkY7SUFDM0Ysb0JBQW9CO0lBQ3BCLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDcEUsMEJBQTBCO0lBQzFCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUMseURBQXlEO0lBQ3pELE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvQixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSwrQkFBcUIsRUFBRSxFQUFFLENBQUMsQ0FDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaWJlU3RhY2tzQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5pbXBvcnQgeyBCRURST0NLX0FHRU5UX1JFR0lPTlMgfSBmcm9tICcuLi8uLi8uLi9saWIvcmVnaW9ucyc7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApOyAvLyBJbmNsdWRlcyB0aGUgdGltZSB0byBhY3F1aXJlIGxvY2tzLCB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lXG5cbmludGVnVGVzdChcbiAgJ2hvdHN3YXAgZGVwbG95bWVudCBzdXBwb3J0cyBDbG91ZENvbnRyb2wtYmFzZWQgcmVzb3VyY2VzIHdpdGggYXR0cmlidXRlIHJlc29sdXRpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrTmFtZSA9ICdjYy1ob3Rzd2FwJztcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUU6ICdvcmlnaW5hbCB2YWx1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KHN0YWNrTmFtZSwge1xuICAgICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IHRydWUsXG4gICAgICBvbmx5U3RkZXJyOiB0cnVlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUU6ICduZXcgdmFsdWUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHF1ZXVlVXJsID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZCgob3V0cHV0KSA9PiBvdXRwdXQuT3V0cHV0S2V5ID09PSAnUXVldWVVcmwnKT8uT3V0cHV0VmFsdWU7XG4gICAgY29uc3QgYWdlbnROYW1lID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZCgob3V0cHV0KSA9PiBvdXRwdXQuT3V0cHV0S2V5ID09PSAnQWdlbnROYW1lJyk/Lk91dHB1dFZhbHVlO1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZCgob3V0cHV0KSA9PiBvdXRwdXQuT3V0cHV0S2V5ID09PSAnUnVsZU5hbWUnKT8uT3V0cHV0VmFsdWU7XG5cbiAgICAvLyBUSEVOXG5cbiAgICAvLyBUaGUgZGVwbG95bWVudCBzaG91bGQgbm90IHRyaWdnZXIgYSBmdWxsIGRlcGxveW1lbnQsIHRodXMgdGhlIHN0YWNrJ3Mgc3RhdHVzIG11c3QgcmVtYWluXG4gICAgLy8gXCJDUkVBVEVfQ09NUExFVEVcIlxuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG4gICAgLy8gVmVyaWZ5IGhvdHN3YXAgd2FzIHVzZWRcbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b01hdGNoKC9ob3Rzd2FwcGVkIS8pO1xuICAgIC8vIFZlcmlmeSBhbGwgdGhyZWUgQ0NBUEktYmFzZWQgcmVzb3VyY2VzIHdlcmUgaG90c3dhcHBlZFxuICAgIGV4cGVjdChxdWV1ZVVybCkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QoYWdlbnROYW1lKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChydWxlTmFtZSkudG9CZURlZmluZWQoKTtcbiAgfSwgeyBhd3M6IHsgcmVnaW9uczogQkVEUk9DS19BR0VOVF9SRUdJT05TIH0gfSksXG4pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|