diff --git a/packages/@aws-cdk/cloudformation-diff/lib/diff/types.ts b/packages/@aws-cdk/cloudformation-diff/lib/diff/types.ts index 50a325095..e304d53ea 100644 --- a/packages/@aws-cdk/cloudformation-diff/lib/diff/types.ts +++ b/packages/@aws-cdk/cloudformation-diff/lib/diff/types.ts @@ -722,7 +722,7 @@ export class ResourceDifference implements IDifference { return ResourceImpact.WILL_CREATE; } if (this.resourceTypes.newType === undefined) { - return this.oldValue!.DeletionPolicy === 'Retain' + return this.oldValue!.DeletionPolicy === 'Retain' || this.oldValue!.DeletionPolicy === 'RetainExceptOnCreate' ? ResourceImpact.WILL_ORPHAN : ResourceImpact.WILL_DESTROY; } diff --git a/packages/@aws-cdk/cloudformation-diff/test/diff-template.test.ts b/packages/@aws-cdk/cloudformation-diff/test/diff-template.test.ts index 78c68d474..4ab9e7563 100644 --- a/packages/@aws-cdk/cloudformation-diff/test/diff-template.test.ts +++ b/packages/@aws-cdk/cloudformation-diff/test/diff-template.test.ts @@ -70,13 +70,13 @@ test('when a resource is deleted (no DeletionPolicy)', () => { expect(difference?.changeImpact).toBe(ResourceImpact.WILL_DESTROY); }); -test('when a resource is deleted (DeletionPolicy=Retain)', () => { +test.each(['Retain', 'RetainExceptOnCreate'])('when a resource is deleted (DeletionPolicy=%s)', (deletionPolicy) => { const currentTemplate = { Resources: { BucketResource: { Type: 'AWS::S3::Bucket' }, BucketPolicyResource: { Type: 'AWS::S3::BucketPolicy', - DeletionPolicy: 'Retain', + DeletionPolicy: deletionPolicy, Properties: { PolicyDocument: POLICY_DOCUMENT, Bucket: { Ref: 'BucketResource' },