@@ -37,6 +37,7 @@ import (
3737 "github.com/apache/apisix-ingress-controller/internal/manager/readiness"
3838 "github.com/apache/apisix-ingress-controller/internal/provider"
3939 types "github.com/apache/apisix-ingress-controller/internal/types"
40+ "github.com/apache/apisix-ingress-controller/pkg/utils"
4041)
4142
4243// K8s
@@ -97,101 +98,138 @@ func setupControllers(ctx context.Context, mgr manager.Manager, pro provider.Pro
9798 if err := indexer .SetupIndexer (mgr ); err != nil {
9899 return nil , err
99100 }
100- return []Controller {
101- & controller.GatewayClassReconciler {
101+
102+ setupLog := ctrl .LoggerFrom (ctx ).WithName ("setup" )
103+ var controllers []Controller
104+
105+ // Gateway API Controllers - conditional registration based on API availability
106+ if utils .HasAPIResource (mgr , & gatewayv1.GatewayClass {}) {
107+ controllers = append (controllers , & controller.GatewayClassReconciler {
102108 Client : mgr .GetClient (),
103109 Scheme : mgr .GetScheme (),
104110 Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("GatewayClass" ),
105111 Updater : updater ,
106- },
107- & controller.GatewayReconciler {
112+ })
113+ } else {
114+ setupLog .Info ("Skipping GatewayClass controller setup, API not found in cluster" , "api" , "gateway.networking.k8s.io/v1.GatewayClass" )
115+ }
116+
117+ if utils .HasAPIResource (mgr , & gatewayv1.Gateway {}) {
118+ controllers = append (controllers , & controller.GatewayReconciler {
108119 Client : mgr .GetClient (),
109120 Scheme : mgr .GetScheme (),
110121 Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("Gateway" ),
111122 Provider : pro ,
112123 Updater : updater ,
113- },
114- & controller.HTTPRouteReconciler {
124+ })
125+ } else {
126+ setupLog .Info ("Skipping Gateway controller setup, API not found in cluster" , "api" , "gateway.networking.k8s.io/v1.Gateway" )
127+ }
128+
129+ if utils .HasAPIResource (mgr , & gatewayv1.HTTPRoute {}) {
130+ controllers = append (controllers , & controller.HTTPRouteReconciler {
115131 Client : mgr .GetClient (),
116132 Scheme : mgr .GetScheme (),
117133 Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("HTTPRoute" ),
118134 Provider : pro ,
119135 Updater : updater ,
120136 Readier : readier ,
121- },
122- & controller.IngressReconciler {
123- Client : mgr .GetClient (),
124- Scheme : mgr .GetScheme (),
125- Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("Ingress" ),
126- Provider : pro ,
127- Updater : updater ,
128- Readier : readier ,
129- },
130- & controller.ConsumerReconciler {
137+ })
138+ } else {
139+ setupLog .Info ("Skipping HTTPRoute controller setup, API not found in cluster" , "api" , "gateway.networking.k8s.io/v1.HTTPRoute" )
140+ }
141+
142+ // Core Kubernetes Controllers - always register these
143+ controllers = append (controllers , & controller.IngressReconciler {
144+ Client : mgr .GetClient (),
145+ Scheme : mgr .GetScheme (),
146+ Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("Ingress" ),
147+ Provider : pro ,
148+ Updater : updater ,
149+ Readier : readier ,
150+ })
151+
152+ controllers = append (controllers , & controller.IngressClassReconciler {
153+ Client : mgr .GetClient (),
154+ Scheme : mgr .GetScheme (),
155+ Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("IngressClass" ),
156+ Provider : pro ,
157+ })
158+
159+ // v1alpha1 Extension Controllers - conditional registration
160+ if utils .HasAPIResource (mgr , & v1alpha1.Consumer {}) {
161+ controllers = append (controllers , & controller.ConsumerReconciler {
131162 Client : mgr .GetClient (),
132163 Scheme : mgr .GetScheme (),
133164 Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("Consumer" ),
134165 Provider : pro ,
135166 Updater : updater ,
136167 Readier : readier ,
137- },
138- & controller.IngressClassReconciler {
139- Client : mgr .GetClient (),
140- Scheme : mgr .GetScheme (),
141- Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("IngressClass" ),
142- Provider : pro ,
143- },
144- & controller.ApisixGlobalRuleReconciler {
145- Client : mgr .GetClient (),
146- Scheme : mgr .GetScheme (),
147- Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("ApisixGlobalRule" ),
148- Provider : pro ,
149- Updater : updater ,
150- Readier : readier ,
151- },
152- & controller.ApisixRouteReconciler {
153- Client : mgr .GetClient (),
154- Scheme : mgr .GetScheme (),
155- Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("ApisixRoute" ),
156- Provider : pro ,
157- Updater : updater ,
158- Readier : readier ,
159- },
160- & controller.ApisixConsumerReconciler {
161- Client : mgr .GetClient (),
162- Scheme : mgr .GetScheme (),
163- Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("ApisixConsumer" ),
164- Provider : pro ,
165- Updater : updater ,
166- Readier : readier ,
167- },
168- & controller.ApisixPluginConfigReconciler {
169- Client : mgr .GetClient (),
170- Scheme : mgr .GetScheme (),
171- Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("ApisixPluginConfig" ),
172- Updater : updater ,
173- },
174- & controller.ApisixTlsReconciler {
175- Client : mgr .GetClient (),
176- Scheme : mgr .GetScheme (),
177- Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("ApisixTls" ),
178- Provider : pro ,
179- Updater : updater ,
180- Readier : readier ,
181- },
182- & controller.ApisixUpstreamReconciler {
183- Client : mgr .GetClient (),
184- Scheme : mgr .GetScheme (),
185- Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("ApisixUpstream" ),
186- Updater : updater ,
187- },
188- & controller.GatewayProxyController {
189- Client : mgr .GetClient (),
190- Scheme : mgr .GetScheme (),
191- Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("GatewayProxy" ),
192- Provider : pro ,
193- },
194- }, nil
168+ })
169+ } else {
170+ setupLog .Info ("Skipping Consumer controller setup, API not found in cluster" , "api" , "apisix.apache.org/v1alpha1.Consumer" )
171+ }
172+
173+ controllers = append (controllers , & controller.GatewayProxyController {
174+ Client : mgr .GetClient (),
175+ Scheme : mgr .GetScheme (),
176+ Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("GatewayProxy" ),
177+ Provider : pro ,
178+ })
179+
180+ // APISIX v2 Controllers - always register these as they are core to the controller
181+ controllers = append (controllers , & controller.ApisixGlobalRuleReconciler {
182+ Client : mgr .GetClient (),
183+ Scheme : mgr .GetScheme (),
184+ Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("ApisixGlobalRule" ),
185+ Provider : pro ,
186+ Updater : updater ,
187+ Readier : readier ,
188+ })
189+
190+ controllers = append (controllers , & controller.ApisixRouteReconciler {
191+ Client : mgr .GetClient (),
192+ Scheme : mgr .GetScheme (),
193+ Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("ApisixRoute" ),
194+ Provider : pro ,
195+ Updater : updater ,
196+ Readier : readier ,
197+ })
198+
199+ controllers = append (controllers , & controller.ApisixConsumerReconciler {
200+ Client : mgr .GetClient (),
201+ Scheme : mgr .GetScheme (),
202+ Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("ApisixConsumer" ),
203+ Provider : pro ,
204+ Updater : updater ,
205+ Readier : readier ,
206+ })
207+
208+ controllers = append (controllers , & controller.ApisixPluginConfigReconciler {
209+ Client : mgr .GetClient (),
210+ Scheme : mgr .GetScheme (),
211+ Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("ApisixPluginConfig" ),
212+ Updater : updater ,
213+ })
214+
215+ controllers = append (controllers , & controller.ApisixTlsReconciler {
216+ Client : mgr .GetClient (),
217+ Scheme : mgr .GetScheme (),
218+ Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("ApisixTls" ),
219+ Provider : pro ,
220+ Updater : updater ,
221+ Readier : readier ,
222+ })
223+
224+ controllers = append (controllers , & controller.ApisixUpstreamReconciler {
225+ Client : mgr .GetClient (),
226+ Scheme : mgr .GetScheme (),
227+ Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("ApisixUpstream" ),
228+ Updater : updater ,
229+ })
230+
231+ setupLog .Info ("Controllers setup completed" , "total_controllers" , len (controllers ))
232+ return controllers , nil
195233}
196234
197235func registerReadinessGVK (c client.Client , readier readiness.ReadinessManager ) {
0 commit comments