in pkg/providers/gateway/validator.go [131:178]
func (v *Validator) getListenersConf(r *commonRoute, parentRef gatewayv1beta1.ParentReference) ([]*types.ListenerConf, error) {
var name, kind, namespace, sectionName string
name = string(parentRef.Name)
if parentRef.Kind != nil {
kind = string(*parentRef.Kind)
} else {
kind = "Gateway"
}
if parentRef.Namespace != nil {
namespace = string(*parentRef.Namespace)
}
if parentRef.SectionName != nil {
sectionName = string(*parentRef.SectionName)
}
// The only kind of parent resource with "Core" support is Gateway.
if kind != "Gateway" {
return nil, fmt.Errorf("ParentRef.Kind support Gateway only")
}
// When namespace unspecified this refers to the local namespace of the Route.
if namespace == "" {
namespace = r.routeNamespace
}
listeners := make([]*types.ListenerConf, 0)
if sectionName != "" {
listenerConf, err := v.provider.FindListener(namespace, name, sectionName)
if err != nil {
return nil, err
}
listeners = append(listeners, listenerConf)
} else {
_listeners, err := v.provider.QueryListeners(namespace, name)
if err != nil {
return nil, err
}
for _, listenerConf := range _listeners {
listeners = append(listeners, listenerConf)
}
}
if len(listeners) == 0 {
log.Warnw("can't find ListenerConf by ParentRef",
zap.Any("ParentRef", parentRef),
)
return nil, fmt.Errorf("can't find Listener by ParentRef")
}
return listeners, nil
}