Skip to content

Commit

Permalink
stop one off processes
Browse files Browse the repository at this point in the history
  • Loading branch information
MiguelMoll committed Feb 8, 2017
1 parent 9f9a619 commit 7ddeb94
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
1 change: 1 addition & 0 deletions provider/aws/dist/rack.json
Original file line number Diff line number Diff line change
Expand Up @@ -1589,6 +1589,7 @@
"ecs:ListContainerInstances",
"ecs:ListServices",
"ecs:ListTasks",
"ecs:StopTask",
"ecs:UpdateContainerInstancesState",
"lambda:GetFunction",
"logs:CreateLogGroup",
Expand Down
34 changes: 34 additions & 0 deletions provider/aws/lambda/lifecycle/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"encoding/json"
"fmt"
"os"
"strings"
"time"

"github.com/aws/aws-sdk-go/aws"
Expand Down Expand Up @@ -164,9 +165,42 @@ func waitForInstanceDrain(cluster, ci string) error {
Cluster: aws.String(cluster),
Tasks: tasks,
}

if err := stopServicelessTasks(input); err != nil {
return err
}

fmt.Println("stopped service-less tasks")

return ECS.WaitUntilTasksStopped(input)
}

// stopServicelessTasks stops one-off tasks that do not belog to a ECS service.
// For example, a scheduled task or running a process
func stopServicelessTasks(input *ecs.DescribeTasksInput) error {

tasks, err := ECS.DescribeTasks(input)
if err != nil {
return err
}

for _, t := range tasks.Tasks {
// if the task isn't part of a service and wasn't started by ECS, stop it
if !strings.HasPrefix(*t.Group, "service:") && !strings.HasPrefix(*t.StartedBy, "ecs-svc") {
_, err := ECS.StopTask(&ecs.StopTaskInput{
Cluster: input.Cluster,
Reason: aws.String("draining instance for termination"),
Task: t.TaskArn,
})
if err != nil {
return err
}
}
}

return nil
}

func metadata() (*Metadata, error) {
var md Metadata

Expand Down

0 comments on commit 7ddeb94

Please sign in to comment.