Skip to content

Commit

Permalink
Adds first cut at ecs_client.go
Browse files Browse the repository at this point in the history
  • Loading branch information
Gowiem committed May 14, 2020
1 parent 008e208 commit ee9e639
Showing 1 changed file with 92 additions and 0 deletions.
92 changes: 92 additions & 0 deletions cmd/ecs_client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package cmd

import (
// "fmt"
"os"

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

// ECSClient is the wrapper around the aws-sdk ECS client and its various structs / methods.
type ECSClient interface {
BuildRunTaskInput() (*ecs.RunTaskInput, error)
RunTask(runTaskInput *ecs.RunTaskInput) (*ecs.RunTaskOutput, error)
}

type ecsClient struct {
client ecsiface.ECSAPI
config *RunConfig
}

// NewEcsClient creates a new ecsClient for the given RunConfig
func NewEcsClient(config *RunConfig) ECSClient {
client := ecs.New(config.Session)

return newClient(client, config)
}

func newClient(client ecsiface.ECSAPI, config *RunConfig) ECSClient {
return &ecsClient{
client: client,
config: config,
}
}

func (c *ecsClient) BuildRunTaskInput() (*ecs.RunTaskInput, error) {

taskDefition := c.getTaskDefinition()
assignPublicIP := c.getAssignPublicIp()

runInput := &ecs.RunTaskInput{
Cluster: &c.config.Cluster,
TaskDefinition: &taskDefition,
Count: &c.config.Count,
LaunchType: &c.config.LaunchType,
NetworkConfiguration: &ecs.NetworkConfiguration{
AwsvpcConfiguration: &ecs.AwsVpcConfiguration{
AssignPublicIp: &assignPublicIP,
SecurityGroups: []*string{&c.config.SecurityGroupID},
Subnets: []*string{&c.config.SubnetID},
},
},
Overrides: &ecs.TaskOverride{
ContainerOverrides: []*ecs.ContainerOverride{
{
Command: c.config.Command,
Name: &def,
},
},
},
}

return runInput, nil
}

func (c *ecsClient) RunTask(runTaskInput *ecs.RunTaskInput) (*ecs.RunTaskOutput, error) {

output, err := client.RunTask(runInput)
if err != nil {
log.Fatal("Received error when invoking RunTask.", err)
log.Fatal("Error: ", err)
os.Exit(1)
}

log.Info("Output: ", output)
return output, err
}

func (c *ecsClient) getTaskDefinition() string {
if c.config.TaskDefinitionRevision != nil {
return c.config.TaskDefinitionName + ":" + c.config.TaskDefinitionRevision
}

return c.config.TaskDefinitionName
}

func (c *ecsClient) getAssignPublicIP() string {
if c.config.AssignPublicIP {
return ecs.AssignPublicIpEnabled
}

return ecs.AssignPublicIpDisabled
}

0 comments on commit ee9e639

Please sign in to comment.