Skip to content

Commit 29e7577

Browse files
authored
Merge pull request #4689 from zac-nixon/main
ignore listenerset when CRD is missing
2 parents 1f0cfa6 + 1c39f78 commit 29e7577

File tree

12 files changed

+186
-90
lines changed

12 files changed

+186
-90
lines changed

controllers/gateway/gateway_controller.go

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ func newGatewayReconciler(controllerName string, lbType elbv2model.LoadBalancerT
110110
gatewayConditionUpdater: prepareGatewayConditionUpdate,
111111
targetGroupNameToArnMapper: targetGroupNameToArnMapper,
112112
listenerSetStatusSubmitter: listenerSetStatusSubmitter,
113+
listenerSetEnabled: controllerConfig.FeatureGates.Enabled(config.GatewayListenerSet),
113114
}
114115
}
115116

@@ -139,6 +140,7 @@ type gatewayReconciler struct {
139140
cfgResolver gatewayConfigResolver
140141
lbcEventChan chan event.TypedGenericEvent[*elbv2gw.LoadBalancerConfiguration]
141142
listenerSetStatusSubmitter ListenerSetStatusSubmitter
143+
listenerSetEnabled bool
142144
}
143145

144146
//+kubebuilder:rbac:groups=gateway.networking.k8s.io,resources=referencegrants,verbs=get;list;watch;patch
@@ -448,11 +450,13 @@ func (r *gatewayReconciler) updateGatewayStatusSuccess(ctx context.Context, lbSt
448450
needPatch = true
449451
}
450452

