Skip to content

Commit

Permalink
Merge pull request #235 from tomvachon/bugfix/ECSCluster
Browse files Browse the repository at this point in the history
ECS Services & Task Definitions
  • Loading branch information
svenwltr committed Jul 16, 2018
2 parents db91ad2 + 9f1e3e4 commit fdc4f8d
Show file tree
Hide file tree
Showing 2 changed files with 151 additions and 0 deletions.
91 changes: 91 additions & 0 deletions resources/ecs-services.go
@@ -0,0 +1,91 @@
package resources

import (
"fmt"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/ecs"
)

type ECSService struct {
svc *ecs.ECS
serviceARN *string
clusterARN *string
}

func init() {
register("ECSService", ListECSServices)
}

func ListECSServices(sess *session.Session) ([]Resource, error) {
svc := ecs.New(sess)
resources := []Resource{}
clusters := []*string{}

clusterParams := &ecs.ListClustersInput{
MaxResults: aws.Int64(100),
}

// Iterate over clusters to ensure we dont presume its always default associations
for {
output, err := svc.ListClusters(clusterParams)
if err != nil {
return nil, err
}

for _, clusterArn := range output.ClusterArns {
clusters = append(clusters, clusterArn)
}

if output.NextToken == nil {
break
}

clusterParams.NextToken = output.NextToken
}

// Iterate over known clusters and discover their instances
// to prevent assuming default is always used
for _, clusterArn := range clusters {
serviceParams := &ecs.ListServicesInput{
Cluster: clusterArn,
MaxResults: aws.Int64(10),
}
output, err := svc.ListServices(serviceParams)
if err != nil {
return nil, err
}

for _, serviceArn := range output.ServiceArns {
resources = append(resources, &ECSService{
svc: svc,
serviceARN: serviceArn,
clusterARN: clusterArn,
})
}

if output.NextToken == nil {
continue
}

serviceParams.NextToken = output.NextToken
}

return resources, nil
}

func (f *ECSService) Remove() error {

_, err := f.svc.DeleteService(&ecs.DeleteServiceInput{
Cluster: f.clusterARN,
Service: f.serviceARN,
Force: aws.Bool(true),
})

return err
}

func (f *ECSService) String() string {
return fmt.Sprintf("%s -> %s", *f.serviceARN, *f.clusterARN)
}
60 changes: 60 additions & 0 deletions resources/ecs-taskdefinitions.go
@@ -0,0 +1,60 @@
package resources

import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/ecs"
)

type ECSTaskDefinition struct {
svc *ecs.ECS
ARN *string
}

func init() {
register("ECSTaskDefinition", ListECSTaskDefinitions)
}

func ListECSTaskDefinitions(sess *session.Session) ([]Resource, error) {
svc := ecs.New(sess)
resources := []Resource{}

params := &ecs.ListTaskDefinitionsInput{
MaxResults: aws.Int64(100),
}

for {
output, err := svc.ListTaskDefinitions(params)
if err != nil {
return nil, err
}

for _, taskDefinitionARN := range output.TaskDefinitionArns {
resources = append(resources, &ECSTaskDefinition{
svc: svc,
ARN: taskDefinitionARN,
})
}

if output.NextToken == nil {
break
}

params.NextToken = output.NextToken
}

return resources, nil
}

func (f *ECSTaskDefinition) Remove() error {

_, err := f.svc.DeregisterTaskDefinition(&ecs.DeregisterTaskDefinitionInput{
TaskDefinition: f.ARN,
})

return err
}

func (f *ECSTaskDefinition) String() string {
return *f.ARN
}

0 comments on commit fdc4f8d

Please sign in to comment.