@@ -18,6 +18,7 @@ package app
18
18
19
19
import (
20
20
"fmt"
21
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
21
22
"k8s.io/apimachinery/pkg/labels"
22
23
"kubesphere.io/kubesphere/pkg/controller/application"
23
24
"os"
@@ -32,6 +33,7 @@ import (
32
33
controllerconfig "kubesphere.io/kubesphere/pkg/apiserver/config"
33
34
"kubesphere.io/kubesphere/pkg/controller/namespace"
34
35
"kubesphere.io/kubesphere/pkg/controller/network/webhooks"
36
+ "kubesphere.io/kubesphere/pkg/controller/quota"
35
37
"kubesphere.io/kubesphere/pkg/controller/serviceaccount"
36
38
"kubesphere.io/kubesphere/pkg/controller/user"
37
39
"kubesphere.io/kubesphere/pkg/controller/workspace"
@@ -194,29 +196,32 @@ func run(s *options.KubeSphereControllerManagerOptions, stopCh <-chan struct{})
194
196
klog .Fatalf ("unable add APIs to scheme: %v" , err )
195
197
}
196
198
199
+ // register common meta types into schemas.
200
+ metav1 .AddToGroupVersion (mgr .GetScheme (), metav1 .SchemeGroupVersion )
201
+
197
202
workspaceTemplateReconciler := & workspacetemplate.Reconciler {MultiClusterEnabled : s .MultiClusterOptions .Enable }
198
203
if err = workspaceTemplateReconciler .SetupWithManager (mgr ); err != nil {
199
- klog .Fatal ("Unable to create workspace template controller" )
204
+ klog .Fatalf ("Unable to create workspace template controller: %v" , err )
200
205
}
201
206
202
207
workspaceReconciler := & workspace.Reconciler {}
203
208
if err = workspaceReconciler .SetupWithManager (mgr ); err != nil {
204
- klog .Fatal ("Unable to create workspace controller" )
209
+ klog .Fatalf ("Unable to create workspace controller: %v" , err )
205
210
}
206
211
207
212
workspaceRoleReconciler := & workspacerole.Reconciler {MultiClusterEnabled : s .MultiClusterOptions .Enable }
208
213
if err = workspaceRoleReconciler .SetupWithManager (mgr ); err != nil {
209
- klog .Fatal ("Unable to create workspace role controller" )
214
+ klog .Fatalf ("Unable to create workspace role controller: %v" , err )
210
215
}
211
216
212
217
workspaceRoleBindingReconciler := & workspacerolebinding.Reconciler {MultiClusterEnabled : s .MultiClusterOptions .Enable }
213
218
if err = workspaceRoleBindingReconciler .SetupWithManager (mgr ); err != nil {
214
- klog .Fatal ("Unable to create workspace role binding controller" )
219
+ klog .Fatalf ("Unable to create workspace role binding controller: %v" , err )
215
220
}
216
221
217
222
namespaceReconciler := & namespace.Reconciler {}
218
223
if err = namespaceReconciler .SetupWithManager (mgr ); err != nil {
219
- klog .Fatal ("Unable to create namespace controller" )
224
+ klog .Fatalf ("Unable to create namespace controller: %v" , err )
220
225
}
221
226
222
227
selector , _ := labels .Parse (s .ApplicationSelector )
@@ -227,13 +232,17 @@ func run(s *options.KubeSphereControllerManagerOptions, stopCh <-chan struct{})
227
232
ApplicationSelector : selector ,
228
233
}
229
234
if err = applicationReconciler .SetupWithManager (mgr ); err != nil {
230
- klog .Fatal ("Unable to create application controller" )
235
+ klog .Fatalf ("Unable to create application controller: %v" , err )
231
236
}
232
237
233
238
saReconciler := & serviceaccount.Reconciler {}
234
-
235
239
if err = saReconciler .SetupWithManager (mgr ); err != nil {
236
- klog .Fatal ("Unable to create ServiceAccount controller" )
240
+ klog .Fatalf ("Unable to create ServiceAccount controller: %v" , err )
241
+ }
242
+
243
+ resourceQuotaReconciler := quota.Reconciler {}
244
+ if err := resourceQuotaReconciler .SetupWithManager (mgr , quota .DefaultMaxConcurrentReconciles , quota .DefaultResyncPeriod , informerFactory .KubernetesSharedInformerFactory ()); err != nil {
245
+ klog .Fatalf ("Unable to create ResourceQuota controller: %v" , err )
237
246
}
238
247
239
248
// TODO(jeff): refactor config with CRD
@@ -263,10 +272,16 @@ func run(s *options.KubeSphereControllerManagerOptions, stopCh <-chan struct{})
263
272
hookServer := mgr .GetWebhookServer ()
264
273
265
274
klog .V (2 ).Info ("registering webhooks to the webhook server" )
266
- hookServer .Register ("/validate-email-iam-kubesphere-io-v1alpha2-user " , & webhook.Admission {Handler : & user.EmailValidator {Client : mgr .GetClient ()}})
275
+ hookServer .Register ("/validate-email-iam-kubesphere-io-v1alpha2" , & webhook.Admission {Handler : & user.EmailValidator {Client : mgr .GetClient ()}})
267
276
hookServer .Register ("/validate-network-kubesphere-io-v1alpha1" , & webhook.Admission {Handler : & webhooks.ValidatingHandler {C : mgr .GetClient ()}})
268
277
hookServer .Register ("/mutate-network-kubesphere-io-v1alpha1" , & webhook.Admission {Handler : & webhooks.MutatingHandler {C : mgr .GetClient ()}})
269
278
279
+ resourceQuotaAdmission , err := quota .NewResourceQuotaAdmission (mgr .GetClient (), mgr .GetScheme ())
280
+ if err != nil {
281
+ klog .Fatalf ("unable to create resource quota admission: %v" , err )
282
+ }
283
+ hookServer .Register ("/validate-quota-kubesphere-io-v1alpha2" , & webhook.Admission {Handler : resourceQuotaAdmission })
284
+
270
285
klog .V (2 ).Info ("registering metrics to the webhook server" )
271
286
hookServer .Register ("/metrics" , metrics .Handler ())
272
287
0 commit comments