mirror of
				https://github.com/docker/compose.git
				synced 2025-11-02 20:54:43 +01:00 
			
		
		
		
	this is a workaround for CloudFormation issue to manage CapacityProvider <-> Cluster reverse dependency Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
   Copyright 2020 Docker Compose CLI authors
 | 
						|
 | 
						|
   Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
   you may not use this file except in compliance with the License.
 | 
						|
   You may obtain a copy of the License at
 | 
						|
 | 
						|
       http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 | 
						|
   Unless required by applicable law or agreed to in writing, software
 | 
						|
   distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
   See the License for the specific language governing permissions and
 | 
						|
   limitations under the License.
 | 
						|
*/
 | 
						|
 | 
						|
package ecs
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
 | 
						|
	"github.com/docker/compose-cli/progress"
 | 
						|
)
 | 
						|
 | 
						|
func (b *ecsAPIService) Down(ctx context.Context, project string) error {
 | 
						|
	resources, err := b.SDK.ListStackResources(ctx, project)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	err = resources.apply(awsTypeCapacityProvider, delete(ctx, b.SDK.DeleteCapacityProvider))
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	err = resources.apply(awsTypeAutoscalingGroup, delete(ctx, b.SDK.DeleteAutoscalingGroup))
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	previousEvents, err := b.previousStackEvents(ctx, project)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	err = b.SDK.DeleteStack(ctx, project)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	return b.WaitStackCompletion(ctx, project, stackDelete, previousEvents...)
 | 
						|
}
 | 
						|
 | 
						|
func (b *ecsAPIService) previousStackEvents(ctx context.Context, project string) ([]string, error) {
 | 
						|
	events, err := b.SDK.DescribeStackEvents(ctx, project)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	var previousEvents []string
 | 
						|
	for _, e := range events {
 | 
						|
		previousEvents = append(previousEvents, *e.EventId)
 | 
						|
	}
 | 
						|
	return previousEvents, nil
 | 
						|
}
 | 
						|
 | 
						|
func delete(ctx context.Context, delete func(ctx context.Context, arn string) error) func(r stackResource) error {
 | 
						|
	return func(r stackResource) error {
 | 
						|
		w := progress.ContextWriter(ctx)
 | 
						|
		w.Event(progress.Event{
 | 
						|
			ID:         r.LogicalID,
 | 
						|
			Status:     progress.Working,
 | 
						|
			StatusText: "DELETE_IN_PROGRESS",
 | 
						|
		})
 | 
						|
		return delete(ctx, r.ARN)
 | 
						|
	}
 | 
						|
}
 |