in ecs-cli/modules/cli/compose/entity/entity_helper.go [326:375]
func getContainersForTasksWithTaskNetworking(entity ProjectEntity, ecsTasks []*ecs.Task) ([]composecontainer.Container, []*ecs.Task, error) {
var tasksWithInstanceIPs []*ecs.Task
info := []composecontainer.Container{}
tdStore := NewTaskDefinitionStore()
if len(ecsTasks) == 0 {
return info, ecsTasks, nil
}
// For Fargate tasks
taskENIPublicIPs, err := getPublicIPsFromENIs(entity, ecsTasks)
if err != nil {
return nil, nil, err
}
for _, ecsTask := range ecsTasks {
taskDef, err := tdStore.getTaskDefintion(entity, aws.StringValue(ecsTask.TaskDefinitionArn))
if err != nil {
return nil, nil, err
}
if aws.StringValue(taskDef.NetworkMode) == ecs.NetworkModeAwsvpc {
for _, container := range ecsTask.Containers {
containerDef, err := getContainerDef(taskDef, aws.StringValue(container.Name))
if err != nil {
return nil, nil, err
}
bindings := convertToNetworkBindings(containerDef)
ipAddress := ""
status := aws.StringValue(ecsTask.LastStatus)
if status == "PENDING" || status == "PROVISIONING" {
ipAddress = "(PENDING)"
}
// Get IPs from ENIs if they have been provisioned and the task is still running
if len(container.NetworkInterfaces) > 0 && status != "STOPPED" {
ipAddress = aws.StringValue(container.NetworkInterfaces[0].PrivateIpv4Address)
if aws.StringValue(ecsTask.LaunchType) == config.LaunchTypeFargate {
if ip := taskENIPublicIPs[aws.StringValue(ecsTask.TaskArn)]; ip != "" {
ipAddress = ip
}
}
}
info = append(info, composecontainer.NewContainer(ecsTask, ipAddress, container, bindings))
}
} else {
tasksWithInstanceIPs = append(tasksWithInstanceIPs, ecsTask)
}
}
return info, tasksWithInstanceIPs, nil
}