diff --git a/clouddriver-ecs/src/main/java/com/netflix/spinnaker/clouddriver/ecs/deploy/validators/EcsCreateServerGroupDescriptionValidator.java b/clouddriver-ecs/src/main/java/com/netflix/spinnaker/clouddriver/ecs/deploy/validators/EcsCreateServerGroupDescriptionValidator.java index 4375f44e196..ec65733ab90 100644 --- a/clouddriver-ecs/src/main/java/com/netflix/spinnaker/clouddriver/ecs/deploy/validators/EcsCreateServerGroupDescriptionValidator.java +++ b/clouddriver-ecs/src/main/java/com/netflix/spinnaker/clouddriver/ecs/deploy/validators/EcsCreateServerGroupDescriptionValidator.java @@ -122,6 +122,18 @@ public void validate(List priorDescriptions, Object description, Errors errors) } else { rejectValue(errors, "reservedMemory", "not.nullable"); } + } else { + // Verify load balanced services w/ an artifact specify which container to load balance on + boolean hasTargetGroup = + createServerGroupDescription.getTargetGroup() != null + && !createServerGroupDescription.getTargetGroup().isEmpty(); + boolean hasLoadBalancedContainer = + createServerGroupDescription.getLoadBalancedContainer() != null + && !createServerGroupDescription.getLoadBalancedContainer().isEmpty(); + + if (hasTargetGroup && !hasLoadBalancedContainer) { + rejectValue(errors, "loadBalancedContainer", "not.nullable"); + } } if (createServerGroupDescription.getContainerPort() != null) { diff --git a/clouddriver-ecs/src/test/groovy/com/netflix/spinnaker/clouddriver/ecs/deploy/validators/EcsCreateServergroupDescriptionValidatorSpec.groovy b/clouddriver-ecs/src/test/groovy/com/netflix/spinnaker/clouddriver/ecs/deploy/validators/EcsCreateServergroupDescriptionValidatorSpec.groovy index 4f3dc373838..47765f90810 100644 --- a/clouddriver-ecs/src/test/groovy/com/netflix/spinnaker/clouddriver/ecs/deploy/validators/EcsCreateServergroupDescriptionValidatorSpec.groovy +++ b/clouddriver-ecs/src/test/groovy/com/netflix/spinnaker/clouddriver/ecs/deploy/validators/EcsCreateServergroupDescriptionValidatorSpec.groovy @@ -119,6 +119,19 @@ class EcsCreateServergroupDescriptionValidatorSpec extends AbstractValidatorSpec 0 * errors.rejectValue(_, _) } + void '(with artifact) should fail when load balancer specified but loadBalanced container missing'() { + given: + def description = getDescription() + description.useTaskDefinitionArtifact = true + def errors = Mock(Errors) + + when: + validator.validate([], description, errors) + + then: + 1 * errors.rejectValue('loadBalancedContainer', "${getDescriptionName()}.loadBalancedContainer.not.nullable") + } + @Override AbstractECSDescription getNulledDescription() { def description = (CreateServerGroupDescription) getDescription()