Forráskód Böngészése

Introduce "down" command

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof 5 éve
szülő
commit
7763de47eb
4 módosított fájl, 76 hozzáadás és 0 törlés
  1. 15 0
      ecs/cmd/main/main.go
  2. 60 0
      ecs/pkg/amazon/down.go
  3. 0 0
      ecs/pkg/amazon/up.go
  4. 1 0
      ecs/pkg/compose/api.go

+ 15 - 0
ecs/cmd/main/main.go

@@ -71,6 +71,7 @@ func ComposeCommand(clusteropts *clusterOptions) *cobra.Command {
 
 	cmd.AddCommand(
 		UpCommand(clusteropts, opts),
+		DownCommand(clusteropts, opts),
 	)
 	return cmd
 }
@@ -87,4 +88,18 @@ func UpCommand(clusteropts *clusterOptions, opts *compose.ProjectOptions) *cobra
 		}),
 	}
 	return cmd
+}
+
+func DownCommand(clusteropts *clusterOptions, opts *compose.ProjectOptions) *cobra.Command {
+	cmd := &cobra.Command{
+		Use: "down",
+		RunE: compose.WithProject(opts, func(project *compose.Project, args []string) error {
+			client, err := amazon.NewClient(clusteropts.profile, clusteropts.cluster, clusteropts.region)
+			if err != nil {
+				return err
+			}
+			return client.ComposeDown(project)
+		}),
+	}
+	return cmd
 }

+ 60 - 0
ecs/pkg/amazon/down.go

@@ -0,0 +1,60 @@
+package amazon
+
+import (
+	"github.com/aws/aws-sdk-go/aws"
+	"github.com/aws/aws-sdk-go/service/ec2"
+	"github.com/aws/aws-sdk-go/service/ecs"
+	"github.com/docker/ecs-plugin/pkg/compose"
+	"github.com/sirupsen/logrus"
+)
+
+func (c *client) ComposeDown(project *compose.Project) error {
+	services := []*string{}
+	// FIXME we should be able to retrieve services by tags, so we don't need the initial compose file to run "down"
+	for _, service := range project.Services {
+		logrus.Debugf("Deleting service %q\n", service.Name)
+		out, err := c.ECS.DeleteService(&ecs.DeleteServiceInput{
+			// Force to true so that we don't have to scale down to 0
+			// before deleting
+			Force:   aws.Bool(true),
+			Cluster: aws.String(c.Cluster),
+			Service: aws.String(service.Name),
+		})
+		if err != nil {
+			return err
+		}
+
+		logrus.Debugf("Service deleted %q\n", *out.Service.ServiceName)
+		services = append(services, out.Service.ServiceName)
+	}
+	logrus.Info("All services stopped")
+
+	err := c.ECS.WaitUntilServicesInactive(&ecs.DescribeServicesInput{
+		Services: services,
+	})
+	if err != nil {
+		return err
+	}
+
+	logrus.Debug("Deleting security groups")
+	groups, err := c.EC2.DescribeSecurityGroups(&ec2.DescribeSecurityGroupsInput{
+		Filters: []*ec2.Filter{
+			{
+				Name:   aws.String("tag:" + ProjectTag),
+				Values: aws.StringSlice([]string{project.Name}),
+			},
+		},
+	})
+	if err != nil {
+		return err
+	}
+	for _, g := range groups.SecurityGroups {
+		_, err = c.EC2.DeleteSecurityGroup(&ec2.DeleteSecurityGroupInput{
+			GroupId: g.GroupId,
+		})
+		if err != nil {
+			return err
+		}
+	}
+	return nil
+}

+ 0 - 0
ecs/pkg/amazon/compose.go → ecs/pkg/amazon/up.go


+ 1 - 0
ecs/pkg/compose/api.go

@@ -2,4 +2,5 @@ package compose
 
 type API interface {
 	ComposeUp(project *Project) error
+	ComposeDown(project *Project) error
 }