From 7200a2ad7d4c434454eab5a7ce058ee9d14eaff0 Mon Sep 17 00:00:00 2001 From: Don Buchanan Date: Mon, 4 Feb 2019 17:00:34 +1100 Subject: [PATCH] fix(aws-ecs): correctly sets MinimumHealthyPercentage to 0 Zero is a valid value for MinimumHealthyPercentage and therefore should not be replaced with the default value. BaseService now explicitly checks if minimumHealthyPercent is null before setting default value: fixes #1660 --- .../@aws-cdk/aws-ecs/lib/base/base-service.ts | 2 +- .../test/fargate/test.fargate-service.ts | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-ecs/lib/base/base-service.ts b/packages/@aws-cdk/aws-ecs/lib/base/base-service.ts index 8784473fb202d..174e082770c5a 100644 --- a/packages/@aws-cdk/aws-ecs/lib/base/base-service.ts +++ b/packages/@aws-cdk/aws-ecs/lib/base/base-service.ts @@ -104,7 +104,7 @@ export abstract class BaseService extends cdk.Construct loadBalancers: new cdk.Token(() => this.loadBalancers), deploymentConfiguration: { maximumPercent: props.maximumPercent || 200, - minimumHealthyPercent: props.minimumHealthyPercent || 50 + minimumHealthyPercent: props.minimumHealthyPercent === undefined ? 50 : props.minimumHealthyPercent }, healthCheckGracePeriodSeconds: props.healthCheckGracePeriodSeconds, /* role: never specified, supplanted by Service Linked Role */ diff --git a/packages/@aws-cdk/aws-ecs/test/fargate/test.fargate-service.ts b/packages/@aws-cdk/aws-ecs/test/fargate/test.fargate-service.ts index 3eb953eb968b9..4bb53cc72c538 100644 --- a/packages/@aws-cdk/aws-ecs/test/fargate/test.fargate-service.ts +++ b/packages/@aws-cdk/aws-ecs/test/fargate/test.fargate-service.ts @@ -129,6 +129,33 @@ export = { test.done(); }, + + "allows specifying 0 for minimumHealthyPercent"(test: Test) { + // GIVEN + const stack = new cdk.Stack(); + const vpc = new ec2.VpcNetwork(stack, 'MyVpc', {}); + const cluster = new ecs.Cluster(stack, 'EcsCluster', { vpc }); + const taskDefinition = new ecs.FargateTaskDefinition(stack, 'FargateTaskDef'); + + taskDefinition.addContainer("web", { + image: ecs.ContainerImage.fromDockerHub("amazon/amazon-ecs-sample"), + }); + + new ecs.FargateService(stack, "FargateService", { + cluster, + taskDefinition, + minimumHealthyPercent: 0, + }); + + // THEN + expect(stack).to(haveResourceLike("AWS::ECS::Service", { + DeploymentConfiguration: { + MinimumHealthyPercent: 0, + } + })); + + test.done(); + }, }, "When setting up a health check": {