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 , []* gwv1.ListenerSet , error )
26+ retrieveListenersFromListenerSets (ctx context.Context , gateway gwv1.Gateway ) (listenerSetLoadResult , []* gwv1.ListenerSet , error )
2527}
2628
2729type listenerSetLoaderImpl struct {
@@ -34,30 +36,40 @@ 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 , []* gwv1.ListenerSet , error ) {
43+ type listenerSetLoadResult struct {
44+ listenersPerListenerSet map [types.NamespacedName ][]listenerSetListenerSource
45+ acceptedListenerSets []* gwv1.ListenerSet
46+ }
47+
48+ func (l * listenerSetLoaderImpl ) retrieveListenersFromListenerSets (ctx context.Context , gateway gwv1.Gateway ) (listenerSetLoadResult , []* gwv1.ListenerSet , error ) {
4249 listenerSets := & gwv1.ListenerSetList {}
4350 err := l .k8sClient .List (ctx , listenerSets )
4451 if err != nil {
45- return nil , nil , err
52+ return listenerSetLoadResult {} , nil , err
4653 }
4754
4855 rejectedListenerSets := make ([]* gwv1.ListenerSet , 0 )
4956
50- var result []gwv1.Listener
57+ listenersPerListenerSet := make (map [types.NamespacedName ][]listenerSetListenerSource )
58+ acceptedListenerSets := make ([]* gwv1.ListenerSet , 0 )
5159 for i , item := range listenerSets .Items {
5260 handshake , err := l .listenerSetGatewayHandshake (ctx , item , gateway )
5361 if err != nil {
54- return nil , nil , err
62+ return listenerSetLoadResult {} , nil , err
5563 }
5664 switch handshake {
5765 case acceptedHandshakeState :
66+ var convertedListeners []listenerSetListenerSource
5867 for _ , listener := range item .Spec .Listeners {
59- result = append (result , l .convertListenerSetListenerToGatewayListener (listener ))
68+ convertedListeners = append (convertedListeners , l .convertListenerSetListenerToGatewayListener (item , listener ))
6069 }
70+ itemPtr := & listenerSets .Items [i ]
71+ listenersPerListenerSet [k8s .NamespacedName (itemPtr )] = convertedListeners
72+ acceptedListenerSets = append (acceptedListenerSets , itemPtr )
6173 break
6274 case gatewayRejectedHandshakeState :
6375 rejectedListenerSets = append (rejectedListenerSets , & listenerSets .Items [i ])
@@ -69,7 +81,10 @@ func (l *listenerSetLoaderImpl) retrieveListenersFromListenerSets(ctx context.Co
6981
7082 }
7183
72- return result , rejectedListenerSets , nil
84+ return listenerSetLoadResult {
85+ listenersPerListenerSet : listenersPerListenerSet ,
86+ acceptedListenerSets : acceptedListenerSets ,
87+ }, rejectedListenerSets , nil
7388}
7489
7590func (l * listenerSetLoaderImpl ) listenerSetGatewayHandshake (ctx context.Context , listenerSet gwv1.ListenerSet , gw gwv1.Gateway ) (handshakeState , error ) {
@@ -110,15 +125,19 @@ func (l *listenerSetLoaderImpl) convertListenerSetParentRef(ref gwv1.ParentGatew
110125 }
111126}
112127
113- func (l * listenerSetLoaderImpl ) convertListenerSetListenerToGatewayListener (entry gwv1.ListenerEntry ) gwv1. Listener {
114- return gwv1.Listener {
128+ func (l * listenerSetLoaderImpl ) convertListenerSetListenerToGatewayListener (listenerSet gwv1. ListenerSet , entry gwv1.ListenerEntry ) listenerSetListenerSource {
129+ v := gwv1.Listener {
115130 Name : entry .Name ,
116131 Hostname : entry .Hostname ,
117132 Port : entry .Port ,
118133 Protocol : entry .Protocol ,
119134 TLS : entry .TLS ,
120135 AllowedRoutes : entry .AllowedRoutes ,
121136 }
137+ return listenerSetListenerSource {
138+ parentRef : listenerSet ,
139+ listener : v ,
140+ }
122141}
123142
124143var _ listenerSetLoader = & listenerSetLoaderImpl {}
0 commit comments