@@ -257,8 +257,8 @@ func (r *gatewayQueries) getDelegatedChildren(
257
257
for _ , parentRule := range parent .Spec .Rules {
258
258
var refChildren []* RouteInfo
259
259
for _ , backendRef := range parentRule .BackendRefs {
260
- // Check if the backend reference is an HTTPRoute
261
- if ! backendref .RefIsHTTPRoute (backendRef .BackendObjectReference ) {
260
+ // Check if the backend delegated route reference
261
+ if ! backendref .RefIsDelegatedHTTPRoute (backendRef .BackendObjectReference ) {
262
262
continue
263
263
}
264
264
// Fetch child routes based on the backend reference
@@ -302,35 +302,41 @@ func (r *gatewayQueries) fetchChildRoutes(
302
302
backendRef gwv1.HTTPBackendRef ,
303
303
) ([]gwv1.HTTPRoute , error ) {
304
304
delegatedNs := parentNamespace
305
- if ! backendref .RefIsHTTPRoute (backendRef .BackendObjectReference ) {
306
- return nil , nil
307
- }
308
305
// Use the namespace specified in the backend reference if available
309
306
if backendRef .Namespace != nil {
310
307
delegatedNs = string (* backendRef .Namespace )
311
308
}
312
309
313
310
var refChildren []gwv1.HTTPRoute
314
- if string (backendRef .Name ) == "" || string (backendRef .Name ) == "*" {
315
- // Handle wildcard references by listing all HTTPRoutes in the specified namespace
316
- var hrlist gwv1.HTTPRouteList
317
- err := r .client .List (ctx , & hrlist , client .InNamespace (delegatedNs ))
318
- if err != nil {
319
- return nil , err
320
- }
321
- refChildren = append (refChildren , hrlist .Items ... )
322
- } else {
323
- // Lookup a specific child route by its name
324
- delegatedRef := types.NamespacedName {
325
- Namespace : delegatedNs ,
326
- Name : string (backendRef .Name ),
311
+ if backendref .RefIsHTTPRoute (backendRef .BackendObjectReference ) {
312
+ if string (backendRef .Name ) == "" || string (backendRef .Name ) == "*" {
313
+ // Handle wildcard references by listing all HTTPRoutes in the specified namespace
314
+ var hrlist gwv1.HTTPRouteList
315
+ err := r .client .List (ctx , & hrlist , client .InNamespace (delegatedNs ))
316
+ if err != nil {
317
+ return nil , err
318
+ }
319
+ refChildren = hrlist .Items
320
+ } else {
321
+ // Lookup a specific child route by its name
322
+ delegatedRef := types.NamespacedName {
323
+ Namespace : delegatedNs ,
324
+ Name : string (backendRef .Name ),
325
+ }
326
+ child := & gwv1.HTTPRoute {}
327
+ err := r .client .Get (ctx , delegatedRef , child )
328
+ if err != nil {
329
+ return nil , err
330
+ }
331
+ refChildren = append (refChildren , * child )
327
332
}
328
- child := & gwv1.HTTPRoute {}
329
- err := r .client .Get (ctx , delegatedRef , child )
333
+ } else if backendref .RefIsHTTPRouteDelegationLabelSelector (backendRef .BackendObjectReference ) {
334
+ var hrlist gwv1.HTTPRouteList
335
+ err := r .client .List (ctx , & hrlist , client .InNamespace (delegatedNs ), client.MatchingFields {HttpRouteDelegatedLabelSelector : string (backendRef .Name )})
330
336
if err != nil {
331
337
return nil , err
332
338
}
333
- refChildren = append ( refChildren , * child )
339
+ refChildren = hrlist . Items
334
340
}
335
341
// Check if no child routes were resolved and log an error if needed
336
342
if len (refChildren ) == 0 {
0 commit comments