451-
connectedListenerSets := routeutils.CalculateAttachedListenerSets(loaderResults.ValidationResults.ListenerSetListenerValidation)
453+
if r.listenerSetEnabled {
454+
connectedListenerSets := routeutils.CalculateAttachedListenerSets(loaderResults.ValidationResults.ListenerSetListenerValidation)
452455

453-
if gw.Status.AttachedListenerSets == nil || *gw.Status.AttachedListenerSets != connectedListenerSets {
454-
gw.Status.AttachedListenerSets = &connectedListenerSets
455-
needPatch = true
456+
if gw.Status.AttachedListenerSets == nil || *gw.Status.AttachedListenerSets != connectedListenerSets {
457+
gw.Status.AttachedListenerSets = &connectedListenerSets
458+
needPatch = true
459+
}
456460
}
457461

458462
// update listeners status
@@ -462,12 +466,14 @@ func (r *gatewayReconciler) updateGatewayStatusSuccess(ctx context.Context, lbSt
462466
needPatch = true
463467
}
464468

465-
for nsn, listenerValidationResults := range loaderResults.ValidationResults.ListenerSetListenerValidation {
466-
r.listenerSetStatusSubmitter.Enqueue(buildListenerSetStatus(nsn, listenerValidationResults, isProgrammed))
467-
}
469+
if r.listenerSetEnabled {
470+
for nsn, listenerValidationResults := range loaderResults.ValidationResults.ListenerSetListenerValidation {
471+
r.listenerSetStatusSubmitter.Enqueue(buildListenerSetStatus(nsn, listenerValidationResults, isProgrammed))
472+
}
468473

469-
for _, rejectedListenerSet := range loaderResults.RejectedListenerSets {
470-
r.listenerSetStatusSubmitter.Enqueue(buildRejectedListenerSetStatus(rejectedListenerSet))
474+
for _, rejectedListenerSet := range loaderResults.RejectedListenerSets {
475+
r.listenerSetStatusSubmitter.Enqueue(buildRejectedListenerSetStatus(rejectedListenerSet))
476+
}
471477
}
472478

473479
if needPatch {
@@ -596,10 +602,6 @@ func (r *gatewayReconciler) setupALBGatewayControllerWatches(ctrl controller.Con
596602
loggerPrefix.WithName("ReferenceGrant"))
597603
secretEventHandler := eventhandlers.NewEnqueueRequestsForSecretEvent(listenerRuleConfigEventChan, r.k8sClient, r.eventRecorder,
598604
r.logger.WithName("eventHandlers").WithName("secret"))
599-
listenerSetEventHandler := eventhandlers.NewEnqueueRequestsForListenerSetEvent(
600-
r.k8sClient, r.eventRecorder, r.controllerName,
601-
loggerPrefix.WithName("ListenerSet"),
602-
)
603605
if err := ctrl.Watch(source.Channel(tbConfigEventChan, tgConfigEventHandler)); err != nil {
604606
return err
605607
}
@@ -637,8 +639,14 @@ func (r *gatewayReconciler) setupALBGatewayControllerWatches(ctrl controller.Con
637639
return err
638640
}
639641

640-
if err := ctrl.Watch(source.Kind(mgr.GetCache(), &gwv1.ListenerSet{}, listenerSetEventHandler)); err != nil {
641-
return err
642+
if r.listenerSetEnabled {
643+
listenerSetEventHandler := eventhandlers.NewEnqueueRequestsForListenerSetEvent(
644+
r.k8sClient, r.eventRecorder, r.controllerName,
645+
loggerPrefix.WithName("ListenerSet"),
646+
)
647+
if err := ctrl.Watch(source.Kind(mgr.GetCache(), &gwv1.ListenerSet{}, listenerSetEventHandler)); err != nil {
648+
return err
649+
}
642650
}
643651

644652
r.secretsManager = k8s.NewSecretsManager(clientSet, secretEventsChan, r.logger.WithName("secrets-manager"))
@@ -664,10 +672,6 @@ func (r *gatewayReconciler) setupNLBGatewayControllerWatches(ctrl controller.Con
664672
loggerPrefix.WithName("Service"), constants.NLBGatewayController)
665673
refGrantHandler := eventhandlers.NewEnqueueRequestsForReferenceGrantEvent(nil, nil, tcpRouteEventChan, udpRouteEventChan, tlsRouteEventChan, r.k8sClient, r.eventRecorder,
666674
loggerPrefix.WithName("ReferenceGrant"))
667-
listenerSetEventHandler := eventhandlers.NewEnqueueRequestsForListenerSetEvent(
668-
r.k8sClient, r.eventRecorder, r.controllerName,
669-
loggerPrefix.WithName("ListenerSet"),
670-
)
671675
if err := ctrl.Watch(source.Channel(tbConfigEventChan, tgConfigEventHandler)); err != nil {
672676
return err
673677
}
@@ -701,8 +705,14 @@ func (r *gatewayReconciler) setupNLBGatewayControllerWatches(ctrl controller.Con
701705
if err := ctrl.Watch(source.Kind(mgr.GetCache(), &gwv1.TLSRoute{}, tlsRouteEventHandler)); err != nil {
702706
return err
703707
}
704-
if err := ctrl.Watch(source.Kind(mgr.GetCache(), &gwv1.ListenerSet{}, listenerSetEventHandler)); err != nil {
705-
return err
708+
if r.listenerSetEnabled {
709+
listenerSetEventHandler := eventhandlers.NewEnqueueRequestsForListenerSetEvent(
710+
r.k8sClient, r.eventRecorder, r.controllerName,
711+
loggerPrefix.WithName("ListenerSet"),
712+
)
713+
if err := ctrl.Watch(source.Kind(mgr.GetCache(), &gwv1.ListenerSet{}, listenerSetEventHandler)); err != nil {
714+
return err
715+
}
706716
}
707717
return nil
708718

controllers/gateway/gateway_controller_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,11 @@ func Test_updateGatewayStatusSuccess_normalizesDNSNameToLowercase(t *testing.T)
156156
assert.NoError(t, err)
157157

158158
reconciler := &gatewayReconciler{
159-
k8sClient: k8sClient,
160-
logger: logr.Discard(),
161-
eventRecorder: record.NewFakeRecorder(10),
162-
gatewayConditionUpdater: prepareGatewayConditionUpdate,
159+
k8sClient: k8sClient,
160+
logger: logr.Discard(),
161+
eventRecorder: record.NewFakeRecorder(10),
162+
gatewayConditionUpdater: prepareGatewayConditionUpdate,
163+
listenerSetStatusSubmitter: &NoopListenerSetStatusSubmitter{},
163164
}
164165

165166
lbStatus := &elbv2model.LoadBalancerStatus{

controllers/gateway/listenerset_status_reconciler.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,14 @@ type ListenerSetStatusSubmitter interface {
2424
Enqueue(status routeutils.ListenerSetStatusData, listenerStatuses []gwv1.ListenerEntryStatus)
2525
}
2626

27+
// NoopListenerSetStatusSubmitter is used when the GatewayListenerSet feature gate is disabled.
28+
type NoopListenerSetStatusSubmitter struct{}
29+
30+
func (n *NoopListenerSetStatusSubmitter) Enqueue(_ routeutils.ListenerSetStatusData, _ []gwv1.ListenerEntryStatus) {
31+
}
32+
33+
var _ ListenerSetStatusSubmitter = &NoopListenerSetStatusSubmitter{}
34+
2735
type listenerSetStatusReconcilerImpl struct {
2836
queue workqueue.TypedDelayingInterface[routeutils.ListenerSetStatusData]
2937
listenerSetListenerCache map[types.NamespacedName]routeutils.ListenerSetListenerInfo

0 commit comments

Comments
 (0)