diff --git a/azure/aci.go b/azure/aci.go index 9d566e2d5..90c9c3cca 100644 --- a/azure/aci.go +++ b/azure/aci.go @@ -87,10 +87,6 @@ func createOrUpdateACIContainers(ctx context.Context, aciContext store.AciContex return err } - containerGroup, err := future.Result(containerGroupsClient) - if err != nil { - return err - } for _, c := range *groupDefinition.Containers { w.Event(progress.Event{ ID: *c.Name, @@ -99,30 +95,6 @@ func createOrUpdateACIContainers(ctx context.Context, aciContext store.AciContex }) } - if len(*containerGroup.Containers) > 1 { - var commands []string - for _, container := range *containerGroup.Containers { - commands = append(commands, fmt.Sprintf("echo 127.0.0.1 %s >> /etc/hosts", *container.Name)) - } - commands = append(commands, "exit") - - containers := *containerGroup.Containers - container := containers[0] - response, err := execACIContainer(ctx, aciContext, "/bin/sh", *containerGroup.Name, *container.Name) - if err != nil { - return err - } - - if err = execCommands( - ctx, - *response.WebSocketURI, - *response.Password, - commands, - ); err != nil { - return err - } - } - return err } diff --git a/azure/convert/convert.go b/azure/convert/convert.go index 8bdbf2d0f..0802fa83a 100644 --- a/azure/convert/convert.go +++ b/azure/convert/convert.go @@ -17,6 +17,10 @@ import ( ) const ( + // ComposeDnsSidecarName name of the dns sidecar container + ComposeDnsSidecarName = "aci--dns--sidecar" + + azureFileDriverName = "azure_file" volumeDriveroptsShareNameKey = "share_name" volumeDriveroptsAccountNameKey = "storage_account_name" @@ -94,10 +98,44 @@ func ToContainerGroup(aciContext store.AciContext, p compose.Project) (container containers = append(containers, containerDefinition) } + if len(containers) > 1 { + dnsSideCar := getDnsSidecar(containers) + containers = append(containers, dnsSideCar) + } groupDefinition.ContainerGroupProperties.Containers = &containers + return groupDefinition, nil } +func getDnsSidecar(containers []containerinstance.Container) containerinstance.Container { + var commands []string + for _, container := range containers { + commands = append(commands, fmt.Sprintf("echo 127.0.0.1 %s >> /etc/hosts", *container.Name)) + } + // ACI restart policy is currently at container group level, cannot let the sidecar terminate quietly once /etc/hosts has been edited + // Pricing is done at the container group level so letting the sidecar container "sleep" does not impact the proce for the whole group + commands = append(commands, "sleep infinity") + alpineCmd := []string{"sh", "-c", strings.Join(commands, ";")} + dnsSideCar := containerinstance.Container{ + Name: to.StringPtr(ComposeDnsSidecarName), + ContainerProperties: &containerinstance.ContainerProperties{ + Image: to.StringPtr("alpine:3.12.0"), + Command: &alpineCmd, + Resources: &containerinstance.ResourceRequirements{ + Limits: &containerinstance.ResourceLimits{ + MemoryInGB: to.Float64Ptr(1), + CPU: to.Float64Ptr(1), + }, + Requests: &containerinstance.ResourceRequests{ + MemoryInGB: to.Float64Ptr(1), + CPU: to.Float64Ptr(1), + }, + }, + }, + } + return dnsSideCar +} + type projectAciHelper compose.Project func (p projectAciHelper) getAciSecretVolumes() ([]containerinstance.Volume, error) {