Skip to content

Commit 9881385

Browse files
authored
Merge pull request #2262 from sbueringer/pr-consistent-setup
🌱 Avoid adding watches after building controllers
2 parents bd3cf5b + 90cc859 commit 9881385

File tree

4 files changed

+50
-63
lines changed

4 files changed

+50
-63
lines changed

controllers/vmware/vspherecluster_reconciler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ type ClusterReconciler struct {
6363
// +kubebuilder:rbac:groups="",resources=persistentvolumeclaims,verbs=get;list;watch;update;create;delete
6464
// +kubebuilder:rbac:groups="",resources=persistentvolumeclaims/status,verbs=get;update;patch
6565

66-
func (r ClusterReconciler) Reconcile(_ goctx.Context, req ctrl.Request) (_ ctrl.Result, reterr error) {
66+
func (r *ClusterReconciler) Reconcile(_ goctx.Context, req ctrl.Request) (_ ctrl.Result, reterr error) {
6767
logger := r.Logger.WithName(req.Namespace).WithName(req.Name)
6868
logger.V(3).Info("Starting Reconcile vsphereCluster")
6969

controllers/vspherecluster_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ func AddClusterControllerToManager(ctx *context.ControllerManagerContext, mgr ma
8888
if err != nil {
8989
return errors.Wrap(err, "failed to create a network provider")
9090
}
91-
reconciler := vmware.ClusterReconciler{
91+
reconciler := &vmware.ClusterReconciler{
9292
ControllerContext: controllerContext,
9393
ResourcePolicyService: vmoperator.RPService{},
9494
ControlPlaneService: vmoperator.CPService{},

controllers/vspheremachine_controller.go

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -155,21 +155,17 @@ func AddMachineControllerToManager(ctx *context.ControllerManagerContext, mgr ma
155155
)
156156
}
157157

158-
c, err := builder.Build(r)
159-
if err != nil {
160-
return err
161-
}
162-
163158
if !supervisorBased {
164-
err = c.Watch(
165-
source.Kind(mgr.GetCache(), &clusterv1.Cluster{}),
159+
builder.Watches(
160+
&clusterv1.Cluster{},
166161
handler.EnqueueRequestsFromMapFunc(r.clusterToVSphereMachines),
167-
predicates.ClusterUnpausedAndInfrastructureReady(r.Logger))
168-
if err != nil {
169-
return err
170-
}
162+
ctrlbldr.WithPredicates(
163+
predicates.ClusterUnpausedAndInfrastructureReady(r.Logger),
164+
),
165+
)
171166
}
172-
return nil
167+
168+
return builder.Complete(r)
173169
}
174170

175171
type machineReconciler struct {

controllers/vspherevm_controller.go

Lines changed: 40 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import (
3838
"sigs.k8s.io/cluster-api/util/patch"
3939
"sigs.k8s.io/cluster-api/util/predicates"
4040
ctrl "sigs.k8s.io/controller-runtime"
41+
ctrlbldr "sigs.k8s.io/controller-runtime/pkg/builder"
4142
ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
4243
"sigs.k8s.io/controller-runtime/pkg/controller"
4344
ctrlutil "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
@@ -92,7 +93,8 @@ func AddVMControllerToManager(ctx *context.ControllerManagerContext, mgr manager
9293
VMService: &govmomi.VMService{},
9394
remoteClusterCacheTracker: tracker,
9495
}
95-
controller, err := ctrl.NewControllerManagedBy(mgr).
96+
97+
return ctrl.NewControllerManagedBy(mgr).
9698
// Watch the controlled, infrastructure resource.
9799
For(controlledType).
98100
WithOptions(options).
@@ -106,54 +108,43 @@ func AddVMControllerToManager(ctx *context.ControllerManagerContext, mgr manager
106108
&handler.EnqueueRequestForObject{},
107109
).
108110
WithEventFilter(predicates.ResourceNotPausedAndHasFilterLabel(ctrl.LoggerFrom(ctx), ctx.WatchFilterValue)).
109-
Build(r)
110-
if err != nil {
111-
return err
112-
}
113-
114-
err = controller.Watch(
115-
source.Kind(mgr.GetCache(), &clusterv1.Cluster{}),
116-
handler.EnqueueRequestsFromMapFunc(r.clusterToVSphereVMs),
117-
predicate.Funcs{
118-
UpdateFunc: func(e event.UpdateEvent) bool {
119-
newCluster := e.ObjectNew.(*clusterv1.Cluster)
120-
// check whether cluster has either spec.paused or pasued annotation
121-
return !annotations.IsPaused(newCluster, newCluster)
122-
},
123-
CreateFunc: func(e event.CreateEvent) bool {
124-
cluster := e.Object.(*clusterv1.Cluster)
125-
// check whether cluster has either spec.paused or pasued annotation
126-
return annotations.IsPaused(cluster, cluster)
127-
},
128-
})
129-
if err != nil {
130-
return err
131-
}
132-
133-
err = controller.Watch(
134-
source.Kind(mgr.GetCache(), &infrav1.VSphereCluster{}),
135-
handler.EnqueueRequestsFromMapFunc(r.vsphereClusterToVSphereVMs),
136-
predicate.Funcs{
137-
UpdateFunc: func(e event.UpdateEvent) bool {
138-
oldCluster := e.ObjectOld.(*infrav1.VSphereCluster)
139-
newCluster := e.ObjectNew.(*infrav1.VSphereCluster)
140-
return !clustermodule.Compare(oldCluster.Spec.ClusterModules, newCluster.Spec.ClusterModules)
141-
},
142-
CreateFunc: func(e event.CreateEvent) bool { return false },
143-
DeleteFunc: func(e event.DeleteEvent) bool { return false },
144-
GenericFunc: func(e event.GenericEvent) bool { return false },
145-
})
146-
if err != nil {
147-
return err
148-
}
149-
150-
err = controller.Watch(
151-
source.Kind(mgr.GetCache(), &ipamv1.IPAddressClaim{}),
152-
handler.EnqueueRequestsFromMapFunc(r.ipAddressClaimToVSphereVM))
153-
if err != nil {
154-
return err
155-
}
156-
return nil
111+
Watches(
112+
&clusterv1.Cluster{},
113+
handler.EnqueueRequestsFromMapFunc(r.clusterToVSphereVMs),
114+
ctrlbldr.WithPredicates(
115+
predicate.Funcs{
116+
UpdateFunc: func(e event.UpdateEvent) bool {
117+
newCluster := e.ObjectNew.(*clusterv1.Cluster)
118+
// check whether cluster has either spec.paused or pasued annotation
119+
return !annotations.IsPaused(newCluster, newCluster)
120+
},
121+
CreateFunc: func(e event.CreateEvent) bool {
122+
cluster := e.Object.(*clusterv1.Cluster)
123+
// check whether cluster has either spec.paused or pasued annotation
124+
return annotations.IsPaused(cluster, cluster)
125+
},
126+
}),
127+
).
128+
Watches(
129+
&infrav1.VSphereCluster{},
130+
handler.EnqueueRequestsFromMapFunc(r.vsphereClusterToVSphereVMs),
131+
ctrlbldr.WithPredicates(
132+
predicate.Funcs{
133+
UpdateFunc: func(e event.UpdateEvent) bool {
134+
oldCluster := e.ObjectOld.(*infrav1.VSphereCluster)
135+
newCluster := e.ObjectNew.(*infrav1.VSphereCluster)
136+
return !clustermodule.Compare(oldCluster.Spec.ClusterModules, newCluster.Spec.ClusterModules)
137+
},
138+
CreateFunc: func(e event.CreateEvent) bool { return false },
139+
DeleteFunc: func(e event.DeleteEvent) bool { return false },
140+
GenericFunc: func(e event.GenericEvent) bool { return false },
141+
}),
142+
).
143+
Watches(
144+
&ipamv1.IPAddressClaim{},
145+
handler.EnqueueRequestsFromMapFunc(r.ipAddressClaimToVSphereVM),
146+
).
147+
Complete(r)
157148
}
158149

159150
type vmReconciler struct {

0 commit comments

Comments
 (0)