mirror of
https://github.com/docker/compose.git
synced 2025-07-27 07:34:10 +02:00
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:
parent
1b53dbf84f
commit
d7d5e63054
@ -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
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
|
||||||
return fmt.Errorf("configured cluster %q does not exist", b.Cluster)
|
cluster, err := b.GetCluster(ctx, project)
|
||||||
}
|
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
|
||||||
|
}
|
||||||
|
@ -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"
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user