浏览代码

Implement depends_on using CloudFormation

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof 5 年之前
父节点
当前提交
7d4222a725
共有 3 个文件被更改,包括 14 次插入13 次删除
  1. 0 1
      ecs/pkg/amazon/check.go
  2. 14 4
      ecs/pkg/amazon/cloudformation.go
  3. 0 8
      ecs/pkg/amazon/compatibility.go

+ 0 - 1
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)

+ 14 - 4
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, ""))
 }

+ 0 - 8
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")