get loadbalancer details from asg

This commit is contained in:
Bronson Mirafuentes 2021-12-06 12:37:33 -08:00
parent c55d34af5f
commit b487016f80
1 changed files with 27 additions and 18 deletions

View File

@ -568,28 +568,37 @@ func deleteInstance(c AWSCloud, i *cloudinstances.CloudInstance) error {
// deregisterInstanceFromClassicLoadBalancer ensures that connectionDraining completes for the associated loadBalancer to ensure no dropped connections. // deregisterInstanceFromClassicLoadBalancer ensures that connectionDraining completes for the associated loadBalancer to ensure no dropped connections.
// if instance is associated with an NLB, this method no-ops. // if instance is associated with an NLB, this method no-ops.
func deregisterInstanceFromClassicLoadBalancer(c AWSCloud, i *cloudinstances.CloudInstance) error { func deregisterInstanceFromClassicLoadBalancer(c AWSCloud, i *cloudinstances.CloudInstance) error {
asg := i.CloudInstanceGroup.Raw.(*autoscaling.Group)
asgDetails, err := c.Autoscaling().DescribeAutoScalingGroups(&autoscaling.DescribeAutoScalingGroupsInput{
AutoScalingGroupNames: []*string{asg.AutoScalingGroupName},
})
if err != nil {
return fmt.Errorf("error describing autoScalingGroups: %v", err)
}
// there will always be only one loadBalancer in the response.
loadBalancerNames := asgDetails.AutoScalingGroups[0].LoadBalancerNames
for { for {
instanceDraining := false instanceDraining := false
for _, lb := range i.CloudInstanceGroup.InstanceGroup.Spec.ExternalLoadBalancers { response, err := c.ELB().DescribeLoadBalancers(&elb.DescribeLoadBalancersInput{
if lb.LoadBalancerName != nil { LoadBalancerNames: loadBalancerNames,
response, err := c.ELB().DescribeLoadBalancers(&elb.DescribeLoadBalancersInput{ })
LoadBalancerNames: []*string{lb.LoadBalancerName},
})
if err != nil { if err != nil {
return fmt.Errorf("error describing load balancer %q: %v", *lb.LoadBalancerName, err) return fmt.Errorf("error describing load balancers %v: %v", loadBalancerNames, err)
} }
for _, awsLb := range response.LoadBalancerDescriptions { for _, awsLb := range response.LoadBalancerDescriptions {
for _, instance := range awsLb.Instances { for _, instance := range awsLb.Instances {
if aws.StringValue(instance.InstanceId) == i.ID { if aws.StringValue(instance.InstanceId) == i.ID {
c.ELB().DeregisterInstancesFromLoadBalancer(&elb.DeregisterInstancesFromLoadBalancerInput{ c.ELB().DeregisterInstancesFromLoadBalancer(&elb.DeregisterInstancesFromLoadBalancerInput{
LoadBalancerName: lb.LoadBalancerName, LoadBalancerName: awsLb.LoadBalancerName,
Instances: []*elb.Instance{instance}, Instances: []*elb.Instance{instance},
}) })
instanceDraining = true instanceDraining = true
}
}
} }
} }
} }