Skip to content

Commit 6dc1c0f

Browse files
authored
Merge pull request #345 from vignesh-goutham/rel-0.4-cherrypicks-2
[release-0.4] Make affinity group and failure domain controller run with multiple workers
2 parents c89545d + 69223eb commit 6dc1c0f

6 files changed

+35
-14
lines changed

controllers/cloudstackaffinitygroup_controller.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"context"
2121

2222
ctrl "sigs.k8s.io/controller-runtime"
23+
"sigs.k8s.io/controller-runtime/pkg/controller"
2324
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
2425

2526
infrav1 "sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta3"
@@ -89,8 +90,9 @@ func (r *CloudStackAGReconciliationRunner) ReconcileDelete() (ctrl.Result, error
8990
}
9091

9192
// SetupWithManager sets up the controller with the Manager.
92-
func (reconciler *CloudStackAffinityGroupReconciler) SetupWithManager(mgr ctrl.Manager) error {
93+
func (reconciler *CloudStackAffinityGroupReconciler) SetupWithManager(mgr ctrl.Manager, opts controller.Options) error {
9394
return ctrl.NewControllerManagedBy(mgr).
95+
WithOptions(opts).
9496
For(&infrav1.CloudStackAffinityGroup{}).
9597
Complete(reconciler)
9698
}

controllers/cloudstackaffinitygroup_controller_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,14 @@ import (
2323
infrav1 "sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta3"
2424
dummies "sigs.k8s.io/cluster-api-provider-cloudstack/test/dummies/v1beta3"
2525
"sigs.k8s.io/controller-runtime/pkg/client"
26+
"sigs.k8s.io/controller-runtime/pkg/controller"
2627
)
2728

2829
var _ = Describe("CloudStackAffinityGroupReconciler", func() {
2930
BeforeEach(func() {
3031
SetupTestEnvironment() // Must happen before setting up managers/reconcilers.
3132
dummies.SetDummyVars()
32-
Ω(AffinityGReconciler.SetupWithManager(k8sManager)).Should(Succeed()) // Register CloudStack AffinityGReconciler.
33+
Ω(AffinityGReconciler.SetupWithManager(k8sManager, controller.Options{})).Should(Succeed()) // Register CloudStack AffinityGReconciler.
3334
})
3435

3536
It("Should patch back the affinity group as ready after calling GetOrCreateAffinityGroup.", func() {

controllers/cloudstackcluster_controller_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ import (
3030
var _ = Describe("CloudStackClusterReconciler", func() {
3131
Context("With k8s like test environment.", func() {
3232
BeforeEach(func() {
33-
SetupTestEnvironment() // Must happen before setting up managers/reconcilers.
34-
Ω(ClusterReconciler.SetupWithManager(ctx, k8sManager, controller.Options{})).Should(Succeed()) // Register CloudStack ClusterReconciler.
35-
Ω(FailureDomainReconciler.SetupWithManager(k8sManager)).Should(Succeed()) // Register CloudStack FailureDomainReconciler.
33+
SetupTestEnvironment() // Must happen before setting up managers/reconcilers.
34+
Ω(ClusterReconciler.SetupWithManager(ctx, k8sManager, controller.Options{})).Should(Succeed()) // Register CloudStack ClusterReconciler.
35+
Ω(FailureDomainReconciler.SetupWithManager(k8sManager, controller.Options{})).Should(Succeed()) // Register CloudStack FailureDomainReconciler.
3636
})
3737

3838
It("Should create a CloudStackFailureDomain.", func() {

controllers/cloudstackfailuredomain_controller.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
2525
ctrl "sigs.k8s.io/controller-runtime"
2626
"sigs.k8s.io/controller-runtime/pkg/client"
27+
"sigs.k8s.io/controller-runtime/pkg/controller"
2728
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
2829
"sort"
2930

@@ -263,7 +264,9 @@ func (r *CloudStackFailureDomainReconciliationRunner) RemoveFinalizer() (ctrl.Re
263264
}
264265

265266
// SetupWithManager sets up the controller with the Manager.
266-
func (reconciler *CloudStackFailureDomainReconciler) SetupWithManager(mgr ctrl.Manager) error {
267-
_, err := ctrl.NewControllerManagedBy(mgr).For(&infrav1.CloudStackFailureDomain{}).Build(reconciler)
268-
return err
267+
func (reconciler *CloudStackFailureDomainReconciler) SetupWithManager(mgr ctrl.Manager, opts controller.Options) error {
268+
return ctrl.NewControllerManagedBy(mgr).
269+
WithOptions(opts).
270+
For(&infrav1.CloudStackFailureDomain{}).
271+
Complete(reconciler)
269272
}

controllers/cloudstackfailuredomain_controller_test.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,15 @@ import (
2828
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
2929
"sigs.k8s.io/cluster-api/util/patch"
3030
"sigs.k8s.io/controller-runtime/pkg/client"
31+
"sigs.k8s.io/controller-runtime/pkg/controller"
3132
)
3233

3334
var _ = Describe("CloudStackFailureDomainReconciler", func() {
3435
Context("With k8s like test environment.", func() {
3536
BeforeEach(func() {
3637
dummies.SetDummyVars()
37-
SetupTestEnvironment() // Must happen before setting up managers/reconcilers.
38-
Ω(FailureDomainReconciler.SetupWithManager(k8sManager)).Should(Succeed()) // Register CloudStack FailureDomainReconciler.
38+
SetupTestEnvironment() // Must happen before setting up managers/reconcilers.
39+
Ω(FailureDomainReconciler.SetupWithManager(k8sManager, controller.Options{})).Should(Succeed()) // Register CloudStack FailureDomainReconciler.
3940
// Modify failure domain name the same way the cluster controller would.
4041
dummies.CSFailureDomain1.Name = dummies.CSFailureDomain1.Name + "-" + dummies.CSCluster.Name
4142

main.go

+18-4
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,10 @@ type managerOpts struct {
7575
WatchFilterValue string
7676
CertDir string
7777

78-
CloudStackClusterConcurrency int
79-
CloudStackMachineConcurrency int
78+
CloudStackClusterConcurrency int
79+
CloudStackMachineConcurrency int
80+
CloudStackAffinityGroupConcurrency int
81+
CloudStackFailureDomainConcurrency int
8082
}
8183

8284
func setFlags() *managerOpts {
@@ -133,6 +135,18 @@ func setFlags() *managerOpts {
133135
10,
134136
"Maximum concurrent reconciles for CloudStackMachine resources",
135137
)
138+
flag.IntVar(
139+
&opts.CloudStackAffinityGroupConcurrency,
140+
"cloudstackaffinitygroup-concurrency",
141+
1,
142+
"Maximum concurrent reconciles for CloudStackAffinityGroup resources",
143+
)
144+
flag.IntVar(
145+
&opts.CloudStackFailureDomainConcurrency,
146+
"cloudstackfailuredomain-concurrency",
147+
1,
148+
"Maximum concurrent reconciles for CloudStackFailureDomain resources",
149+
)
136150

137151
return opts
138152
}
@@ -222,11 +236,11 @@ func setupReconcilers(ctx context.Context, base utils.ReconcilerBase, opts manag
222236
setupLog.Error(err, "unable to create controller", "controller", "CloudStackIsoNetReconciler")
223237
os.Exit(1)
224238
}
225-
if err := (&controllers.CloudStackAffinityGroupReconciler{ReconcilerBase: base}).SetupWithManager(mgr); err != nil {
239+
if err := (&controllers.CloudStackAffinityGroupReconciler{ReconcilerBase: base}).SetupWithManager(mgr, controller.Options{MaxConcurrentReconciles: opts.CloudStackAffinityGroupConcurrency}); err != nil {
226240
setupLog.Error(err, "unable to create controller", "controller", "CloudStackAffinityGroup")
227241
os.Exit(1)
228242
}
229-
if err := (&controllers.CloudStackFailureDomainReconciler{ReconcilerBase: base}).SetupWithManager(mgr); err != nil {
243+
if err := (&controllers.CloudStackFailureDomainReconciler{ReconcilerBase: base}).SetupWithManager(mgr, controller.Options{MaxConcurrentReconciles: opts.CloudStackFailureDomainConcurrency}); err != nil {
230244
setupLog.Error(err, "unable to create controller", "controller", "CloudStackFailureDomain")
231245
os.Exit(1)
232246
}

0 commit comments

Comments
 (0)