@@ -6,12 +6,14 @@ import (
66 "github.com/pkg/errors"
77 "k8s.io/apimachinery/pkg/util/sets"
88 elbv2gw "sigs.k8s.io/aws-load-balancer-controller/apis/gateway/v1beta1"
9+ "sigs.k8s.io/aws-load-balancer-controller/pkg/annotations"
910 "sigs.k8s.io/aws-load-balancer-controller/pkg/aws/services"
1011 "sigs.k8s.io/aws-load-balancer-controller/pkg/config"
1112 elbv2deploy "sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/elbv2"
1213 "sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking"
1314 "sigs.k8s.io/aws-load-balancer-controller/pkg/gateway/routeutils"
1415 "sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
16+ lbcmetrics "sigs.k8s.io/aws-load-balancer-controller/pkg/metrics/lbc"
1517 "sigs.k8s.io/aws-load-balancer-controller/pkg/model/core"
1618 elbv2model "sigs.k8s.io/aws-load-balancer-controller/pkg/model/elbv2"
1719 "sigs.k8s.io/aws-load-balancer-controller/pkg/networking"
@@ -23,7 +25,7 @@ import (
2325// Builder builds the model stack for a Gateway resource.
2426type Builder interface {
2527 // Build model stack for a gateway
26- Build (ctx context.Context , gw * gwv1.Gateway , lbConf * elbv2gw.LoadBalancerConfiguration , routes map [int ][]routeutils.RouteDescriptor ) (core.Stack , * elbv2model.LoadBalancer , bool , error )
28+ Build (ctx context.Context , gw * gwv1.Gateway , lbConf * elbv2gw.LoadBalancerConfiguration , routes map [int32 ][]routeutils.RouteDescriptor ) (core.Stack , * elbv2model.LoadBalancer , bool , error )
2729}
2830
2931// NewModelBuilder construct a new baseModelBuilder
@@ -38,14 +40,28 @@ func NewModelBuilder(subnetsResolver networking.SubnetsResolver,
3840 subnetBuilder := newSubnetModelBuilder (loadBalancerType , trackingProvider , subnetsResolver , elbv2TaggingManager )
3941 sgBuilder := newSecurityGroupBuilder (gwTagHelper , clusterName , enableBackendSG , sgResolver , backendSGProvider , logger )
4042 lbBuilder := newLoadBalancerBuilder (loadBalancerType , gwTagHelper , clusterName )
41- tgBuilder := newTargetGroupBuilder (clusterName , vpcID , gwTagHelper , loadBalancerType , disableRestrictedSGRules , defaultTargetType )
4243
4344 return & baseModelBuilder {
44- subnetBuilder : subnetBuilder ,
45- securityGroupBuilder : sgBuilder ,
46- lbBuilder : lbBuilder ,
47- tgBuilder : tgBuilder ,
48- logger : logger ,
45+ clusterName : clusterName ,
46+ vpcID : vpcID ,
47+ subnetsResolver : subnetsResolver ,
48+ backendSGProvider : backendSGProvider ,
49+ sgResolver : sgResolver ,
50+ vpcInfoProvider : vpcInfoProvider ,
51+ elbv2TaggingManager : elbv2TaggingManager ,
52+ featureGates : featureGates ,
53+ ec2Client : ec2Client ,
54+ subnetBuilder : subnetBuilder ,
55+ securityGroupBuilder : sgBuilder ,
56+ loadBalancerType : loadBalancerType ,
57+ lbBuilder : lbBuilder ,
58+ gwTagHelper : gwTagHelper ,
59+ logger : logger ,
60+ defaultTargetType : defaultTargetType ,
61+ externalManagedTags : externalManagedTags ,
62+ defaultSSLPolicy : defaultSSLPolicy ,
63+ defaultTags : defaultTags ,
64+ disableRestrictedSGRules : disableRestrictedSGRules ,
4965
5066 defaultLoadBalancerScheme : elbv2model .LoadBalancerScheme (defaultLoadBalancerScheme ),
5167 defaultIPType : elbv2model .IPAddressTypeIPV4 ,
@@ -55,19 +71,41 @@ func NewModelBuilder(subnetsResolver networking.SubnetsResolver,
5571var _ Builder = & baseModelBuilder {}
5672
5773type baseModelBuilder struct {
58- lbBuilder loadBalancerBuilder
59- logger logr.Logger
74+ clusterName string
75+ vpcID string
76+ loadBalancerType elbv2model.LoadBalancerType
77+ annotationParser annotations.Parser
78+ subnetsResolver networking.SubnetsResolver
79+ vpcInfoProvider networking.VPCInfoProvider
80+ backendSGProvider networking.BackendSGProvider
81+ sgResolver networking.SecurityGroupResolver
82+ elbv2TaggingManager elbv2deploy.TaggingManager
83+ featureGates config.FeatureGates
84+ enableIPTargetType bool
85+ enableManageBackendSGRules bool
86+ defaultTags map [string ]string
87+ externalManagedTags sets.Set [string ]
88+ defaultSSLPolicy string
89+ defaultTargetType string
90+ disableRestrictedSGRules bool
91+ ec2Client services.EC2
92+ metricsCollector lbcmetrics.MetricCollector
93+ lbBuilder loadBalancerBuilder
94+ gwTagHelper tagHelper
95+ listenerBuilder listenerBuilder
96+ logger logr.Logger
6097
6198 subnetBuilder subnetModelBuilder
6299 securityGroupBuilder securityGroupBuilder
63- tgBuilder targetGroupBuilder
64100
65101 defaultLoadBalancerScheme elbv2model.LoadBalancerScheme
66102 defaultIPType elbv2model.IPAddressType
67103}
68104
69- func (baseBuilder * baseModelBuilder ) Build (ctx context.Context , gw * gwv1.Gateway , lbConf * elbv2gw.LoadBalancerConfiguration , routes map [int ][]routeutils.RouteDescriptor ) (core.Stack , * elbv2model.LoadBalancer , bool , error ) {
105+ func (baseBuilder * baseModelBuilder ) Build (ctx context.Context , gw * gwv1.Gateway , lbConf * elbv2gw.LoadBalancerConfiguration , routes map [int32 ][]routeutils.RouteDescriptor ) (core.Stack , * elbv2model.LoadBalancer , bool , error ) {
70106 stack := core .NewDefaultStack (core .StackID (k8s .NamespacedName (gw )))
107+ tgBuilder := newTargetGroupBuilder (baseBuilder .clusterName , baseBuilder .vpcID , baseBuilder .gwTagHelper , baseBuilder .loadBalancerType , baseBuilder .disableRestrictedSGRules , baseBuilder .defaultTargetType )
108+ listenerBuilder := newListenerBuilder (baseBuilder .loadBalancerType , tgBuilder , baseBuilder .gwTagHelper , baseBuilder .clusterName , baseBuilder .defaultSSLPolicy , baseBuilder .logger )
71109 if gw .DeletionTimestamp != nil && ! gw .DeletionTimestamp .IsZero () {
72110 if baseBuilder .isDeleteProtected (lbConf ) {
73111 return nil , nil , false , errors .Errorf ("Unable to delete gateway %+v because deletion protection is enabled." , k8s .NamespacedName (gw ))
@@ -113,29 +151,8 @@ func (baseBuilder *baseModelBuilder) Build(ctx context.Context, gw *gwv1.Gateway
113151
114152 lb := elbv2model .NewLoadBalancer (stack , resourceIDLoadBalancer , spec )
115153
116- baseBuilder .logger .Info ("Got this route details" , "routes" , routes )
117- /* Target Groups */
118- // TODO - Figure out how to map this back to a listener?
119- tgByResID := make (map [string ]buildTargetGroupOutput )
120- for _ , descriptors := range routes {
121- for _ , descriptor := range descriptors {
122- for _ , rule := range descriptor .GetAttachedRules () {
123- for _ , backend := range rule .GetBackends () {
124- // TODO -- Figure out what to do with the return value (it's also inserted into the tgByResID map)
125- // TODO -- I'm not in love with this API.
126- _ , tgErr := baseBuilder .tgBuilder .buildTargetGroup (& tgByResID , gw , lbConf , lb .Spec .IPAddressType , descriptor , backend , securityGroups .backendSecurityGroupToken )
127- if tgErr != nil {
128- return nil , nil , false , err
129- }
130- }
131- }
132- }
133- }
134-
135- for tgResID , tgOut := range tgByResID {
136- tg := elbv2model .NewTargetGroup (stack , tgResID , tgOut .targetGroupSpec )
137- tgOut .bindingSpec .Template .Spec .TargetGroupARN = tg .TargetGroupARN ()
138- elbv2model .NewTargetGroupBindingResource (stack , tg .ID (), tgOut .bindingSpec )
154+ if err := listenerBuilder .buildListeners (stack , lb , securityGroups , gw , routes , lbConf ); err != nil {
155+ return nil , nil , false , err
139156 }
140157
141158 return stack , lb , securityGroups .backendSecurityGroupAllocated , nil
0 commit comments