diff --git a/pkg/model/awsmodel/autoscalinggroup.go b/pkg/model/awsmodel/autoscalinggroup.go index de922bb962..1149cacbc3 100644 --- a/pkg/model/awsmodel/autoscalinggroup.go +++ b/pkg/model/awsmodel/autoscalinggroup.go @@ -364,6 +364,8 @@ func (b *AutoscalingGroupModelBuilder) buildAutoScalingGroupTask(c *fi.ModelBuil t.InstanceProtection = ig.Spec.InstanceProtection + t.TargetGroups = []*awstasks.TargetGroup{} + // When Spotinst Elastigroups are used, there is no need to create // a separate task for the attachment of the load balancer since this // is already done as part of the Elastigroup's creation, if needed. @@ -384,7 +386,7 @@ func (b *AutoscalingGroupModelBuilder) buildAutoScalingGroupTask(c *fi.ModelBuil } } - for _, extLB := range ig.Spec.ExternalLoadBalancers { + for i, extLB := range ig.Spec.ExternalLoadBalancers { if extLB.LoadBalancerName != nil { lb := &awstasks.ClassicLoadBalancer{ Name: extLB.LoadBalancerName, @@ -397,7 +399,7 @@ func (b *AutoscalingGroupModelBuilder) buildAutoScalingGroupTask(c *fi.ModelBuil if extLB.TargetGroupARN != nil { tg := &awstasks.TargetGroup{ - Name: extLB.TargetGroupARN, + Name: fi.String(fmt.Sprintf("external-tg-%d", i)), ARN: extLB.TargetGroupARN, Shared: fi.Bool(true), } diff --git a/upup/pkg/fi/cloudup/awstasks/autoscalinggroup.go b/upup/pkg/fi/cloudup/awstasks/autoscalinggroup.go index 130d27c989..4e02911bc9 100644 --- a/upup/pkg/fi/cloudup/awstasks/autoscalinggroup.go +++ b/upup/pkg/fi/cloudup/awstasks/autoscalinggroup.go @@ -162,6 +162,7 @@ func (e *AutoscalingGroup) Find(c *fi.Context) (*AutoscalingGroup, error) { } } + actual.TargetGroups = []*TargetGroup{} if len(g.TargetGroupARNs) > 0 { actualTGs := make([]*TargetGroup, 0) for _, tg := range g.TargetGroupARNs { @@ -643,7 +644,7 @@ func (v *AutoscalingGroup) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Autos } if detachTGRequest != nil { if _, err := t.Cloud.Autoscaling().DetachLoadBalancerTargetGroups(detachTGRequest); err != nil { - return fmt.Errorf("error attaching TargetGroups: %v", err) + return fmt.Errorf("error detaching TargetGroups: %v", err) } } if attachTGRequest != nil { diff --git a/upup/pkg/fi/cloudup/awstasks/network_load_balancer.go b/upup/pkg/fi/cloudup/awstasks/network_load_balancer.go index 5b13386add..1f26612e59 100644 --- a/upup/pkg/fi/cloudup/awstasks/network_load_balancer.go +++ b/upup/pkg/fi/cloudup/awstasks/network_load_balancer.go @@ -362,6 +362,8 @@ func (e *NetworkLoadBalancer) Find(c *fi.Context) (*NetworkLoadBalancer, error) return nil, fmt.Errorf("error querying for NLB listeners :%v", err) } + actual.Listeners = []*NetworkLoadBalancerListener{} + actual.TargetGroups = []*TargetGroup{} for _, l := range response.Listeners { actualListener := &NetworkLoadBalancerListener{} actualListener.Port = int(aws.Int64Value(l.Port)) diff --git a/upup/pkg/fi/cloudup/awstasks/targetgroup.go b/upup/pkg/fi/cloudup/awstasks/targetgroup.go index 2a514779a9..f4cde9b2c4 100644 --- a/upup/pkg/fi/cloudup/awstasks/targetgroup.go +++ b/upup/pkg/fi/cloudup/awstasks/targetgroup.go @@ -60,8 +60,7 @@ func (e *TargetGroup) Find(c *fi.Context) (*TargetGroup, error) { request := &elbv2.DescribeTargetGroupsInput{} if e.ARN != nil { request.TargetGroupArns = []*string{e.ARN} - } - if e.Name != nil { + } else if e.Name != nil { request.Names = []*string{e.Name} } @@ -200,9 +199,6 @@ type OrderTargetGroupsByName []*TargetGroup func (a OrderTargetGroupsByName) Len() int { return len(a) } func (a OrderTargetGroupsByName) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a OrderTargetGroupsByName) Less(i, j int) bool { - if a[i].ARN != nil || a[j].ARN != nil { - return fi.StringValue(a[i].ARN) < fi.StringValue(a[j].ARN) - } return fi.StringValue(a[i].Name) < fi.StringValue(a[j].Name) }