@@ -17,13 +17,12 @@ package controller
1717
1818import (
1919 "context"
20- "strings"
2120
22- objtypes "github.com/haproxytech/haproxy-unified-gateway/k8s/gate/object-types"
21+ utilsk8s "github.com/haproxytech/haproxy-unified-gateway/k8s/gate/utils-k8s"
22+
2323 "github.com/haproxytech/haproxy-unified-gateway/k8s/gate/utils"
2424 "k8s.io/apimachinery/pkg/types"
2525 "sigs.k8s.io/controller-runtime/pkg/client"
26- "sigs.k8s.io/controller-runtime/pkg/client/apiutil"
2726 "sigs.k8s.io/controller-runtime/pkg/handler"
2827 "sigs.k8s.io/controller-runtime/pkg/reconcile"
2928 gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
@@ -32,7 +31,7 @@ import (
3231// enqueueGatewayClassForHugGate returns a handler.EventHandler that enqueues all GatewayClasses
3332// related to an observed HugGate.
3433// The relationship is built via the `spec.parametersRef` field in the GatewayClass.
35- func enqueueGatewayClassForHugGate (ctrlclient client.Client ) handler.MapFunc {
34+ func enqueueGatewayClassForHugGate (ctrlclient client.Client , _ utilsk8s. ExtractGVK ) handler.MapFunc {
3635 return func (ctx context.Context , o client.Object ) []reconcile.Request {
3736 var requests []reconcile.Request
3837
@@ -71,7 +70,7 @@ func getGatewayClassParamsRefKey(gwc gatewayv1.GatewayClass) (types.NamespacedNa
7170// - The relationship is built via the `spec.parametersRef` field in the GatewayClass.
7271// Indirect:
7372// - related to the referenced GatewayClass that references this HugGate
74- func enqueueGatewayForHugGate (ctrlclint client.Client ) handler.MapFunc {
73+ func enqueueGatewayForHugGate (ctrlclint client.Client , _ utilsk8s. ExtractGVK ) handler.MapFunc {
7574 return func (ctx context.Context , o client.Object ) []reconcile.Request {
7675 var requests []reconcile.Request
7776
@@ -135,7 +134,7 @@ func getGatewayParamsRefKey(gw gatewayv1.Gateway) (types.NamespacedName, bool) {
135134
136135// enqueueGatewayForGatewayClass returns a handler.EventHandler that enqueues all Gateways
137136// related to an observed GatewayClass.
138- func enqueueGatewayForGatewayClass (ctrlclient client.Client ) handler.MapFunc {
137+ func enqueueGatewayForGatewayClass (ctrlclient client.Client , _ utilsk8s. ExtractGVK ) handler.MapFunc {
139138 return func (ctx context.Context , o client.Object ) []reconcile.Request {
140139 var requests []reconcile.Request
141140
@@ -162,7 +161,7 @@ func enqueueGatewayForGatewayClass(ctrlclient client.Client) handler.MapFunc {
162161
163162// enqueueGatewayForSecret returns a handler.EventHandler that enqueues all Gateways
164163// related to an observed Secret.
165- func enqueueGatewayForSecret (ctrlclient client.Client ) handler.MapFunc {
164+ func enqueueGatewayForSecret (ctrlclient client.Client , _ utilsk8s. ExtractGVK ) handler.MapFunc {
166165 return func (ctx context.Context , o client.Object ) []reconcile.Request {
167166 var requests []reconcile.Request
168167
@@ -181,7 +180,7 @@ func enqueueGatewayForSecret(ctrlclient client.Client) handler.MapFunc {
181180 }
182181 for _ , certRef := range listener .TLS .CertificateRefs {
183182 // We only accept v1.Secret
184- if ! isSecretGroupKindSupported (certRef ) {
183+ if ! utilsk8s . IsSecretGroupKindSupported (certRef ) {
185184 continue
186185 }
187186 secretNsName := utils .GetNamespacedName (string (certRef .Name ),
@@ -201,21 +200,9 @@ func enqueueGatewayForSecret(ctrlclient client.Client) handler.MapFunc {
201200 }
202201}
203202
204- // isSecretGroupKindSupported checks if the provided certificate reference has a supported Group and Kind.
205- // It only supports core `v1.Secret` resources.
206- func isSecretGroupKindSupported (certRef gatewayv1.SecretObjectReference ) bool {
207- if certRef .Kind != nil && * certRef .Kind != "Secret" {
208- return false
209- }
210- if certRef .Group != nil && * certRef .Group != "" {
211- return false
212- }
213- return true
214- }
215-
216203// enqueueHTTPRouteForGateway returns a handler.EventHandler that enqueues all HTTPRoutes
217204// related to an observed Gateway.
218- func enqueueHTTPRouteForGateway (ctrlclient client.Client ) handler.MapFunc {
205+ func enqueueHTTPRouteForGateway (ctrlclient client.Client , extractGVK utilsk8s. ExtractGVK ) handler.MapFunc {
219206 return func (ctx context.Context , o client.Object ) []reconcile.Request {
220207 var requests []reconcile.Request
221208
@@ -230,7 +217,7 @@ func enqueueHTTPRouteForGateway(ctrlclient client.Client) handler.MapFunc {
230217 for _ , route := range routeList .Items {
231218 for _ , parentRef := range route .Spec .ParentRefs {
232219 // We only accept v1.Gateway
233- if ! isParentRefGroupKindSupported (parentRef ) {
220+ if ! utilsk8s . IsParentRefGroupKindSupported (parentRef , extractGVK ) {
234221 continue
235222 }
236223 gwNsName := utils .GetNamespacedName (string (parentRef .Name ),
@@ -250,28 +237,9 @@ func enqueueHTTPRouteForGateway(ctrlclient client.Client) handler.MapFunc {
250237 }
251238}
252239
253- // isParentRefGroupKindSupported checks if the provided HTTPRoute parent reference has a supported Group and Kind.
254- // It only supports `gatewayv1.Gateway` resources.
255- func isParentRefGroupKindSupported (parentRef gatewayv1.ParentReference ) bool {
256- gatewaytype := objtypes .ObjectTypeGateway
257-
258- gvk , err := apiutil .GVKForObject (gatewaytype , scheme )
259- if err != nil {
260- return false
261- }
262-
263- if parentRef .Kind != nil && * parentRef .Kind != gatewayv1 .Kind (gvk .Kind ) {
264- return false
265- }
266- if parentRef .Group != nil && * parentRef .Group != gatewayv1 .Group (gvk .Group ) {
267- return false
268- }
269- return true
270- }
271-
272240// enqueueHTTPRouteForService returns a handler.EventHandler that enqueues all HTTPRoutes
273241// related to an observed Service.
274- func enqueueHTTPRouteForService (ctrlclient client.Client ) handler.MapFunc {
242+ func enqueueHTTPRouteForService (ctrlclient client.Client , extractGVK utilsk8s. ExtractGVK ) handler.MapFunc {
275243 return func (ctx context.Context , o client.Object ) []reconcile.Request {
276244 var requests []reconcile.Request
277245
@@ -288,7 +256,7 @@ func enqueueHTTPRouteForService(ctrlclient client.Client) handler.MapFunc {
288256 for _ , rule := range route .Spec .Rules {
289257 for _ , backendRef := range rule .BackendRefs {
290258 // We only accept v1.Service
291- if ! isBackendRefGroupKindSupported (backendRef .BackendObjectReference ) {
259+ if ! utilsk8s . IsBackendRefGroupKindSupported (backendRef .BackendObjectReference , extractGVK ) {
292260 continue
293261 }
294262 serviceNsName := utils .GetNamespacedName (
@@ -311,27 +279,9 @@ func enqueueHTTPRouteForService(ctrlclient client.Client) handler.MapFunc {
311279 }
312280}
313281
314- // isBackendRefGroupKindSupported checks if the provided HTTPRoute parent reference has a supported Group and Kind.
315- // It only supports `corev1.Service` resources.
316- func isBackendRefGroupKindSupported (backendRef gatewayv1.BackendObjectReference ) bool {
317- servicetype := objtypes .ObjectTypeService
318- serviceGVK , err := apiutil .GVKForObject (servicetype , scheme )
319- if err != nil {
320- return false
321- }
322-
323- if backendRef .Kind != nil && * backendRef .Kind != gatewayv1 .Kind (serviceGVK .Kind ) {
324- return false
325- }
326- if backendRef .Group != nil && * backendRef .Group != gatewayv1 .Group (serviceGVK .Group ) {
327- return false
328- }
329- return true
330- }
331-
332282// enqueueHTTPRouteForBackendCR returns a handler.EventHandler that enqueues all HTTPRoutes
333283// related to an observed Backend.
334- func enqueueHTTPRouteForBackendCR (ctrlclient client.Client ) handler.MapFunc {
284+ func enqueueHTTPRouteForBackendCR (ctrlclient client.Client , extractGVK utilsk8s. ExtractGVK ) handler.MapFunc {
335285 return func (ctx context.Context , o client.Object ) []reconcile.Request {
336286 var requests []reconcile.Request
337287
@@ -352,7 +302,7 @@ func enqueueHTTPRouteForBackendCR(ctrlclient client.Client) handler.MapFunc {
352302 continue
353303 }
354304 // We only accept v3.Backend
355- if ! isFilterExtensionRefKindSupported (filter .ExtensionRef ) {
305+ if ! utilsk8s . IsFilterExtensionRefKindSupported (filter .ExtensionRef , extractGVK ) {
356306 continue
357307 }
358308 nsName := types.NamespacedName {
@@ -372,24 +322,3 @@ func enqueueHTTPRouteForBackendCR(ctrlclient client.Client) handler.MapFunc {
372322 return requests
373323 }
374324}
375-
376- // isFilterExtensionRefKindSupported checks if the provided filter ExtensionRef has a supported Group and Kind.
377- // It only supports `v3.Backend` resources.
378- func isFilterExtensionRefKindSupported (extensionRef * gatewayv1.LocalObjectReference ) bool {
379- backendCRType := objtypes .ObjectTypeBackend
380- backendGVK , err := apiutil .GVKForObject (backendCRType , scheme )
381- if err != nil {
382- return false
383- }
384-
385- if extensionRef == nil {
386- return false
387- }
388- if ! strings .EqualFold (backendGVK .Kind , string (extensionRef .Kind )) {
389- return false
390- }
391- if backendGVK .Group != string (extensionRef .Group ) {
392- return false
393- }
394- return true
395- }
0 commit comments