From 7d4222a725f592dfffac6cce79faf699a97f6fd6 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Tue, 2 Jun 2020 13:54:33 +0200 Subject: [PATCH] Implement depends_on using CloudFormation Signed-off-by: Nicolas De Loof --- ecs/pkg/amazon/check.go | 1 - ecs/pkg/amazon/cloudformation.go | 18 ++++++++++++++---- ecs/pkg/amazon/compatibility.go | 8 -------- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/ecs/pkg/amazon/check.go b/ecs/pkg/amazon/check.go index d249afe4a..169794c76 100644 --- a/ecs/pkg/amazon/check.go +++ b/ecs/pkg/amazon/check.go @@ -11,7 +11,6 @@ type Warnings []string type CompatibilityChecker interface { CheckService(service *types.ServiceConfig) CheckCapAdd(service *types.ServiceConfig) - CheckDependsOn(service *types.ServiceConfig) CheckDNS(service *types.ServiceConfig) CheckDNSOpts(service *types.ServiceConfig) CheckDNSSearch(service *types.ServiceConfig) diff --git a/ecs/pkg/amazon/cloudformation.go b/ecs/pkg/amazon/cloudformation.go index a9642a6a1..87d9f0600 100644 --- a/ecs/pkg/amazon/cloudformation.go +++ b/ecs/pkg/amazon/cloudformation.go @@ -174,10 +174,16 @@ func (c client) Convert(project *compose.Project) (*cloudformation.Template, err if service.Deploy != nil && service.Deploy.Replicas != nil { desiredCount = int(*service.Deploy.Replicas) } - template.Resources[fmt.Sprintf("%sService", normalizeResourceName(service.Name))] = &ecs.Service{ - Cluster: cluster, - DesiredCount: desiredCount, - LaunchType: ecsapi.LaunchTypeFargate, + + dependsOn := []string{} + for _, dependency := range service.DependsOn { + dependsOn = append(dependsOn, serviceResourceName(dependency)) + } + template.Resources[serviceResourceName(service.Name)] = &ecs.Service{ + AWSCloudFormationDependsOn: dependsOn, + Cluster: cluster, + DesiredCount: desiredCount, + LaunchType: ecsapi.LaunchTypeFargate, NetworkConfiguration: &ecs.Service_NetworkConfiguration{ AwsvpcConfiguration: &ecs.Service_AwsVpcConfiguration{ AssignPublicIp: ecsapi.AssignPublicIpEnabled, @@ -259,6 +265,10 @@ func networkResourceName(project *compose.Project, network string) string { return fmt.Sprintf("%s%sNetwork", normalizeResourceName(project.Name), normalizeResourceName(network)) } +func serviceResourceName(dependency string) string { + return fmt.Sprintf("%sService", normalizeResourceName(dependency)) +} + func normalizeResourceName(s string) string { return strings.Title(regexp.MustCompile("[^a-zA-Z0-9]+").ReplaceAllString(s, "")) } diff --git a/ecs/pkg/amazon/compatibility.go b/ecs/pkg/amazon/compatibility.go index 6049a4d4e..1a7f136a4 100644 --- a/ecs/pkg/amazon/compatibility.go +++ b/ecs/pkg/amazon/compatibility.go @@ -21,7 +21,6 @@ func (c *FargateCompatibilityChecker) Errors() []error { func (c *FargateCompatibilityChecker) CheckService(service *types.ServiceConfig) { c.CheckCapAdd(service) - c.CheckDependsOn(service) c.CheckDNS(service) c.CheckDNSOpts(service) c.CheckDNSSearch(service) @@ -47,13 +46,6 @@ func (c *FargateCompatibilityChecker) CheckNetworkMode(service *types.ServiceCon service.NetworkMode = ecs.NetworkModeAwsvpc } -func (c *FargateCompatibilityChecker) CheckDependsOn(service *types.ServiceConfig) { - if len(service.DependsOn) != 0 { - c.error("'depends_on' is not supported") - service.DependsOn = nil - } -} - func (c *FargateCompatibilityChecker) CheckLinks(service *types.ServiceConfig) { if len(service.Links) != 0 { c.error("'links' is not supported")