浏览代码

create ALB is protocol is set to "http" or "https"

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof 5 年之前
父节点
当前提交
1506c7ac9b
共有 6 个文件被更改,包括 46 次插入17 次删除
  1. 9 1
      ecs/cloudformation.go
  2. 27 9
      ecs/cloudformation_test.go
  3. 3 1
      ecs/local/compose.go
  4. 1 0
      ecs/x.go
  5. 2 2
      go.mod
  6. 4 4
      go.sum

+ 9 - 1
ecs/cloudformation.go

@@ -206,7 +206,7 @@ func (b *ecsAPIService) convert(project *types.Project) (*cloudformation.Templat
 			desiredCount = int(*service.Deploy.Replicas)
 		}
 
-		for _, dependency := range service.DependsOn {
+		for dependency := range service.DependsOn {
 			dependsOn = append(dependsOn, serviceResourceName(dependency))
 		}
 
@@ -312,6 +312,14 @@ func computeRollingUpdateLimits(service types.ServiceConfig) (int, int, error) {
 func getLoadBalancerType(project *types.Project) string {
 	for _, service := range project.Services {
 		for _, port := range service.Ports {
+			protocol := port.Protocol
+			v, ok := port.Extensions[extensionProtocol]
+			if ok {
+				protocol = v.(string)
+			}
+			if protocol == "http" || protocol == "https" {
+				continue
+			}
 			if port.Published != 80 && port.Published != 443 {
 				return elbv2.LoadBalancerTypeEnumNetwork
 			}

+ 27 - 9
ecs/cloudformation_test.go

@@ -181,19 +181,37 @@ networks:
 }
 
 func TestLoadBalancerTypeApplication(t *testing.T) {
-	template := convertYaml(t, `
-services:
+	cases := []string{
+		`services:
   test:
     image: nginx
     ports:
       - 80:80
-`)
-	lb := template.Resources["TestLoadBalancer"]
-	assert.Check(t, lb != nil)
-	loadBalancer := *lb.(*elasticloadbalancingv2.LoadBalancer)
-	assert.Check(t, len(loadBalancer.Name) <= 32)
-	assert.Check(t, loadBalancer.Type == elbv2.LoadBalancerTypeEnumApplication)
-	assert.Check(t, len(loadBalancer.SecurityGroups) > 0)
+`,
+		`services:
+  test:
+    image: nginx
+    ports:
+      - target: 8080
+        protocol: http
+`,
+		`services:
+  test:
+    image: nginx
+    ports:
+      - target: 8080
+        x-aws-protocol: http
+`,
+	}
+	for _, y := range cases {
+		template := convertYaml(t, y)
+		lb := template.Resources["TestLoadBalancer"]
+		assert.Check(t, lb != nil)
+		loadBalancer := *lb.(*elasticloadbalancingv2.LoadBalancer)
+		assert.Check(t, len(loadBalancer.Name) <= 32)
+		assert.Check(t, loadBalancer.Type == elbv2.LoadBalancerTypeEnumApplication)
+		assert.Check(t, len(loadBalancer.SecurityGroups) > 0)
+	}
 }
 
 func TestNoLoadBalancerIfNoPortExposed(t *testing.T) {

+ 3 - 1
ecs/local/compose.go

@@ -92,7 +92,9 @@ func (e ecsLocalSimulation) Convert(ctx context.Context, project *types.Project)
 		service.Networks["credentials_network"] = &types.ServiceNetworkConfig{
 			Ipv4Address: fmt.Sprintf("169.254.170.%d", i+3),
 		}
-		service.DependsOn = append(service.DependsOn, "ecs-local-endpoints")
+		service.DependsOn["ecs-local-endpoints"] = types.ServiceDependency{
+			Condition: types.ServiceConditionStarted,
+		}
 		service.Environment["AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"] = aws.String("/creds")
 		service.Environment["ECS_CONTAINER_METADATA_URI"] = aws.String("http://169.254.170.2/v3")
 		project.Services[i] = service

+ 1 - 0
ecs/x.go

@@ -21,6 +21,7 @@ const (
 	extensionVPC             = "x-aws-vpc"
 	extensionPullCredentials = "x-aws-pull_credentials"
 	extensionLB              = "x-aws-loadbalancer"
+	extensionProtocol        = "x-aws-protocol"
 	extensionCluster         = "x-aws-cluster"
 	extensionKeys            = "x-aws-keys"
 	extensionMinPercent      = "x-aws-min_percent"

+ 2 - 2
go.mod

@@ -22,7 +22,7 @@ require (
 	github.com/aws/aws-sdk-go v1.34.8
 	github.com/awslabs/goformation/v4 v4.14.0
 	github.com/buger/goterm v0.0.0-20200322175922-2f3e71b85129
-	github.com/compose-spec/compose-go v0.0.0-20200824075806-a70cd5945c25
+	github.com/compose-spec/compose-go v0.0.0-20200907084823-057e1edc5b6f
 	github.com/containerd/console v1.0.0
 	github.com/containerd/containerd v1.3.5 // indirect
 	github.com/docker/cli v0.0.0-20200528204125-dd360c7c0de8
@@ -35,7 +35,7 @@ require (
 	github.com/gobwas/pool v0.2.0 // indirect
 	github.com/gobwas/ws v1.0.3
 	github.com/golang/protobuf v1.4.2
-	github.com/google/go-cmp v0.5.1
+	github.com/google/go-cmp v0.5.2
 	github.com/google/uuid v1.1.1
 	github.com/gorilla/mux v1.7.4 // indirect
 	github.com/hashicorp/go-multierror v1.1.0

+ 4 - 4
go.sum

@@ -87,8 +87,8 @@ github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
 github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/compose-spec/compose-go v0.0.0-20200824075806-a70cd5945c25 h1:mVlGrHJuNGPJNEvCCIrDIZX5FYtNTwFd++y+fJaGTXM=
-github.com/compose-spec/compose-go v0.0.0-20200824075806-a70cd5945c25/go.mod h1:P7PZ0svgjrZ8nv/XvxObbl8o0DCIE9ZbL8pllg6uL4w=
+github.com/compose-spec/compose-go v0.0.0-20200907084823-057e1edc5b6f h1:YsU3/17YA/skXpCQbRcrzWJxslWZ2lmvQK0bRiCyC38=
+github.com/compose-spec/compose-go v0.0.0-20200907084823-057e1edc5b6f/go.mod h1:voTGL1mRFcKRaFbi1lXGlR1YffS/9YD1jnVl4N/rYzw=
 github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f h1:tSNMc+rJDfmYntojat8lljbt1mgKNpTxUZJsSzJ9Y1s=
 github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko=
 github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
@@ -193,8 +193,8 @@ github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
 github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k=
-github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=