update gatewayRoute to contain spec.parentRefs instead of extracting that directly from each route during the resolve stage

This commit is contained in:
David Winiarski 2025-04-07 06:53:58 -06:00
parent cb4b6a222e
commit 127122de09
No known key found for this signature in database
6 changed files with 33 additions and 44 deletions

View File

@ -34,7 +34,6 @@ import (
coreinformers "k8s.io/client-go/informers/core/v1"
cache "k8s.io/client-go/tools/cache"
v1 "sigs.k8s.io/gateway-api/apis/v1"
"sigs.k8s.io/gateway-api/apis/v1alpha2"
v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
gateway "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
informers "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions"
@ -55,6 +54,8 @@ type gatewayRoute interface {
Metadata() *metav1.ObjectMeta
// Hostnames returns the route's specified hostnames.
Hostnames() []v1.Hostname
// ParentRefs returns the route's parent references as defined in the route spec.
ParentRefs() []v1.ParentReference
// Protocol returns the route's protocol type.
Protocol() v1.ProtocolType
// RouteStatus returns the route's common status.
@ -295,7 +296,7 @@ func (c *gatewayRouteResolver) resolve(rt gatewayRoute) (map[string]endpoint.Tar
}
hostTargets := make(map[string]endpoint.Targets)
routeParentRefs := getRouteParentRefs(rt)
routeParentRefs := rt.ParentRefs()
if len(routeParentRefs) == 0 {
log.Debugf("No parent references found for %s %s/%s", c.src.rtKind, rt.Metadata().Namespace, rt.Metadata().Name)
@ -488,23 +489,6 @@ func gwRouteIsAccepted(conds []metav1.Condition) bool {
}
return false
}
func getRouteParentRefs(rt gatewayRoute) []v1.ParentReference {
routeParentRefs := make([]v1.ParentReference, 0)
switch rt.Object().(type) {
case *v1.HTTPRoute:
routeParentRefs = rt.Object().(*v1.HTTPRoute).Spec.ParentRefs
case *v1.GRPCRoute:
routeParentRefs = rt.Object().(*v1.GRPCRoute).Spec.ParentRefs
case *v1alpha2.UDPRoute:
routeParentRefs = rt.Object().(*v1alpha2.UDPRoute).Spec.ParentRefs
case *v1alpha2.TCPRoute:
routeParentRefs = rt.Object().(*v1alpha2.TCPRoute).Spec.ParentRefs
case *v1alpha2.TLSRoute:
routeParentRefs = rt.Object().(*v1alpha2.TLSRoute).Spec.ParentRefs
}
return routeParentRefs
}
func uniqueTargets(targets endpoint.Targets) endpoint.Targets {
if len(targets) < 2 {

View File

@ -33,11 +33,12 @@ func NewGatewayGRPCRouteSource(clients ClientGenerator, config *Config) (Source,
type gatewayGRPCRoute struct{ route v1.GRPCRoute } // NOTE: Must update TypeMeta in List when changing the APIVersion.
func (rt *gatewayGRPCRoute) Object() kubeObject { return &rt.route }
func (rt *gatewayGRPCRoute) Metadata() *metav1.ObjectMeta { return &rt.route.ObjectMeta }
func (rt *gatewayGRPCRoute) Hostnames() []v1.Hostname { return rt.route.Spec.Hostnames }
func (rt *gatewayGRPCRoute) Protocol() v1.ProtocolType { return v1.HTTPSProtocolType }
func (rt *gatewayGRPCRoute) RouteStatus() v1.RouteStatus { return rt.route.Status.RouteStatus }
func (rt *gatewayGRPCRoute) Object() kubeObject { return &rt.route }
func (rt *gatewayGRPCRoute) Metadata() *metav1.ObjectMeta { return &rt.route.ObjectMeta }
func (rt *gatewayGRPCRoute) Hostnames() []v1.Hostname { return rt.route.Spec.Hostnames }
func (rt *gatewayGRPCRoute) ParentRefs() []v1.ParentReference { return rt.route.Spec.ParentRefs }
func (rt *gatewayGRPCRoute) Protocol() v1.ProtocolType { return v1.HTTPSProtocolType }
func (rt *gatewayGRPCRoute) RouteStatus() v1.RouteStatus { return rt.route.Status.RouteStatus }
type gatewayGRPCRouteInformer struct {
informers_v1.GRPCRouteInformer

View File

@ -34,11 +34,12 @@ func NewGatewayHTTPRouteSource(clients ClientGenerator, config *Config) (Source,
type gatewayHTTPRoute struct{ route v1.HTTPRoute } // NOTE: Must update TypeMeta in List when changing the APIVersion.
func (rt *gatewayHTTPRoute) Object() kubeObject { return &rt.route }
func (rt *gatewayHTTPRoute) Metadata() *metav1.ObjectMeta { return &rt.route.ObjectMeta }
func (rt *gatewayHTTPRoute) Hostnames() []v1.Hostname { return rt.route.Spec.Hostnames }
func (rt *gatewayHTTPRoute) Protocol() v1.ProtocolType { return v1.HTTPProtocolType }
func (rt *gatewayHTTPRoute) RouteStatus() v1.RouteStatus { return rt.route.Status.RouteStatus }
func (rt *gatewayHTTPRoute) Object() kubeObject { return &rt.route }
func (rt *gatewayHTTPRoute) Metadata() *metav1.ObjectMeta { return &rt.route.ObjectMeta }
func (rt *gatewayHTTPRoute) Hostnames() []v1.Hostname { return rt.route.Spec.Hostnames }
func (rt *gatewayHTTPRoute) ParentRefs() []v1.ParentReference { return rt.route.Spec.ParentRefs }
func (rt *gatewayHTTPRoute) Protocol() v1.ProtocolType { return v1.HTTPProtocolType }
func (rt *gatewayHTTPRoute) RouteStatus() v1.RouteStatus { return rt.route.Status.RouteStatus }
type gatewayHTTPRouteInformer struct {
informers_v1beta1.HTTPRouteInformer

View File

@ -34,11 +34,12 @@ func NewGatewayTCPRouteSource(clients ClientGenerator, config *Config) (Source,
type gatewayTCPRoute struct{ route v1alpha2.TCPRoute } // NOTE: Must update TypeMeta in List when changing the APIVersion.
func (rt *gatewayTCPRoute) Object() kubeObject { return &rt.route }
func (rt *gatewayTCPRoute) Metadata() *metav1.ObjectMeta { return &rt.route.ObjectMeta }
func (rt *gatewayTCPRoute) Hostnames() []v1.Hostname { return nil }
func (rt *gatewayTCPRoute) Protocol() v1.ProtocolType { return v1.TCPProtocolType }
func (rt *gatewayTCPRoute) RouteStatus() v1.RouteStatus { return rt.route.Status.RouteStatus }
func (rt *gatewayTCPRoute) Object() kubeObject { return &rt.route }
func (rt *gatewayTCPRoute) Metadata() *metav1.ObjectMeta { return &rt.route.ObjectMeta }
func (rt *gatewayTCPRoute) Hostnames() []v1.Hostname { return nil }
func (rt *gatewayTCPRoute) ParentRefs() []v1.ParentReference { return rt.route.Spec.ParentRefs }
func (rt *gatewayTCPRoute) Protocol() v1.ProtocolType { return v1.TCPProtocolType }
func (rt *gatewayTCPRoute) RouteStatus() v1.RouteStatus { return rt.route.Status.RouteStatus }
type gatewayTCPRouteInformer struct {
informers_v1a2.TCPRouteInformer

View File

@ -34,11 +34,12 @@ func NewGatewayTLSRouteSource(clients ClientGenerator, config *Config) (Source,
type gatewayTLSRoute struct{ route v1alpha2.TLSRoute } // NOTE: Must update TypeMeta in List when changing the APIVersion.
func (rt *gatewayTLSRoute) Object() kubeObject { return &rt.route }
func (rt *gatewayTLSRoute) Metadata() *metav1.ObjectMeta { return &rt.route.ObjectMeta }
func (rt *gatewayTLSRoute) Hostnames() []v1.Hostname { return rt.route.Spec.Hostnames }
func (rt *gatewayTLSRoute) Protocol() v1.ProtocolType { return v1.TLSProtocolType }
func (rt *gatewayTLSRoute) RouteStatus() v1.RouteStatus { return rt.route.Status.RouteStatus }
func (rt *gatewayTLSRoute) Object() kubeObject { return &rt.route }
func (rt *gatewayTLSRoute) Metadata() *metav1.ObjectMeta { return &rt.route.ObjectMeta }
func (rt *gatewayTLSRoute) Hostnames() []v1.Hostname { return rt.route.Spec.Hostnames }
func (rt *gatewayTLSRoute) ParentRefs() []v1.ParentReference { return rt.route.Spec.ParentRefs }
func (rt *gatewayTLSRoute) Protocol() v1.ProtocolType { return v1.TLSProtocolType }
func (rt *gatewayTLSRoute) RouteStatus() v1.RouteStatus { return rt.route.Status.RouteStatus }
type gatewayTLSRouteInformer struct {
informers_v1a2.TLSRouteInformer

View File

@ -34,11 +34,12 @@ func NewGatewayUDPRouteSource(clients ClientGenerator, config *Config) (Source,
type gatewayUDPRoute struct{ route v1alpha2.UDPRoute } // NOTE: Must update TypeMeta in List when changing the APIVersion.
func (rt *gatewayUDPRoute) Object() kubeObject { return &rt.route }
func (rt *gatewayUDPRoute) Metadata() *metav1.ObjectMeta { return &rt.route.ObjectMeta }
func (rt *gatewayUDPRoute) Hostnames() []v1.Hostname { return nil }
func (rt *gatewayUDPRoute) Protocol() v1.ProtocolType { return v1.UDPProtocolType }
func (rt *gatewayUDPRoute) RouteStatus() v1.RouteStatus { return rt.route.Status.RouteStatus }
func (rt *gatewayUDPRoute) Object() kubeObject { return &rt.route }
func (rt *gatewayUDPRoute) Metadata() *metav1.ObjectMeta { return &rt.route.ObjectMeta }
func (rt *gatewayUDPRoute) Hostnames() []v1.Hostname { return nil }
func (rt *gatewayUDPRoute) ParentRefs() []v1.ParentReference { return rt.route.Spec.ParentRefs }
func (rt *gatewayUDPRoute) Protocol() v1.ProtocolType { return v1.UDPProtocolType }
func (rt *gatewayUDPRoute) RouteStatus() v1.RouteStatus { return rt.route.Status.RouteStatus }
type gatewayUDPRouteInformer struct {
informers_v1a2.UDPRouteInformer