From 1bf4bc9d4614efa819d9fcc832d8c86a9844a57b Mon Sep 17 00:00:00 2001
From: Nicolas De Loof <nicolas.deloof@gmail.com>
Date: Tue, 2 Jun 2020 14:17:48 +0200
Subject: [PATCH] Use distinct family per service definition

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
---
 ecs/pkg/amazon/convert.go                              |  2 +-
 ecs/pkg/amazon/list.go                                 | 10 +++++++---
 ecs/pkg/amazon/sdk.go                                  |  6 +++---
 .../simple/simple-cloudformation-conversion.golden     |  2 +-
 ...ple-cloudformation-with-overrides-conversion.golden |  2 +-
 5 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/ecs/pkg/amazon/convert.go b/ecs/pkg/amazon/convert.go
index 5d74df29e..8f43d62f9 100644
--- a/ecs/pkg/amazon/convert.go
+++ b/ecs/pkg/amazon/convert.go
@@ -77,7 +77,7 @@ func Convert(project *compose.Project, service types.ServiceConfig) (*ecs.TaskDe
 			},
 		},
 		Cpu:                     cpu,
-		Family:                  project.Name,
+		Family:                  fmt.Sprintf("%s-%s", project.Name, service.Name),
 		IpcMode:                 service.Ipc,
 		Memory:                  mem,
 		NetworkMode:             ecsapi.NetworkModeAwsvpc, // FIXME could be set by service.NetworkMode, Fargate only supports network mode ‘awsvpc’.
diff --git a/ecs/pkg/amazon/list.go b/ecs/pkg/amazon/list.go
index 4b16f98c8..98903f402 100644
--- a/ecs/pkg/amazon/list.go
+++ b/ecs/pkg/amazon/list.go
@@ -20,9 +20,13 @@ func (c *client) ComposePs(ctx context.Context, project *compose.Project) error
 	fmt.Fprintf(w, "Name\tState\tPorts\n")
 	defer w.Flush()
 
-	arns, err := c.api.ListTasks(ctx, cluster, project.Name)
-	if err != nil {
-		return err
+	arns := []string{}
+	for _, service := range project.Services {
+		tasks, err := c.api.ListTasks(ctx, cluster, service.Name)
+		if err != nil {
+			return err
+		}
+		arns = append(arns, tasks...)
 	}
 	if len(arns) == 0 {
 		return nil
diff --git a/ecs/pkg/amazon/sdk.go b/ecs/pkg/amazon/sdk.go
index 1580901fc..6bc85381b 100644
--- a/ecs/pkg/amazon/sdk.go
+++ b/ecs/pkg/amazon/sdk.go
@@ -341,10 +341,10 @@ func (s sdk) GetLogs(ctx context.Context, name string, consumer LogConsumer) err
 	}
 }
 
-func (s sdk) ListTasks(ctx context.Context, cluster string, name string) ([]string, error) {
+func (s sdk) ListTasks(ctx context.Context, cluster string, service string) ([]string, error) {
 	tasks, err := s.ECS.ListTasksWithContext(ctx, &ecs.ListTasksInput{
-		Cluster: aws.String(cluster),
-		Family:  aws.String(name),
+		Cluster:     aws.String(cluster),
+		ServiceName: aws.String(service),
 	})
 	if err != nil {
 		return nil, err
diff --git a/ecs/pkg/amazon/testdata/simple/simple-cloudformation-conversion.golden b/ecs/pkg/amazon/testdata/simple/simple-cloudformation-conversion.golden
index 613aba14b..c1233d0a3 100644
--- a/ecs/pkg/amazon/testdata/simple/simple-cloudformation-conversion.golden
+++ b/ecs/pkg/amazon/testdata/simple/simple-cloudformation-conversion.golden
@@ -181,7 +181,7 @@
         "ExecutionRoleArn": {
           "Ref": "SimpleTaskExecutionRole"
         },
-        "Family": "TestSimpleConvert",
+        "Family": "TestSimpleConvert-simple",
         "Memory": "512",
         "NetworkMode": "awsvpc",
         "RequiresCompatibilities": [
diff --git a/ecs/pkg/amazon/testdata/simple/simple-cloudformation-with-overrides-conversion.golden b/ecs/pkg/amazon/testdata/simple/simple-cloudformation-with-overrides-conversion.golden
index 0e506fce8..ca03c1176 100644
--- a/ecs/pkg/amazon/testdata/simple/simple-cloudformation-with-overrides-conversion.golden
+++ b/ecs/pkg/amazon/testdata/simple/simple-cloudformation-with-overrides-conversion.golden
@@ -181,7 +181,7 @@
         "ExecutionRoleArn": {
           "Ref": "SimpleTaskExecutionRole"
         },
-        "Family": "TestSimpleWithOverrides",
+        "Family": "TestSimpleWithOverrides-simple",
         "Memory": "512",
         "NetworkMode": "awsvpc",
         "RequiresCompatibilities": [