Skip to content

Commit 0b77880

Browse files
shraddhabangniclask25
authored and
niclask25
committed
[feat: gw api] Add eventhandler for the gateway resource
1 parent b7b38a7 commit 0b77880

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
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+
"sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
9+
"sigs.k8s.io/controller-runtime/pkg/client"
10+
"sigs.k8s.io/controller-runtime/pkg/event"
11+
"sigs.k8s.io/controller-runtime/pkg/handler"
12+
"sigs.k8s.io/controller-runtime/pkg/reconcile"
13+
gwv1 "sigs.k8s.io/gateway-api/apis/v1"
14+
)
15+
16+
// NewEnqueueRequestsForGatewayEvent creates handler for Gateway resources
17+
func NewEnqueueRequestsForGatewayEventHandler(
18+
k8sClient client.Client, eventRecorder record.EventRecorder, gwController string, logger logr.Logger) handler.TypedEventHandler[*gwv1.Gateway, reconcile.Request] {
19+
return &enqueueRequestsForGatewayEvent{
20+
k8sClient: k8sClient,
21+
eventRecorder: eventRecorder,
22+
gwController: gwController,
23+
logger: logger,
24+
}
25+
}
26+
27+
var _ handler.TypedEventHandler[*gwv1.Gateway, reconcile.Request] = (*enqueueRequestsForGatewayEvent)(nil)
28+
29+
// enqueueRequestsForGatewayEvent handles GatewayClass events
30+
type enqueueRequestsForGatewayEvent struct {
31+
k8sClient client.Client
32+
eventRecorder record.EventRecorder
33+
gwController string
34+
logger logr.Logger
35+
}
36+
37+
func (h *enqueueRequestsForGatewayEvent) Create(ctx context.Context, e event.TypedCreateEvent[*gwv1.Gateway], queue workqueue.TypedRateLimitingInterface[reconcile.Request]) {
38+
gw := e.Object
39+
h.logger.V(1).Info("enqueue gateway create event", "gateway", k8s.NamespacedName(gw))
40+
h.enqueueImpactedGateway(ctx, gw, queue)
41+
}
42+
43+
func (h *enqueueRequestsForGatewayEvent) Update(ctx context.Context, e event.TypedUpdateEvent[*gwv1.Gateway], queue workqueue.TypedRateLimitingInterface[reconcile.Request]) {
44+
gw := e.ObjectNew
45+
h.logger.V(1).Info("enqueue gateway update event", "gateway", k8s.NamespacedName(gw))
46+
h.enqueueImpactedGateway(ctx, gw, queue)
47+
}
48+
49+
func (h *enqueueRequestsForGatewayEvent) Delete(ctx context.Context, e event.TypedDeleteEvent[*gwv1.Gateway], queue workqueue.TypedRateLimitingInterface[reconcile.Request]) {
50+
gw := e.Object
51+
h.logger.V(1).Info("enqueue gateway delete event", "gateway", k8s.NamespacedName(gw))
52+
h.enqueueImpactedGateway(ctx, gw, queue)
53+
}
54+
55+
func (h *enqueueRequestsForGatewayEvent) Generic(ctx context.Context, e event.TypedGenericEvent[*gwv1.Gateway], queue workqueue.TypedRateLimitingInterface[reconcile.Request]) {
56+
gw := e.Object
57+
h.logger.V(1).Info("enqueue gateway delete event", "gateway", k8s.NamespacedName(gw))
58+
h.enqueueImpactedGateway(ctx, gw, queue)
59+
}
60+
61+
func (h *enqueueRequestsForGatewayEvent) enqueueImpactedGateway(ctx context.Context, gw *gwv1.Gateway, queue workqueue.TypedRateLimitingInterface[reconcile.Request]) {
62+
if gw == nil {
63+
return
64+
}
65+
if IsGatewayManagedByLBController(ctx, h.k8sClient, gw, h.gwController) {
66+
h.logger.V(1).Info("enqueue gateway",
67+
"gateway", k8s.NamespacedName(gw))
68+
queue.Add(reconcile.Request{NamespacedName: k8s.NamespacedName(gw)})
69+
}
70+
}

controllers/gateway/gateway_controller.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,11 @@ func (r *gatewayReconciler) SetupWatches(ctx context.Context, c controller.Contr
331331

332332
func (r *gatewayReconciler) setupCommonGatewayControllerWatches(ctrl controller.Controller, mgr ctrl.Manager) error {
333333
loggerPrefix := r.logger.WithName("eventHandlers")
334+
335+
gwEventHandler := eventhandlers.NewEnqueueRequestsForGatewayEventHandler(r.k8sClient, r.eventRecorder, r.controllerName,
336+
loggerPrefix.WithName("Gateway"))
337+
ctrl.Watch(source.Kind(mgr.GetCache(), &gwv1.Gateway{}, gwEventHandler))
338+
334339
gwClassEventChan := make(chan event.TypedGenericEvent[*gwv1.GatewayClass])
335340
lbConfigEventChan := make(chan event.TypedGenericEvent[*elbv2gw.LoadBalancerConfiguration])
336341

0 commit comments

Comments
 (0)