Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 20 additions & 18 deletions internal/provider/kubernetes/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand All @@ -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{
Expand All @@ -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
Expand Down
6 changes: 5 additions & 1 deletion internal/provider/kubernetes/routes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down