Remove instances from ASG and terminate them when deleting

This commit is contained in:
Marcos Lilljedahl
2017-08-18 18:53:54 -03:00
parent d77c840a86
commit e46d77b96d

View File

@@ -6,6 +6,7 @@ import (
"io"
"log"
"net"
"sort"
"strings"
"github.com/aws/aws-sdk-go/aws"
@@ -146,12 +147,27 @@ func (d *windows) InstanceDelete(session *types.Session, instance *types.Instanc
if err != nil {
return err
}
_, err = asgService.DetachInstances(&autoscaling.DetachInstancesInput{
AutoScalingGroupName: aws.String("pwd-windows"),
InstanceIds: []*string{aws.String(instance.WindowsId)},
ShouldDecrementDesiredCapacity: aws.Bool(false),
})
if err != nil {
return err
}
// return error and don't do anything else
if _, err := ec2Service.TerminateInstances(&ec2.TerminateInstancesInput{InstanceIds: []*string{aws.String(instance.WindowsId)}}); err != nil {
return err
}
err = dockerClient.DeleteContainer(instance.Name)
if err != nil && !strings.Contains(err.Error(), "No such container") {
return err
}
// TODO trigger deletion in AWS
return d.releaseInstance(session.Id, instance.WindowsId)
}
@@ -198,6 +214,9 @@ func (d *windows) getWindowsInstanceInfo(sessionId string) (*instanceInfo, error
instances := out.AutoScalingGroups[0].Instances
availInstances := make([]string, len(instances))
// reverse order so older instances are first served
sort.Sort(sort.Reverse(sort.StringSlice(availInstances)))
for i, inst := range instances {
if *inst.LifecycleState == "InService" {
availInstances[i] = *inst.InstanceId