mirror of https://github.com/kubernetes/kops.git
use describeInstanceHealth api
This commit is contained in:
parent
e27d726fe5
commit
6e93352459
|
|
@ -115,6 +115,8 @@ const (
|
||||||
WellKnownAccountUbuntu = "099720109477"
|
WellKnownAccountUbuntu = "099720109477"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const instanceInServiceState = "InService"
|
||||||
|
|
||||||
// AWSErrCodeInvalidAction is returned in AWS partitions that don't support certain actions
|
// AWSErrCodeInvalidAction is returned in AWS partitions that don't support certain actions
|
||||||
const AWSErrCodeInvalidAction = "InvalidAction"
|
const AWSErrCodeInvalidAction = "InvalidAction"
|
||||||
|
|
||||||
|
|
@ -585,25 +587,36 @@ func deregisterInstanceFromClassicLoadBalancer(c AWSCloud, i *cloudinstances.Clo
|
||||||
// there will always be only one ASG in the DescribeAutoScalingGroups response.
|
// there will always be only one ASG in the DescribeAutoScalingGroups response.
|
||||||
loadBalancerNames := asgDetails.AutoScalingGroups[0].LoadBalancerNames
|
loadBalancerNames := asgDetails.AutoScalingGroups[0].LoadBalancerNames
|
||||||
|
|
||||||
|
klog.Infof("Deregistering instance from classic loadBalancers: %v", aws.StringValueSlice(loadBalancerNames))
|
||||||
|
|
||||||
for {
|
for {
|
||||||
instanceDraining := false
|
instanceDraining := false
|
||||||
response, err := c.ELB().DescribeLoadBalancers(&elb.DescribeLoadBalancersInput{
|
for _, loadBalancerName := range loadBalancerNames {
|
||||||
LoadBalancerNames: loadBalancerNames,
|
response, err := c.ELB().DescribeInstanceHealth(&elb.DescribeInstanceHealthInput{
|
||||||
})
|
LoadBalancerName: loadBalancerName,
|
||||||
|
Instances: []*elb.Instance{{
|
||||||
|
InstanceId: aws.String(i.ID),
|
||||||
|
}},
|
||||||
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error describing load balancers %v: %v", loadBalancerNames, err)
|
return fmt.Errorf("error describing instance health: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, awsLb := range response.LoadBalancerDescriptions {
|
// describeInstanceHealth can return an empty list if the instance was already terminated.
|
||||||
for _, instance := range awsLb.Instances {
|
if len(response.InstanceStates) == 0 {
|
||||||
if aws.StringValue(instance.InstanceId) == i.ID {
|
continue
|
||||||
c.ELB().DeregisterInstancesFromLoadBalancer(&elb.DeregisterInstancesFromLoadBalancerInput{
|
}
|
||||||
LoadBalancerName: awsLb.LoadBalancerName,
|
|
||||||
Instances: []*elb.Instance{instance},
|
// there will be only one instance in the DescribeInstanceHealth response.
|
||||||
})
|
if aws.StringValue(response.InstanceStates[0].State) == instanceInServiceState {
|
||||||
instanceDraining = true
|
c.ELB().DeregisterInstancesFromLoadBalancer(&elb.DeregisterInstancesFromLoadBalancerInput{
|
||||||
}
|
LoadBalancerName: loadBalancerName,
|
||||||
|
Instances: []*elb.Instance{{
|
||||||
|
InstanceId: aws.String(i.ID),
|
||||||
|
}},
|
||||||
|
})
|
||||||
|
instanceDraining = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue