@@ -30,25 +30,37 @@ type controllerSetup interface {
3030 SetupWithManager (ctrl.Manager ) error
3131}
3232
33- func SetupControllers (mgr ctrl.Manager , reconciler * Reconciler ) error {
33+ func SetupControllers (mgr ctrl.Manager , reconciler * Reconciler , options ... Options ) error {
34+ for _ , controller := range statusControllerSetups (reconciler , normalizeOptions (options )) {
35+ if err := controller .SetupWithManager (mgr ); err != nil {
36+ return err
37+ }
38+ }
39+
40+ return nil
41+ }
42+
43+ func statusControllerSetups (reconciler * Reconciler , opts Options ) []controllerSetup {
3444 controllers := []controllerSetup {
3545 & gatewayClassController {reconciler : reconciler },
36- & gatewayController {reconciler : reconciler },
46+ & gatewayController {
47+ reconciler : reconciler ,
48+ enableExperimentalGateway : opts .EnableExperimentalGateway ,
49+ },
3750 & httpRouteController {reconciler : reconciler },
3851 & grpcRouteController {reconciler : reconciler },
39- & tcpRouteController {reconciler : reconciler },
40- & udpRouteController {reconciler : reconciler },
41- & tlsRouteController {reconciler : reconciler },
42- & listenerSetController {reconciler : reconciler },
4352 }
4453
45- for _ , controller := range controllers {
46- if err := controller .SetupWithManager (mgr ); err != nil {
47- return err
48- }
54+ if opts .EnableExperimentalGateway {
55+ controllers = append (controllers ,
56+ & tcpRouteController {reconciler : reconciler },
57+ & udpRouteController {reconciler : reconciler },
58+ & tlsRouteController {reconciler : reconciler },
59+ & listenerSetController {reconciler : reconciler },
60+ )
4961 }
5062
51- return nil
63+ return controllers
5264}
5365
5466func statusControllerOptions (maxConcurrentReconciles int ) controller.Options {
@@ -102,7 +114,8 @@ func (c *gatewayClassController) SetupWithManager(mgr ctrl.Manager) error {
102114}
103115
104116type gatewayController struct {
105- reconciler * Reconciler
117+ reconciler * Reconciler
118+ enableExperimentalGateway bool
106119}
107120
108121func (c * gatewayController ) Reconcile (
@@ -120,7 +133,7 @@ func (c *gatewayController) SetupWithManager(mgr ctrl.Manager) error {
120133 gatewayInfrastructureStatusRequests ,
121134 )
122135
123- return ctrl .NewControllerManagedBy (mgr ).
136+ controllerBuilder := ctrl .NewControllerManagedBy (mgr ).
124137 Named ("gateway-status" ).
125138 WithOptions (statusControllerOptions (2 )).
126139 For (& gatewayv1.Gateway {}, generationChanged ).
@@ -133,12 +146,16 @@ func (c *gatewayController) SetupWithManager(mgr ctrl.Manager) error {
133146 & discoveryv1.EndpointSlice {},
134147 gatewayInfrastructureRequests ,
135148 builder .WithPredicates (gatewayFrontendEndpointSlicePredicate ()),
136- ).
137- Watches (
149+ )
150+
151+ if c .enableExperimentalGateway && resourceSupported (mgr .GetScheme (), mgr .GetRESTMapper (), & gatewayv1.ListenerSet {}) {
152+ controllerBuilder = controllerBuilder .Watches (
138153 & gatewayv1.ListenerSet {},
139154 handler .EnqueueRequestsFromMapFunc (gatewayListenerSetStatusRequests ),
140- ).
141- Complete (c )
155+ )
156+ }
157+
158+ return controllerBuilder .Complete (c )
142159}
143160
144161func gatewayInfrastructureServicePredicate () predicate.Predicate {
0 commit comments