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
@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

View File

@ -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
}

View File

@ -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
}

View File

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