func()

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
}