diff --git a/cyclops-ctrl/cmd/main/main.go b/cyclops-ctrl/cmd/main/main.go index f278165c..f8e4ca71 100644 --- a/cyclops-ctrl/cmd/main/main.go +++ b/cyclops-ctrl/cmd/main/main.go @@ -143,6 +143,7 @@ func main() { templatesRepo, k8sClient, renderer, + getMaxConcurrentReconciles(), telemetryClient, monitor, )).SetupWithManager(mgr); err != nil { @@ -199,6 +200,20 @@ func getHelmWatchNamespace() string { return value } +func getMaxConcurrentReconciles() int { + strValue := os.Getenv("MAX_CONCURRENT_RECONCILES") + if strValue == "" { + return 1 + } + + value, err := strconv.Atoi(strValue) + if err != nil { + return 1 + } + + return value +} + func getCommitMessageTemplate() string { return os.Getenv("COMMIT_MESSAGE_TEMPLATE") } diff --git a/cyclops-ctrl/internal/modulecontroller/module_controller.go b/cyclops-ctrl/internal/modulecontroller/module_controller.go index b4e64e80..021e6cd6 100644 --- a/cyclops-ctrl/internal/modulecontroller/module_controller.go +++ b/cyclops-ctrl/internal/modulecontroller/module_controller.go @@ -55,6 +55,8 @@ type ModuleReconciler struct { kubernetesClient k8sclient.IKubernetesClient renderer *render.Renderer + maxConcurrentReconciles int + telemetryClient telemetry.Client monitor prometheus.Monitor logger logr.Logger @@ -66,18 +68,20 @@ func NewModuleReconciler( templatesRepo templaterepo.ITemplateRepo, kubernetesClient k8sclient.IKubernetesClient, renderer *render.Renderer, + maxConcurrentReconciles int, telemetryClient telemetry.Client, monitor prometheus.Monitor, ) *ModuleReconciler { return &ModuleReconciler{ - Client: client, - Scheme: scheme, - templatesRepo: templatesRepo, - kubernetesClient: kubernetesClient, - renderer: renderer, - telemetryClient: telemetryClient, - monitor: monitor, - logger: ctrl.Log.WithName("reconciler"), + Client: client, + Scheme: scheme, + templatesRepo: templatesRepo, + kubernetesClient: kubernetesClient, + renderer: renderer, + telemetryClient: telemetryClient, + maxConcurrentReconciles: maxConcurrentReconciles, + monitor: monitor, + logger: ctrl.Log.WithName("reconciler"), } } @@ -226,7 +230,10 @@ func (r *ModuleReconciler) SetupWithManager(mgr ctrl.Manager) error { return ctrl.NewControllerManagedBy(mgr). For(&cyclopsv1alpha1.Module{}). - WithOptions(controller.Options{RateLimiter: rateLimiter}). + WithOptions(controller.Options{ + RateLimiter: rateLimiter, + MaxConcurrentReconciles: r.maxConcurrentReconciles, + }). Complete(r) }