diff --git a/source/gateway.go b/source/gateway.go index 31608184b..f5dd69454 100644 --- a/source/gateway.go +++ b/source/gateway.go @@ -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 { diff --git a/source/gateway_grpcroute.go b/source/gateway_grpcroute.go index de93a72de..f2253f2db 100644 --- a/source/gateway_grpcroute.go +++ b/source/gateway_grpcroute.go @@ -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 diff --git a/source/gateway_httproute.go b/source/gateway_httproute.go index 4c063d4d7..ad3c4fcdc 100644 --- a/source/gateway_httproute.go +++ b/source/gateway_httproute.go @@ -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 diff --git a/source/gateway_tcproute.go b/source/gateway_tcproute.go index 863b4f62f..57ca6a555 100644 --- a/source/gateway_tcproute.go +++ b/source/gateway_tcproute.go @@ -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 diff --git a/source/gateway_tlsroute.go b/source/gateway_tlsroute.go index 0c9855885..9e77f3bc1 100644 --- a/source/gateway_tlsroute.go +++ b/source/gateway_tlsroute.go @@ -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 diff --git a/source/gateway_udproute.go b/source/gateway_udproute.go index ffc0987f4..82e213c58 100644 --- a/source/gateway_udproute.go +++ b/source/gateway_udproute.go @@ -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