1 // Copyright 2022 Chaos Mesh Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 // 15 16 package remotepodreconciler 17 18 import ( 19 "github.com/go-logr/logr" 20 "go.uber.org/fx" 21 corev1 "k8s.io/api/core/v1" 22 ctrl "sigs.k8s.io/controller-runtime" 23 "sigs.k8s.io/controller-runtime/pkg/controller" 24 ) 25 26 func Bootstrap(mgr ctrl.Manager, podReconciler *Reconciler, logger logr.Logger) error { 27 return ctrl.NewControllerManagedBy(mgr). 28 WithOptions(controller.Options{ 29 // TODO: in a newer version `controller-runtime`, it would be 30 // possible to set a customized rate limiter. 31 // 32 // After upgrading `controller-runtime`, we could choose a better 33 // rate limiter for error handling 34 MaxConcurrentReconciles: 1, 35 }). 36 For(&corev1.Pod{}). 37 Complete(podReconciler) 38 } 39 40 var Module = fx.Options( 41 fx.Provide( 42 fx.Annotate( 43 New, 44 fx.ParamTags(`name:"manage-client"`, `name:"cluster-name"`), 45 ), 46 ), 47 fx.Invoke(Bootstrap), 48 ) 49