From d7d5e6305406c3b268d712b6d9de84f36e19755e Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Wed, 15 Jul 2020 11:42:16 +0200 Subject: [PATCH] Introduce x-aws-cluster for cluster to deploy application to Signed-off-by: Nicolas De Loof --- ecs/Makefile | 5 +++- ecs/pkg/amazon/backend/list.go | 19 ++++++++------- ecs/pkg/amazon/backend/up.go | 43 ++++++++++++++++++++++++---------- ecs/pkg/compose/x.go | 1 + 4 files changed, 46 insertions(+), 22 deletions(-) diff --git a/ecs/Makefile b/ecs/Makefile index cf9c48cc2..109325861 100644 --- a/ecs/Makefile +++ b/ecs/Makefile @@ -39,7 +39,10 @@ dev: build lint: ## Verify Go files @docker build . --target lint +fmt: ## Format go files + go fmt ./... + clean: rm -rf dist/ -.PHONY: clean build test dev lint e2e cross +.PHONY: clean build test dev lint e2e cross fmt diff --git a/ecs/pkg/amazon/backend/list.go b/ecs/pkg/amazon/backend/list.go index 232b2c816..8647b0d47 100644 --- a/ecs/pkg/amazon/backend/list.go +++ b/ecs/pkg/amazon/backend/list.go @@ -14,25 +14,28 @@ func (b *Backend) Ps(ctx context.Context, options cli.ProjectOptions) ([]compose return nil, err } - cluster := b.Cluster - if cluster == "" { - cluster = project.Name - } - resources, err := b.api.ListStackResources(ctx, project.Name) if err != nil { return nil, err } - var loadBalancer string - if lb, ok := project.Extensions[compose.ExtensionLB]; ok { - loadBalancer = lb.(string) + loadBalancer, err := b.GetLoadBalancer(ctx, project) + if err != nil { + return nil, err } + + cluster, err := b.GetCluster(ctx, project) + if err != nil { + return nil, err + } + servicesARN := []string{} for _, r := range resources { switch r.Type { case "AWS::ECS::Service": servicesARN = append(servicesARN, r.ARN) + case "AWS::ECS::Cluster": + cluster = r.ARN case "AWS::ElasticLoadBalancingV2::LoadBalancer": loadBalancer = r.ARN } diff --git a/ecs/pkg/amazon/backend/up.go b/ecs/pkg/amazon/backend/up.go index 104fef915..e91f11916 100644 --- a/ecs/pkg/amazon/backend/up.go +++ b/ecs/pkg/amazon/backend/up.go @@ -16,14 +16,14 @@ func (b *Backend) Up(ctx context.Context, options cli.ProjectOptions) error { return err } - if b.Cluster != "" { - ok, err := b.api.ClusterExists(ctx, b.Cluster) - if err != nil { - return err - } - if !ok { - return fmt.Errorf("configured cluster %q does not exist", b.Cluster) - } + err = b.api.CheckRequirements(ctx) + if err != nil { + return err + } + + cluster, err := b.GetCluster(ctx, project) + if err != nil { + return err } update, err := b.api.StackExists(ctx, project.Name) @@ -55,7 +55,7 @@ func (b *Backend) Up(ctx context.Context, options cli.ProjectOptions) error { } parameters := map[string]string{ - ParameterClusterName: b.Cluster, + ParameterClusterName: cluster, ParameterVPCId: vpc, ParameterSubnet1Id: subNets[0], ParameterSubnet2Id: subNets[1], @@ -96,15 +96,32 @@ func (b Backend) GetVPC(ctx context.Context, project *types.Project) (string, er func (b Backend) GetLoadBalancer(ctx context.Context, project *types.Project) (string, error) { //check compose file for custom VPC selected - if lb, ok := project.Extensions[compose.ExtensionLB]; ok { - lbName := lb.(string) - ok, err := b.api.LoadBalancerExists(ctx, lbName) + if ext, ok := project.Extensions[compose.ExtensionLB]; ok { + lb := ext.(string) + ok, err := b.api.LoadBalancerExists(ctx, lb) if err != nil { return "", err } if !ok { - return "", fmt.Errorf("Load Balancer does not exist: %s", lb) + return "", fmt.Errorf("load balancer does not exist: %s", lb) } + return lb, nil } return "", nil } + +func (b Backend) GetCluster(ctx context.Context, project *types.Project) (string, error) { + //check compose file for custom VPC selected + if ext, ok := project.Extensions[compose.ExtensionCluster]; ok { + cluster := ext.(string) + ok, err := b.api.ClusterExists(ctx, cluster) + if err != nil { + return "", err + } + if !ok { + return "", fmt.Errorf("cluster does not exist: %s", cluster) + } + return cluster, nil + } + return b.Cluster, nil +} diff --git a/ecs/pkg/compose/x.go b/ecs/pkg/compose/x.go index 7a2a5bd0b..8e52a368f 100644 --- a/ecs/pkg/compose/x.go +++ b/ecs/pkg/compose/x.go @@ -5,4 +5,5 @@ const ( ExtensionVPC = "x-aws-vpc" ExtensionPullCredentials = "x-aws-pull_credentials" ExtensionLB = "x-aws-loadbalancer" + ExtensionCluster = "x-aws-cluster" )