55
66 "github.com/go-logr/logr"
77 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
8+ "k8s.io/apimachinery/pkg/types"
9+ "sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
810 "sigs.k8s.io/controller-runtime/pkg/client"
911 gwv1 "sigs.k8s.io/gateway-api/apis/v1"
1012)
@@ -21,7 +23,7 @@ const (
2123)
2224
2325type listenerSetLoader interface {
24- retrieveListenersFromListenerSets (ctx context.Context , gateway gwv1.Gateway ) ([] gwv1.Listener , error )
26+ retrieveListenersFromListenerSets (ctx context.Context , gateway gwv1.Gateway ) (listenerSetLoadResult , [] * gwv1.ListenerSet , error )
2527}
2628
2729type listenerSetLoaderImpl struct {
@@ -34,37 +36,55 @@ func newListenerSetLoader(k8sClient client.Client, logger logr.Logger) listenerS
3436 return & listenerSetLoaderImpl {
3537 k8sClient : k8sClient ,
3638 namespaceSelector : newNamespaceSelector (k8sClient ),
37- logger : logger . WithName ( "listener-set-loader" ) ,
39+ logger : logger ,
3840 }
3941}
4042
41- func ( l * listenerSetLoaderImpl ) retrieveListenersFromListenerSets ( ctx context. Context , gateway gwv1. Gateway ) ([]gwv1. Listener , error ) {
42- return []gwv1. Listener {}, nil
43-
43+ type listenerSetLoadResult struct {
44+ listenersPerListenerSet map [types. NamespacedName ][] listenerSetListenerSource
45+ acceptedListenerSets [] * gwv1. ListenerSet
4446}
4547
46- func (l * listenerSetLoaderImpl ) getListenerSets (ctx context.Context , gateway gwv1.Gateway ) ([] gwv1.Listener , error ) {
48+ func (l * listenerSetLoaderImpl ) retrieveListenersFromListenerSets (ctx context.Context , gateway gwv1.Gateway ) (listenerSetLoadResult , [] * gwv1.ListenerSet , error ) {
4749 listenerSets := & gwv1.ListenerSetList {}
4850 err := l .k8sClient .List (ctx , listenerSets )
4951 if err != nil {
50- return nil , err
52+ return listenerSetLoadResult {}, nil , err
5153 }
5254
53- var result []gwv1.Listener
54- for _ , item := range listenerSets .Items {
55+ rejectedListenerSets := make ([]* gwv1.ListenerSet , 0 )
56+
57+ listenersPerListenerSet := make (map [types.NamespacedName ][]listenerSetListenerSource )
58+ acceptedListenerSets := make ([]* gwv1.ListenerSet , 0 )
59+ for i , item := range listenerSets .Items {
5560 handshake , err := l .listenerSetGatewayHandshake (ctx , item , gateway )
5661 if err != nil {
57- return nil , err
62+ return listenerSetLoadResult {}, nil , err
5863 }
59- if handshake == acceptedHandshakeState {
64+ switch handshake {
65+ case acceptedHandshakeState :
66+ var convertedListeners []listenerSetListenerSource
6067 for _ , listener := range item .Spec .Listeners {
61- result = append (result , l .convertListenerSetListenerToGatewayListener (listener ))
68+ convertedListeners = append (convertedListeners , l .convertListenerSetListenerToGatewayListener (item , listener ))
6269 }
70+ itemPtr := & listenerSets .Items [i ]
71+ listenersPerListenerSet [k8s .NamespacedName (itemPtr )] = convertedListeners
72+ acceptedListenerSets = append (acceptedListenerSets , itemPtr )
73+ break
74+ case gatewayRejectedHandshakeState :
75+ rejectedListenerSets = append (rejectedListenerSets , & listenerSets .Items [i ])
76+ break
77+ case irrelevantResourceHandshakeState :
78+ // Nothing to do here, the listener set and gateway have no relation.
79+ break
6380 }
6481
6582 }
6683
67- return result , nil
84+ return listenerSetLoadResult {
85+ listenersPerListenerSet : listenersPerListenerSet ,
86+ acceptedListenerSets : acceptedListenerSets ,
87+ }, rejectedListenerSets , nil
6888}
6989
7090func (l * listenerSetLoaderImpl ) listenerSetGatewayHandshake (ctx context.Context , listenerSet gwv1.ListenerSet , gw gwv1.Gateway ) (handshakeState , error ) {
@@ -105,15 +125,19 @@ func (l *listenerSetLoaderImpl) convertListenerSetParentRef(ref gwv1.ParentGatew
105125 }
106126}
107127
108- func (l * listenerSetLoaderImpl ) convertListenerSetListenerToGatewayListener (entry gwv1.ListenerEntry ) gwv1. Listener {
109- return gwv1.Listener {
128+ func (l * listenerSetLoaderImpl ) convertListenerSetListenerToGatewayListener (listenerSet gwv1. ListenerSet , entry gwv1.ListenerEntry ) listenerSetListenerSource {
129+ v := gwv1.Listener {
110130 Name : entry .Name ,
111131 Hostname : entry .Hostname ,
112132 Port : entry .Port ,
113133 Protocol : entry .Protocol ,
114134 TLS : entry .TLS ,
115135 AllowedRoutes : entry .AllowedRoutes ,
116136 }
137+ return listenerSetListenerSource {
138+ parentRef : listenerSet ,
139+ listener : v ,
140+ }
117141}
118142
119143var _ listenerSetLoader = & listenerSetLoaderImpl {}
0 commit comments