Introduce x-aws-cluster for cluster to deploy application to

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
Nicolas De Loof 2020-07-15 11:42:16 +02:00
parent 1b53dbf84f
commit d7d5e63054
No known key found for this signature in database
GPG Key ID: 9858809D6F8F6E7E
4 changed files with 46 additions and 22 deletions

View File

@ -39,7 +39,10 @@ dev: build
lint: ## Verify Go files lint: ## Verify Go files
@docker build . --target lint @docker build . --target lint
fmt: ## Format go files
go fmt ./...
clean: clean:
rm -rf dist/ rm -rf dist/
.PHONY: clean build test dev lint e2e cross .PHONY: clean build test dev lint e2e cross fmt

View File

@ -14,25 +14,28 @@ func (b *Backend) Ps(ctx context.Context, options cli.ProjectOptions) ([]compose
return nil, err return nil, err
} }
cluster := b.Cluster
if cluster == "" {
cluster = project.Name
}
resources, err := b.api.ListStackResources(ctx, project.Name) resources, err := b.api.ListStackResources(ctx, project.Name)
if err != nil { if err != nil {
return nil, err return nil, err
} }
var loadBalancer string loadBalancer, err := b.GetLoadBalancer(ctx, project)
if lb, ok := project.Extensions[compose.ExtensionLB]; ok { if err != nil {
loadBalancer = lb.(string) return nil, err
} }
cluster, err := b.GetCluster(ctx, project)
if err != nil {
return nil, err
}
servicesARN := []string{} servicesARN := []string{}
for _, r := range resources { for _, r := range resources {
switch r.Type { switch r.Type {
case "AWS::ECS::Service": case "AWS::ECS::Service":
servicesARN = append(servicesARN, r.ARN) servicesARN = append(servicesARN, r.ARN)
case "AWS::ECS::Cluster":
cluster = r.ARN
case "AWS::ElasticLoadBalancingV2::LoadBalancer": case "AWS::ElasticLoadBalancingV2::LoadBalancer":
loadBalancer = r.ARN loadBalancer = r.ARN
} }

View File

@ -16,14 +16,14 @@ func (b *Backend) Up(ctx context.Context, options cli.ProjectOptions) error {
return err return err
} }
if b.Cluster != "" { err = b.api.CheckRequirements(ctx)
ok, err := b.api.ClusterExists(ctx, b.Cluster) if err != nil {
if err != nil { return err
return err }
}
if !ok { cluster, err := b.GetCluster(ctx, project)
return fmt.Errorf("configured cluster %q does not exist", b.Cluster) if err != nil {
} return err
} }
update, err := b.api.StackExists(ctx, project.Name) 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{ parameters := map[string]string{
ParameterClusterName: b.Cluster, ParameterClusterName: cluster,
ParameterVPCId: vpc, ParameterVPCId: vpc,
ParameterSubnet1Id: subNets[0], ParameterSubnet1Id: subNets[0],
ParameterSubnet2Id: subNets[1], 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) { func (b Backend) GetLoadBalancer(ctx context.Context, project *types.Project) (string, error) {
//check compose file for custom VPC selected //check compose file for custom VPC selected
if lb, ok := project.Extensions[compose.ExtensionLB]; ok { if ext, ok := project.Extensions[compose.ExtensionLB]; ok {
lbName := lb.(string) lb := ext.(string)
ok, err := b.api.LoadBalancerExists(ctx, lbName) ok, err := b.api.LoadBalancerExists(ctx, lb)
if err != nil { if err != nil {
return "", err return "", err
} }
if !ok { 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 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
}

View File

@ -5,4 +5,5 @@ const (
ExtensionVPC = "x-aws-vpc" ExtensionVPC = "x-aws-vpc"
ExtensionPullCredentials = "x-aws-pull_credentials" ExtensionPullCredentials = "x-aws-pull_credentials"
ExtensionLB = "x-aws-loadbalancer" ExtensionLB = "x-aws-loadbalancer"
ExtensionCluster = "x-aws-cluster"
) )