diff --git a/clouddriver-ecs/src/main/java/com/netflix/spinnaker/clouddriver/ecs/provider/agent/TaskHealthCachingAgent.java b/clouddriver-ecs/src/main/java/com/netflix/spinnaker/clouddriver/ecs/provider/agent/TaskHealthCachingAgent.java index 4dbb78822c7..554ca57fb6a 100644 --- a/clouddriver-ecs/src/main/java/com/netflix/spinnaker/clouddriver/ecs/provider/agent/TaskHealthCachingAgent.java +++ b/clouddriver-ecs/src/main/java/com/netflix/spinnaker/clouddriver/ecs/provider/agent/TaskHealthCachingAgent.java @@ -241,6 +241,7 @@ private TaskHealth inferHealthNetworkBindedContainer( for (LoadBalancer loadBalancer : loadBalancers) { if (loadBalancer.getTargetGroupArn() == null + || containerInstance == null || containerInstance.getEc2InstanceId() == null) { continue; } diff --git a/clouddriver-ecs/src/test/groovy/com/netflix/spinnaker/clouddriver/ecs/provider/agent/TaskHealthCachingAgentSpec.groovy b/clouddriver-ecs/src/test/groovy/com/netflix/spinnaker/clouddriver/ecs/provider/agent/TaskHealthCachingAgentSpec.groovy index d353bd1a787..16184867c84 100644 --- a/clouddriver-ecs/src/test/groovy/com/netflix/spinnaker/clouddriver/ecs/provider/agent/TaskHealthCachingAgentSpec.groovy +++ b/clouddriver-ecs/src/test/groovy/com/netflix/spinnaker/clouddriver/ecs/provider/agent/TaskHealthCachingAgentSpec.groovy @@ -169,6 +169,29 @@ class TaskHealthCachingAgentSpec extends Specification { taskHealth.getTaskId() == CommonCachingAgent.TASK_ID_1 } + def 'should skip tasks with a non-cached container instance'() { + given: + ObjectMapper mapper = new ObjectMapper() + Map containerMap = mapper.convertValue(new Container().withNetworkBindings(new NetworkBinding().withHostPort(1337)), Map.class) + def taskAttributes = [ + taskId : CommonCachingAgent.TASK_ID_1, + taskArn : CommonCachingAgent.TASK_ARN_1, + startedAt : new Date().getTime(), + containerInstanceArn: CommonCachingAgent.CONTAINER_INSTANCE_ARN_2, + group : 'service:' + CommonCachingAgent.SERVICE_NAME_1, + containers : Collections.singletonList(containerMap) + ] + def taskKey = Keys.getTaskKey(CommonCachingAgent.ACCOUNT, CommonCachingAgent.REGION, CommonCachingAgent.TASK_ID_1) + def taskCacheData = new DefaultCacheData(taskKey, taskAttributes, Collections.emptyMap()) + providerCache.getAll(TASKS.toString(), _) >> Collections.singletonList(taskCacheData) + + when: + def taskHealthList = agent.getItems(ecs, providerCache) + + then: + taskHealthList == [] + } + def 'should get a list of task health for aws-vpc mode'() { given: ObjectMapper mapper = new ObjectMapper()