From 30fd37b6cabb96b99e5a2754342494e7f7ab25cf Mon Sep 17 00:00:00 2001 From: aiordache Date: Wed, 22 Apr 2020 15:06:01 +0200 Subject: [PATCH] ecs cluster create Signed-off-by: aiordache --- ecs/pkg/amazon/down.go | 2 +- ecs/pkg/amazon/ecs.go | 37 +++++++++++++++++++++++++++++++++++++ ecs/pkg/amazon/up.go | 7 +++++++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/ecs/pkg/amazon/down.go b/ecs/pkg/amazon/down.go index ac2648325..44f493515 100644 --- a/ecs/pkg/amazon/down.go +++ b/ecs/pkg/amazon/down.go @@ -12,7 +12,7 @@ func (c *client) ComposeDown(project *compose.Project, keepLoadBalancer bool) er if err != nil { return err } - + c.DeleteCluster() // TODO monitor progress return nil } diff --git a/ecs/pkg/amazon/ecs.go b/ecs/pkg/amazon/ecs.go index 423980f3d..232d1d60f 100644 --- a/ecs/pkg/amazon/ecs.go +++ b/ecs/pkg/amazon/ecs.go @@ -1,6 +1,9 @@ package amazon import ( + "errors" + "strings" + "github.com/aws/aws-sdk-go/service/ecs" "github.com/sirupsen/logrus" ) @@ -13,3 +16,37 @@ func (c client) RegisterTaskDefinition(task *ecs.RegisterTaskDefinitionInput) (* } return def.TaskDefinition.TaskDefinitionArn, err } + +func (c client) CreateCluster() (*string, error) { + logrus.Debug("Create cluster ", c.Cluster) + response, err := c.ECS.CreateCluster(&ecs.CreateClusterInput{ClusterName: &c.Cluster}) + if err != nil { + return nil, err + } + return response.Cluster.Status, nil +} + +func (c client) DeleteCluster() error { + logrus.Debug("Delete cluster ", c.Cluster) + response, err := c.ECS.DeleteCluster(&ecs.DeleteClusterInput{Cluster: &c.Cluster}) + if err != nil { + return err + } + if *response.Cluster.Status == "INACTIVE" { + return nil + } + return errors.New("Failed to delete cluster, status: " + *response.Cluster.Status) +} + +func (c client) ClusterExists() (bool, error) { + logrus.Debug("Check if cluster was already created: ", c.Cluster) + clusters, err := c.ECS.ListClusters(nil) + if err != nil { + return false, err + } + found := false + for _, arn := range clusters.ClusterArns { + found = found || strings.HasSuffix(*arn, "/"+c.Cluster) + } + return found, nil +} diff --git a/ecs/pkg/amazon/up.go b/ecs/pkg/amazon/up.go index 5f9b8750d..baa117933 100644 --- a/ecs/pkg/amazon/up.go +++ b/ecs/pkg/amazon/up.go @@ -10,6 +10,13 @@ import ( ) func (c *client) ComposeUp(project *compose.Project, loadBalancerArn *string) error { + ok, err := c.ClusterExists() + if err != nil { + return err + } + if !ok { + c.CreateCluster() + } template, err := c.Convert(project, loadBalancerArn) if err != nil { return err