diff --git a/internal/provider/kubernetes/controller.go b/internal/provider/kubernetes/controller.go index 5e4fd6668ee..cc94895ad15 100644 --- a/internal/provider/kubernetes/controller.go +++ b/internal/provider/kubernetes/controller.go @@ -520,23 +520,7 @@ func addReferenceGrantIndexers(ctx context.Context, mgr manager.Manager) error { // `.spec.rules[].filters`. This helps in querying for HTTPRoutes that are affected by a // particular AuthenticationFilter CRUD. func addHTTPRouteIndexers(ctx context.Context, mgr manager.Manager) error { - if err := mgr.GetFieldIndexer().IndexField(ctx, &gwapiv1b1.HTTPRoute{}, gatewayHTTPRouteIndex, func(rawObj client.Object) []string { - httproute := rawObj.(*gwapiv1b1.HTTPRoute) - var gateways []string - for _, parent := range httproute.Spec.ParentRefs { - if string(*parent.Kind) == gatewayapi.KindGateway { - // If an explicit Gateway namespace is not provided, use the HTTPRoute namespace to - // lookup the provided Gateway Name. - gateways = append(gateways, - types.NamespacedName{ - Namespace: gatewayapi.NamespaceDerefOr(parent.Namespace, httproute.Namespace), - Name: string(parent.Name), - }.String(), - ) - } - } - return gateways - }); err != nil { + if err := mgr.GetFieldIndexer().IndexField(ctx, &gwapiv1b1.HTTPRoute{}, gatewayHTTPRouteIndex, gatewayHTTPRouteIndexFunc); err != nil { return err } @@ -550,7 +534,7 @@ func addHTTPRouteIndexers(ctx context.Context, mgr manager.Manager) error { for _, rule := range httproute.Spec.Rules { for i := range rule.Filters { filter := rule.Filters[i] - if filter.Type == gwapiv1a2.HTTPRouteFilterExtensionRef { + if filter.Type == gwapiv1b1.HTTPRouteFilterExtensionRef { if err := gatewayapi.ValidateHTTPRouteFilter(&filter); err != nil { filters = append(filters, types.NamespacedName{ @@ -570,6 +554,24 @@ func addHTTPRouteIndexers(ctx context.Context, mgr manager.Manager) error { return nil } +func gatewayHTTPRouteIndexFunc(rawObj client.Object) []string { + httproute := rawObj.(*gwapiv1b1.HTTPRoute) + var gateways []string + for _, parent := range httproute.Spec.ParentRefs { + if parent.Kind == nil || string(*parent.Kind) == gatewayapi.KindGateway { + // If an explicit Gateway namespace is not provided, use the HTTPRoute namespace to + // lookup the provided Gateway Name. + gateways = append(gateways, + types.NamespacedName{ + Namespace: gatewayapi.NamespaceDerefOr(parent.Namespace, httproute.Namespace), + Name: string(parent.Name), + }.String(), + ) + } + } + return gateways +} + func serviceHTTPRouteIndexFunc(rawObj client.Object) []string { httproute := rawObj.(*gwapiv1b1.HTTPRoute) var services []string diff --git a/internal/provider/kubernetes/routes_test.go b/internal/provider/kubernetes/routes_test.go index ed30490dd78..a513acd358a 100644 --- a/internal/provider/kubernetes/routes_test.go +++ b/internal/provider/kubernetes/routes_test.go @@ -211,7 +211,11 @@ func TestProcessHTTPRoutes(t *testing.T) { for _, filter := range tc.filters { objs = append(objs, filter) } - r.client = fakeclient.NewClientBuilder().WithScheme(envoygateway.GetScheme()).WithObjects(objs...).Build() + r.client = fakeclient.NewClientBuilder(). + WithScheme(envoygateway.GetScheme()). + WithObjects(objs...). + WithIndex(&gwapiv1b1.HTTPRoute{}, gatewayHTTPRouteIndex, gatewayHTTPRouteIndexFunc). + Build() // Process the test case httproutes. resourceTree := gatewayapi.NewResources()