Skip to content

Commit 9445277

Browse files
authored
Merge pull request #290 from chrisdoherty4/feature/concurrenc-reconciles
Concurrently reconcile CloudStackMachine resources
2 parents 6901d49 + 9f73dae commit 9445277

File tree

4 files changed

+27
-12
lines changed

4 files changed

+27
-12
lines changed

config/manager/manager.yaml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ spec:
2222
- /manager
2323
args:
2424
- --leader-elect
25+
- --cloudstackmachine-concurrency=${CAPC_CLOUDSTACKMACHINE_CONCURRENCY:=10}
2526
image: controller:latest
2627
name: manager
2728
securityContext:
@@ -48,7 +49,7 @@ spec:
4849
serviceAccountName: controller-manager
4950
terminationGracePeriodSeconds: 10
5051
tolerations:
51-
- effect: NoSchedule
52-
key: node-role.kubernetes.io/master
53-
- effect: NoSchedule
54-
key: node-role.kubernetes.io/control-plane
52+
- effect: NoSchedule
53+
key: node-role.kubernetes.io/master
54+
- effect: NoSchedule
55+
key: node-role.kubernetes.io/control-plane

controllers/cloudstackmachine_controller.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
"sigs.k8s.io/cluster-api/util"
3333
ctrl "sigs.k8s.io/controller-runtime"
3434
"sigs.k8s.io/controller-runtime/pkg/client"
35+
"sigs.k8s.io/controller-runtime/pkg/controller"
3536
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
3637
"sigs.k8s.io/controller-runtime/pkg/event"
3738
"sigs.k8s.io/controller-runtime/pkg/handler"
@@ -233,7 +234,6 @@ func (r *CloudStackMachineReconciliationRunner) GetOrCreateVMInstance() (retRes
233234

234235
userData := processCustomMetadata(data, r)
235236
err := r.CSUser.GetOrCreateVMInstance(r.ReconciliationSubject, r.CAPIMachine, r.CSCluster, r.FailureDomain, r.AffinityGroup, userData)
236-
237237
if err != nil {
238238
r.Recorder.Eventf(r.ReconciliationSubject, "Warning", "Creating", CSMachineCreationFailed, err.Error())
239239
}
@@ -345,8 +345,9 @@ func (r *CloudStackMachineReconciliationRunner) ReconcileDelete() (retRes ctrl.R
345345
}
346346

347347
// SetupWithManager registers the machine reconciler to the CAPI controller manager.
348-
func (reconciler *CloudStackMachineReconciler) SetupWithManager(mgr ctrl.Manager) error {
348+
func (reconciler *CloudStackMachineReconciler) SetupWithManager(mgr ctrl.Manager, opts controller.Options) error {
349349
controller, err := ctrl.NewControllerManagedBy(mgr).
350+
WithOptions(opts).
350351
For(&infrav1.CloudStackMachine{}).
351352
WithEventFilter(
352353
predicate.Funcs{

controllers/cloudstackmachine_controller_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ package controllers_test
1818

1919
import (
2020
"fmt"
21+
"strings"
22+
2123
"github.com/golang/mock/gomock"
2224
. "github.com/onsi/ginkgo/v2"
2325
. "github.com/onsi/gomega"
@@ -31,8 +33,8 @@ import (
3133
"sigs.k8s.io/cluster-api/util/patch"
3234
ctrl "sigs.k8s.io/controller-runtime"
3335
"sigs.k8s.io/controller-runtime/pkg/client"
36+
"sigs.k8s.io/controller-runtime/pkg/controller"
3437
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
35-
"strings"
3638
)
3739

3840
var _ = Describe("CloudStackMachineReconciler", func() {
@@ -43,7 +45,7 @@ var _ = Describe("CloudStackMachineReconciler", func() {
4345
dummies.CSCluster.Spec.FailureDomains[0].Name = dummies.CSFailureDomain1.Spec.Name
4446

4547
SetupTestEnvironment() // Must happen before setting up managers/reconcilers.
46-
Ω(MachineReconciler.SetupWithManager(k8sManager)).Should(Succeed()) // Register the CloudStack MachineReconciler.
48+
Ω(MachineReconciler.SetupWithManager(k8sManager, controller.Options{})).Should(Succeed()) // Register the CloudStack MachineReconciler.
4749

4850
// Point CAPI machine Bootstrap secret ref to dummy bootstrap secret.
4951
dummies.CAPIMachine.Spec.Bootstrap.DataSecretName = &dummies.BootstrapSecret.Name

main.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import (
3737
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
3838
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
3939
ctrl "sigs.k8s.io/controller-runtime"
40+
"sigs.k8s.io/controller-runtime/pkg/controller"
4041
"sigs.k8s.io/controller-runtime/pkg/healthz"
4142
"sigs.k8s.io/controller-runtime/pkg/manager"
4243

@@ -73,6 +74,8 @@ type managerOpts struct {
7374
WatchingNamespace string
7475
WatchFilterValue string
7576
CertDir string
77+
78+
CloudStackMachineConcurrency int
7679
}
7780

7881
func setFlags() *managerOpts {
@@ -117,6 +120,13 @@ func setFlags() *managerOpts {
117120
"webhook-cert-dir",
118121
"/tmp/k8s-webhook-server/serving-certs/",
119122
"Specify the directory where webhooks will get tls certificates.")
123+
flag.IntVar(
124+
&opts.CloudStackMachineConcurrency,
125+
"cloudstackmachine-concurrency",
126+
10,
127+
"Maximum concurrent reconciles for CloudStackMachine resources",
128+
)
129+
120130
return opts
121131
}
122132

@@ -152,10 +162,11 @@ func main() {
152162
K8sClient: mgr.GetClient(),
153163
BaseLogger: ctrl.Log.WithName("controllers"),
154164
Recorder: mgr.GetEventRecorderFor("capc-controller-manager"),
155-
Scheme: mgr.GetScheme()}
165+
Scheme: mgr.GetScheme(),
166+
}
156167

157168
ctx := ctrl.SetupSignalHandler()
158-
setupReconcilers(ctx, base, mgr)
169+
setupReconcilers(ctx, base, *opts, mgr)
159170
infrav1b3.K8sClient = base.K8sClient
160171

161172
// +kubebuilder:scaffold:builder
@@ -191,12 +202,12 @@ func main() {
191202
}
192203
}
193204

194-
func setupReconcilers(ctx context.Context, base utils.ReconcilerBase, mgr manager.Manager) {
205+
func setupReconcilers(ctx context.Context, base utils.ReconcilerBase, opts managerOpts, mgr manager.Manager) {
195206
if err := (&controllers.CloudStackClusterReconciler{ReconcilerBase: base}).SetupWithManager(ctx, mgr); err != nil {
196207
setupLog.Error(err, "unable to create controller", "controller", "CloudStackCluster")
197208
os.Exit(1)
198209
}
199-
if err := (&controllers.CloudStackMachineReconciler{ReconcilerBase: base}).SetupWithManager(mgr); err != nil {
210+
if err := (&controllers.CloudStackMachineReconciler{ReconcilerBase: base}).SetupWithManager(mgr, controller.Options{MaxConcurrentReconciles: opts.CloudStackMachineConcurrency}); err != nil {
200211
setupLog.Error(err, "unable to create controller", "controller", "CloudStackMachine")
201212
os.Exit(1)
202213
}

0 commit comments

Comments
 (0)