@@ -3,6 +3,7 @@ package deploy
33import (
44"context"
55"fmt"
6+ "sync"
67
78"github.com/go-logr/logr"
89"sigs.k8s.io/aws-load-balancer-controller/pkg/aws/services"
@@ -24,6 +25,8 @@ const (
2425ingressController = "ingress"
2526)
2627
28+ // Using elbv2.TargetGroupsResult instead of defining our own
29+
2730// StackDeployer will deploy a resource stack into AWS and K8S.
2831type StackDeployer interface {
2932// Deploy a resource stack.
@@ -105,12 +108,24 @@ func (d *defaultStackDeployer) Deploy(ctx context.Context, stack core.Stack, met
105108ec2 .NewSecurityGroupSynthesizer (d .cloud .EC2 (), d .trackingProvider , d .ec2TaggingManager , d .ec2SGManager , d .vpcID , d .logger , stack ),
106109}
107110
111+ // Create a cached function that will only execute once to fetch target groups
112+ // This is to avoid duplicate ListTargetGroups API call
113+ findSDKTargetGroups := sync .OnceValue (func () elbv2.TargetGroupsResult {
114+ stackTags := d .trackingProvider .StackTags (stack )
115+ stackTagsLegacy := d .trackingProvider .StackTagsLegacy (stack )
116+ tgs , err := d .elbv2TaggingManager .ListTargetGroups (ctx ,
117+ tracking .TagsAsTagFilter (stackTags ),
118+ tracking .TagsAsTagFilter (stackTagsLegacy ))
119+ return elbv2.TargetGroupsResult {TargetGroups : tgs , Err : err }
120+ })
121+
108122if controllerName == ingressController {
109- synthesizers = append (synthesizers , elbv2 .NewFrontendNlbTargetSynthesizer (d .k8sClient , d .trackingProvider , d .elbv2TaggingManager , d .elbv2FrontendNlbTargetsManager , d .logger , d .featureGates , stack , frontendNlbTargetGroupDesiredState ))
123+ synthesizers = append (synthesizers , elbv2 .NewFrontendNlbTargetSynthesizer (
124+ d .k8sClient , d .trackingProvider , d .elbv2TaggingManager , d .elbv2FrontendNlbTargetsManager , d .logger , d .featureGates , stack , frontendNlbTargetGroupDesiredState , findSDKTargetGroups ))
110125}
111126
112127synthesizers = append (synthesizers ,
113- elbv2 .NewTargetGroupSynthesizer (d .cloud .ELBV2 (), d .trackingProvider , d .elbv2TaggingManager , d .elbv2TGManager , d .logger , d .featureGates , stack ),
128+ elbv2 .NewTargetGroupSynthesizer (d .cloud .ELBV2 (), d .trackingProvider , d .elbv2TaggingManager , d .elbv2TGManager , d .logger , d .featureGates , stack , findSDKTargetGroups ),
114129elbv2 .NewLoadBalancerSynthesizer (d .cloud .ELBV2 (), d .trackingProvider , d .elbv2TaggingManager , d .elbv2LBManager , d .logger , d .featureGates , d .controllerConfig , stack ),
115130elbv2 .NewListenerSynthesizer (d .cloud .ELBV2 (), d .elbv2TaggingManager , d .elbv2LSManager , d .logger , stack ),
116131elbv2 .NewListenerRuleSynthesizer (d .cloud .ELBV2 (), d .elbv2TaggingManager , d .elbv2LRManager , d .logger , d .featureGates , stack ),
0 commit comments