Skip to content

Commit 3149c32

Browse files
committed
refactor to remove ptr to lb config
1 parent 2b80324 commit 3149c32

File tree

11 files changed

+109
-19
lines changed

11 files changed

+109
-19
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package eventhandlers
2+
3+
import (
4+
"context"
5+
"github.com/go-logr/logr"
6+
"k8s.io/client-go/tools/record"
7+
"k8s.io/client-go/util/workqueue"
8+
elbv2gw "sigs.k8s.io/aws-load-balancer-controller/apis/gateway/v1beta1"
9+
"sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
10+
"sigs.k8s.io/controller-runtime/pkg/client"
11+
"sigs.k8s.io/controller-runtime/pkg/event"
12+
"sigs.k8s.io/controller-runtime/pkg/handler"
13+
"sigs.k8s.io/controller-runtime/pkg/reconcile"
14+
gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
15+
)
16+
17+
// NewEnqueueRequestsForLoadBalancerConfigurationEvent creates handler for LoadBalancerConfiguration resources
18+
func NewEnqueueRequestsForLoadBalancerConfigurationEvent(gwClassEventChan chan<- event.TypedGenericEvent[*gatewayv1.GatewayClass],
19+
k8sClient client.Client, eventRecorder record.EventRecorder, gwController string, logger logr.Logger) handler.TypedEventHandler[*elbv2gw.LoadBalancerConfiguration, reconcile.Request] {
20+
return &enqueueRequestsForLoadBalancerConfigurationEvent{
21+
gwClassEventChan: gwClassEventChan,
22+
k8sClient: k8sClient,
23+
eventRecorder: eventRecorder,
24+
gwController: gwController,
25+
logger: logger,
26+
}
27+
}
28+
29+
var _ handler.TypedEventHandler[*elbv2gw.LoadBalancerConfiguration, reconcile.Request] = (*enqueueRequestsForLoadBalancerConfigurationEvent)(nil)
30+
31+
// enqueueRequestsForLoadBalancerConfigurationEvent handles LoadBalancerConfiguration events
32+
type enqueueRequestsForLoadBalancerConfigurationEvent struct {
33+
gwClassEventChan chan<- event.TypedGenericEvent[*gatewayv1.GatewayClass]
34+
k8sClient client.Client
35+
eventRecorder record.EventRecorder
36+
gwController string
37+
logger logr.Logger
38+
}
39+
40+
func (h *enqueueRequestsForLoadBalancerConfigurationEvent) Create(ctx context.Context, e event.TypedCreateEvent[*elbv2gw.LoadBalancerConfiguration], queue workqueue.TypedRateLimitingInterface[reconcile.Request]) {
41+
lbconfigNew := e.Object
42+
h.logger.V(1).Info("enqueue loadbalancerconfiguration create event", "loadbalancerconfiguration", lbconfigNew.Name)
43+
h.enqueueImpactedService(ctx, lbconfigNew, queue)
44+
}
45+
46+
func (h *enqueueRequestsForLoadBalancerConfigurationEvent) Update(ctx context.Context, e event.TypedUpdateEvent[*elbv2gw.LoadBalancerConfiguration], queue workqueue.TypedRateLimitingInterface[reconcile.Request]) {
47+
lbconfigNew := e.ObjectNew
48+
h.logger.V(1).Info("enqueue loadbalancerconfiguration update event", "loadbalancerconfiguration", lbconfigNew.Name)
49+
h.enqueueImpactedService(ctx, lbconfigNew, queue)
50+
}
51+
52+
func (h *enqueueRequestsForLoadBalancerConfigurationEvent) Delete(ctx context.Context, e event.TypedDeleteEvent[*elbv2gw.LoadBalancerConfiguration], queue workqueue.TypedRateLimitingInterface[reconcile.Request]) {
53+
lbconfig := e.Object
54+
h.logger.V(1).Info("enqueue loadbalancerconfiguration delete event", "loadbalancerconfiguration", lbconfig.Name)
55+
h.enqueueImpactedService(ctx, lbconfig, queue)
56+
}
57+
58+
func (h *enqueueRequestsForLoadBalancerConfigurationEvent) Generic(ctx context.Context, e event.TypedGenericEvent[*elbv2gw.LoadBalancerConfiguration], queue workqueue.TypedRateLimitingInterface[reconcile.Request]) {
59+
lbconfig := e.Object
60+
h.logger.V(1).Info("enqueue loadbalancerconfiguration generic event", "loadbalancerconfiguration", lbconfig.Name)
61+
h.enqueueImpactedService(ctx, lbconfig, queue)
62+
}
63+
64+
func (h *enqueueRequestsForLoadBalancerConfigurationEvent) enqueueImpactedService(ctx context.Context, lbconfig *elbv2gw.LoadBalancerConfiguration, queue workqueue.TypedRateLimitingInterface[reconcile.Request]) {
65+
gwClasses := GetImpactedGatewayClassesFromLbConfig(ctx, h.k8sClient, lbconfig, h.gwController)
66+
for _, gwClass := range gwClasses {
67+
h.logger.V(1).Info("enqueue gatewayClass for loadbalancerconfiguration event",
68+
"loadbalancerconfiguration", k8s.NamespacedName(lbconfig),
69+
"gatewayclass", k8s.NamespacedName(gwClass))
70+
h.gwClassEventChan <- event.TypedGenericEvent[*gatewayv1.GatewayClass]{
71+
Object: gwClass,
72+
}
73+
}
74+
gateways := GetImpactedGatewaysFromLbConfig(ctx, h.k8sClient, lbconfig, h.gwController)
75+
for _, gw := range gateways {
76+
if _, isAlreadyEnqueued := gwClasses[string(gw.Spec.GatewayClassName)]; !isAlreadyEnqueued {
77+
h.logger.V(1).Info("enqueue gateway for loadbalancerconfiguration event",
78+
"loadbalancerconfiguration", k8s.NamespacedName(lbconfig),
79+
"gateway", k8s.NamespacedName(gw))
80+
queue.Add(reconcile.Request{NamespacedName: k8s.NamespacedName(gw)})
81+
}
82+
}
83+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package gateway

controllers/gateway/reconciler.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package gateway

pkg/config/controller_config.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ const (
2323
flagServiceTargetENISGTags = "service-target-eni-security-group-tags"
2424
flagServiceMaxConcurrentReconciles = "service-max-concurrent-reconciles"
2525
flagTargetGroupBindingMaxConcurrentReconciles = "targetgroupbinding-max-concurrent-reconciles"
26+
flagGatewayClassMaxConcurrentReconciles = "gateway-class-max-concurrent-reconciles"
2627
flagALBGatewayMaxConcurrentReconciles = "alb-gateway-max-concurrent-reconciles"
2728
flagNLBGatewayMaxConcurrentReconciles = "nlb-gateway-max-concurrent-reconciles"
2829
flagTargetGroupBindingMaxExponentialBackoffDelay = "targetgroupbinding-max-exponential-backoff-delay"
@@ -107,6 +108,9 @@ type ControllerConfig struct {
107108
// Max exponential backoff delay for reconcile failures of TargetGroupBinding
108109
TargetGroupBindingMaxExponentialBackoffDelay time.Duration
109110

111+
// GatewayClassMaxConcurrentReconciles for concurrent reconcile loops for GatewayClass objects
112+
GatewayClassMaxConcurrentReconciles int
113+
110114
// ALBGatewayMaxConcurrentReconciles Max concurrent reconcile loops for ALB Gateway objects
111115
ALBGatewayMaxConcurrentReconciles int
112116

@@ -149,6 +153,8 @@ func (cfg *ControllerConfig) BindFlags(fs *pflag.FlagSet) {
149153
"Maximum number of concurrently running reconcile loops for service")
150154
fs.IntVar(&cfg.TargetGroupBindingMaxConcurrentReconciles, flagTargetGroupBindingMaxConcurrentReconciles, defaultMaxConcurrentReconciles,
151155
"Maximum number of concurrently running reconcile loops for targetGroupBinding")
156+
fs.IntVar(&cfg.GatewayClassMaxConcurrentReconciles, flagGatewayClassMaxConcurrentReconciles, 1,
157+
"Maximum number of concurrently running reconcile loops for gateway class changes")
152158
fs.IntVar(&cfg.ALBGatewayMaxConcurrentReconciles, flagALBGatewayMaxConcurrentReconciles, defaultMaxConcurrentReconciles,
153159
"Maximum number of concurrently running reconcile loops for alb gateway")
154160
fs.IntVar(&cfg.NLBGatewayMaxConcurrentReconciles, flagNLBGatewayMaxConcurrentReconciles, defaultMaxConcurrentReconciles,

pkg/gateway/constants/controller_constants.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,8 @@ const (
4141
// ALBRouteResourceGroupVersion the groupVersion used by HTTPRoute and GRPCRoute
4242
ALBRouteResourceGroupVersion = "gateway.networking.k8s.io/v1"
4343
)
44+
45+
const (
46+
// GatewayClassController the controller that reconciles gateway class changes
47+
GatewayClassController = "aws-lbc-gateway-class-controller"
48+
)

pkg/gateway/model/base_model_builder.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ type baseModelBuilder struct {
107107
defaultIPType elbv2model.IPAddressType
108108
}
109109

110-
func (baseBuilder *baseModelBuilder) Build(ctx context.Context, gw *gwv1.Gateway, lbConf *elbv2gw.LoadBalancerConfiguration, routes map[int32][]routeutils.RouteDescriptor) (core.Stack, *elbv2model.LoadBalancer, bool, error) {
110+
func (baseBuilder *baseModelBuilder) Build(ctx context.Context, gw *gwv1.Gateway, lbConf elbv2gw.LoadBalancerConfiguration, routes map[int32][]routeutils.RouteDescriptor) (core.Stack, *elbv2model.LoadBalancer, bool, error) {
111111
stack := core.NewDefaultStack(core.StackID(k8s.NamespacedName(gw)))
112112
tgBuilder := newTargetGroupBuilder(baseBuilder.clusterName, baseBuilder.vpcID, baseBuilder.gwTagHelper, baseBuilder.loadBalancerType, baseBuilder.disableRestrictedSGRules, baseBuilder.defaultTargetType)
113113
listenerBuilder := newListenerBuilder(ctx, baseBuilder.loadBalancerType, tgBuilder, baseBuilder.gwTagHelper, baseBuilder.clusterName, baseBuilder.defaultSSLPolicy, baseBuilder.acmClient, baseBuilder.allowedCAARNs, baseBuilder.logger)

pkg/gateway/model/gateway_tag_helper.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
)
99

1010
type tagHelper interface {
11-
getGatewayTags(lbConf *elbv2gw.LoadBalancerConfiguration) (map[string]string, error)
11+
getGatewayTags(lbConf elbv2gw.LoadBalancerConfiguration) (map[string]string, error)
1212
}
1313

1414
type tagHelperImpl struct {
@@ -23,12 +23,8 @@ func newTagHelper(externalManagedTags sets.Set[string], defaultTags map[string]s
2323
}
2424
}
2525

26-
func (t *tagHelperImpl) getGatewayTags(lbConf *elbv2gw.LoadBalancerConfiguration) (map[string]string, error) {
27-
var annotationTags map[string]string
28-
29-
if lbConf != nil {
30-
annotationTags = t.convertTagsToMap(lbConf.Spec.Tags)
31-
}
26+
func (t *tagHelperImpl) getGatewayTags(lbConf elbv2gw.LoadBalancerConfiguration) (map[string]string, error) {
27+
annotationTags := t.convertTagsToMap(lbConf.Spec.Tags)
3228

3329
if err := t.validateTagCollisionWithExternalManagedTags(annotationTags); err != nil {
3430
return nil, err

pkg/gateway/model/mock_gateway_tag_helper.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ type mockTagHelper struct {
77
err error
88
}
99

10-
func (m *mockTagHelper) getGatewayTags(lbConf *elbv2gw.LoadBalancerConfiguration) (map[string]string, error) {
10+
func (m *mockTagHelper) getGatewayTags(lbConf elbv2gw.LoadBalancerConfiguration) (map[string]string, error) {
1111
return m.tags, m.err
1212
}
1313

pkg/gateway/model/model_build_loadbalancer.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const (
1818
)
1919

2020
type loadBalancerBuilder interface {
21-
buildLoadBalancerSpec(scheme elbv2model.LoadBalancerScheme, ipAddressType elbv2model.IPAddressType, gw *gwv1.Gateway, lbConf *elbv2gw.LoadBalancerConfiguration, subnets buildLoadBalancerSubnetsOutput, securityGroupTokens []core.StringToken) (elbv2model.LoadBalancerSpec, error)
21+
buildLoadBalancerSpec(scheme elbv2model.LoadBalancerScheme, ipAddressType elbv2model.IPAddressType, gw *gwv1.Gateway, lbConf elbv2gw.LoadBalancerConfiguration, subnets buildLoadBalancerSubnetsOutput, securityGroupTokens []core.StringToken) (elbv2model.LoadBalancerSpec, error)
2222
}
2323

2424
type loadBalancerBuilderImpl struct {
@@ -35,7 +35,7 @@ func newLoadBalancerBuilder(loadBalancerType elbv2model.LoadBalancerType, tagHel
3535
}
3636
}
3737

38-
func (lbModelBuilder *loadBalancerBuilderImpl) buildLoadBalancerSpec(scheme elbv2model.LoadBalancerScheme, ipAddressType elbv2model.IPAddressType, gw *gwv1.Gateway, lbConf *elbv2gw.LoadBalancerConfiguration, subnets buildLoadBalancerSubnetsOutput, securityGroupTokens []core.StringToken) (elbv2model.LoadBalancerSpec, error) {
38+
func (lbModelBuilder *loadBalancerBuilderImpl) buildLoadBalancerSpec(scheme elbv2model.LoadBalancerScheme, ipAddressType elbv2model.IPAddressType, gw *gwv1.Gateway, lbConf elbv2gw.LoadBalancerConfiguration, subnets buildLoadBalancerSubnetsOutput, securityGroupTokens []core.StringToken) (elbv2model.LoadBalancerSpec, error) {
3939

4040
name, err := lbModelBuilder.buildLoadBalancerName(lbConf, gw, scheme)
4141
if err != nil {
@@ -70,15 +70,15 @@ func (lbModelBuilder *loadBalancerBuilderImpl) buildLoadBalancerSpec(scheme elbv
7070
return spec, nil
7171
}
7272

73-
func (lbModelBuilder *loadBalancerBuilderImpl) addL4Fields(spec *elbv2model.LoadBalancerSpec, lbConf *elbv2gw.LoadBalancerConfiguration, subnets buildLoadBalancerSubnetsOutput) {
73+
func (lbModelBuilder *loadBalancerBuilderImpl) addL4Fields(spec *elbv2model.LoadBalancerSpec, lbConf elbv2gw.LoadBalancerConfiguration, subnets buildLoadBalancerSubnetsOutput) {
7474
spec.EnablePrefixForIpv6SourceNat = lbModelBuilder.translateSourcePrefixEnabled(subnets.sourceIPv6NatEnabled)
7575

7676
if lbConf.Spec.EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic != nil {
7777
spec.SecurityGroupsInboundRulesOnPrivateLink = (*elbv2model.SecurityGroupsInboundRulesOnPrivateLinkStatus)(lbConf.Spec.EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic)
7878
}
7979
}
8080

81-
func (lbModelBuilder *loadBalancerBuilderImpl) addL7Fields(spec *elbv2model.LoadBalancerSpec, lbConf *elbv2gw.LoadBalancerConfiguration) {
81+
func (lbModelBuilder *loadBalancerBuilderImpl) addL7Fields(spec *elbv2model.LoadBalancerSpec, lbConf elbv2gw.LoadBalancerConfiguration) {
8282
spec.CustomerOwnedIPv4Pool = lbConf.Spec.CustomerOwnedIpv4Pool
8383
spec.IPv4IPAMPool = lbConf.Spec.IPv4IPAMPoolId
8484
}
@@ -90,7 +90,7 @@ func (lbModelBuilder *loadBalancerBuilderImpl) translateSourcePrefixEnabled(sour
9090
return elbv2model.EnablePrefixForIpv6SourceNatOff
9191
}
9292

93-
func (lbModelBuilder *loadBalancerBuilderImpl) buildLoadBalancerName(lbConf *elbv2gw.LoadBalancerConfiguration, gw *gwv1.Gateway, scheme elbv2model.LoadBalancerScheme) (string, error) {
93+
func (lbModelBuilder *loadBalancerBuilderImpl) buildLoadBalancerName(lbConf elbv2gw.LoadBalancerConfiguration, gw *gwv1.Gateway, scheme elbv2model.LoadBalancerScheme) (string, error) {
9494
if lbConf.Spec.LoadBalancerName != nil {
9595
name := *lbConf.Spec.LoadBalancerName
9696
return name, nil
@@ -106,7 +106,7 @@ func (lbModelBuilder *loadBalancerBuilderImpl) buildLoadBalancerName(lbConf *elb
106106
return fmt.Sprintf("k8s-%.8s-%.8s-%.10s", sanitizedNamespace, sanitizedName, uuid), nil
107107
}
108108

109-
func (lbModelBuilder *loadBalancerBuilderImpl) buildLoadBalancerAttributes(lbConf *elbv2gw.LoadBalancerConfiguration) []elbv2model.LoadBalancerAttribute {
109+
func (lbModelBuilder *loadBalancerBuilderImpl) buildLoadBalancerAttributes(lbConf elbv2gw.LoadBalancerConfiguration) []elbv2model.LoadBalancerAttribute {
110110
var attributes []elbv2model.LoadBalancerAttribute
111111
for _, attr := range lbConf.Spec.LoadBalancerAttributes {
112112
attributes = append(attributes, elbv2model.LoadBalancerAttribute{
@@ -117,8 +117,8 @@ func (lbModelBuilder *loadBalancerBuilderImpl) buildLoadBalancerAttributes(lbCon
117117
return attributes
118118
}
119119

120-
func (lbModelBuilder *loadBalancerBuilderImpl) buildLoadBalancerMinimumCapacity(lbConf *elbv2gw.LoadBalancerConfiguration) *elbv2model.MinimumLoadBalancerCapacity {
121-
if lbConf == nil || lbConf.Spec.MinimumLoadBalancerCapacity == nil {
120+
func (lbModelBuilder *loadBalancerBuilderImpl) buildLoadBalancerMinimumCapacity(lbConf elbv2gw.LoadBalancerConfiguration) *elbv2model.MinimumLoadBalancerCapacity {
121+
if lbConf.Spec.MinimumLoadBalancerCapacity == nil {
122122
return nil
123123
}
124124
return &elbv2model.MinimumLoadBalancerCapacity{

pkg/gateway/routeutils/http.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ func (httpRoute *httpRouteDescription) loadAttachedRules(ctx context.Context, k8
7171

7272
convertedRules = append(convertedRules, convertHTTPRouteRule(&rule, convertedBackends))
7373
}
74-
7574
httpRoute.rules = convertedRules
7675
return httpRoute, nil
7776
}

0 commit comments

Comments
 (0)