From 010c4be6b218ae43e2ef5afc449467b824389ca0 Mon Sep 17 00:00:00 2001
From: Guillaume Tardif <guillaume.tardif@gmail.com>
Date: Tue, 12 Jan 2021 15:43:38 +0100
Subject: [PATCH] Support container_name in ACI and add network alias in dns
 sidecar. (Note container_name is used in several MSFT examples)

Signed-off-by: Guillaume Tardif <guillaume.tardif@gmail.com>
---
 aci/convert/convert.go                        | 20 +++++++++++++------
 .../fixtures/volume-test/docker-compose.yml   |  3 ++-
 tests/composefiles/demo_multi_port.yaml       |  3 ++-
 3 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/aci/convert/convert.go b/aci/convert/convert.go
index a3f72b58f..9dbcee3f9 100644
--- a/aci/convert/convert.go
+++ b/aci/convert/convert.go
@@ -120,8 +120,8 @@ func ToContainerGroup(ctx context.Context, aciContext store.AciContext, p types.
 			DNSNameLabel: dnsLabelName,
 		}
 	}
-	if len(ctnrs) > 1 {
-		dnsSideCar := getDNSSidecar(ctnrs)
+	if len(project.Services) > 1 {
+		dnsSideCar := getDNSSidecar(project.Services)
 		ctnrs = append(ctnrs, dnsSideCar)
 	}
 	groupDefinition.ContainerGroupProperties.Containers = &ctnrs
@@ -137,10 +137,13 @@ func durationToSeconds(d *types.Duration) *int32 {
 	return &v
 }
 
-func getDNSSidecar(containers []containerinstance.Container) containerinstance.Container {
+func getDNSSidecar(services types.Services) containerinstance.Container {
 	names := []string{"/hosts"}
-	for _, container := range containers {
-		names = append(names, *container.Name)
+	for _, service := range services {
+		names = append(names, service.Name)
+		if service.ContainerName != "" {
+			names = append(names, service.ContainerName)
+		}
 	}
 	dnsSideCar := containerinstance.Container{
 		Name: to.StringPtr(ComposeDNSSidecarName),
@@ -182,8 +185,13 @@ func (s serviceConfigAciHelper) getAciContainer() (containerinstance.Container,
 		return containerinstance.Container{}, err
 	}
 
+	containerName := s.Name
+	if s.ContainerName != "" {
+		containerName = s.ContainerName
+	}
+
 	return containerinstance.Container{
-		Name: to.StringPtr(s.Name),
+		Name: to.StringPtr(containerName),
 		ContainerProperties: &containerinstance.ContainerProperties{
 			Image:                to.StringPtr(s.Image),
 			Command:              to.StringSlicePtr(s.Command),
diff --git a/tests/compose-e2e/fixtures/volume-test/docker-compose.yml b/tests/compose-e2e/fixtures/volume-test/docker-compose.yml
index 57ec42fd0..c9959d745 100644
--- a/tests/compose-e2e/fixtures/volume-test/docker-compose.yml
+++ b/tests/compose-e2e/fixtures/volume-test/docker-compose.yml
@@ -15,4 +15,5 @@ services:
       - 9090:80
 
 volumes:
-  staticVol:
\ No newline at end of file
+  staticVol:
+    name: myVolume
\ No newline at end of file
diff --git a/tests/composefiles/demo_multi_port.yaml b/tests/composefiles/demo_multi_port.yaml
index 2e3414e11..5fff56c71 100644
--- a/tests/composefiles/demo_multi_port.yaml
+++ b/tests/composefiles/demo_multi_port.yaml
@@ -3,7 +3,8 @@ services:
     build: aci-demo/db
     image: gtardif/sentences-db
 
-  words:
+  service1:
+    container_name: words
     build: aci-demo/words
     image: gtardif/sentences-api
     ports: