@@ -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,40 +98,55 @@ 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+ for resource , controller := range map [client.Object ]Controller {
107+ & gatewayv1.GatewayClass {}: & controller.GatewayClassReconciler {
102108 Client : mgr .GetClient (),
103109 Scheme : mgr .GetScheme (),
104110 Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("GatewayClass" ),
105111 Updater : updater ,
106112 },
107- & controller.GatewayReconciler {
113+ & gatewayv1. Gateway {}: & controller.GatewayReconciler {
108114 Client : mgr .GetClient (),
109115 Scheme : mgr .GetScheme (),
110116 Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("Gateway" ),
111117 Provider : pro ,
112118 Updater : updater ,
113119 },
114- & controller.HTTPRouteReconciler {
120+ & gatewayv1. HTTPRoute {}: & controller.HTTPRouteReconciler {
115121 Client : mgr .GetClient (),
116122 Scheme : mgr .GetScheme (),
117123 Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("HTTPRoute" ),
118124 Provider : pro ,
119125 Updater : updater ,
120126 Readier : readier ,
121127 },
122- & controller.IngressReconciler {
128+ & v1alpha1. Consumer {}: & controller.ConsumerReconciler {
123129 Client : mgr .GetClient (),
124130 Scheme : mgr .GetScheme (),
125- Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("Ingress " ),
131+ Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("Consumer " ),
126132 Provider : pro ,
127133 Updater : updater ,
128134 Readier : readier ,
129135 },
130- & controller.ConsumerReconciler {
136+ } {
137+ if utils .HasAPIResource (mgr , resource ) {
138+ controllers = append (controllers , controller )
139+ } else {
140+ setupLog .Info ("Skipping controller setup, API not found in cluster" , "api" , utils .FormatGVK (resource ))
141+ }
142+ }
143+
144+ controllers = append (controllers , []Controller {
145+ // Core Kubernetes Controllers - always register these
146+ & controller.IngressReconciler {
131147 Client : mgr .GetClient (),
132148 Scheme : mgr .GetScheme (),
133- Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("Consumer " ),
149+ Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("Ingress " ),
134150 Provider : pro ,
135151 Updater : updater ,
136152 Readier : readier ,
@@ -141,6 +157,14 @@ func setupControllers(ctx context.Context, mgr manager.Manager, pro provider.Pro
141157 Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("IngressClass" ),
142158 Provider : pro ,
143159 },
160+ // Gateway Proxy Controller - always register this as it is core to the controller
161+ & controller.GatewayProxyController {
162+ Client : mgr .GetClient (),
163+ Scheme : mgr .GetScheme (),
164+ Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("GatewayProxy" ),
165+ Provider : pro ,
166+ },
167+ // APISIX v2 Controllers - always register these as they are core to the controller
144168 & controller.ApisixGlobalRuleReconciler {
145169 Client : mgr .GetClient (),
146170 Scheme : mgr .GetScheme (),
@@ -185,13 +209,10 @@ func setupControllers(ctx context.Context, mgr manager.Manager, pro provider.Pro
185209 Log : ctrl .LoggerFrom (ctx ).WithName ("controllers" ).WithName ("ApisixUpstream" ),
186210 Updater : updater ,
187211 },
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
212+ }... )
213+
214+ setupLog .Info ("Controllers setup completed" , "total_controllers" , len (controllers ))
215+ return controllers , nil
195216}
196217
197218func registerReadinessGVK (c client.Client , readier readiness.ReadinessManager ) {
0 commit comments