Skip to content

Commit 7c855f5

Browse files
authored
Merge pull request #8226 from sbueringer/pr-consistent-ctrl-setup
🌱 all: setup controller in a consistent way
2 parents 9232ca7 + 61a336c commit 7c855f5

File tree

11 files changed

+126
-128
lines changed

11 files changed

+126
-128
lines changed

bootstrap/kubeadm/internal/controllers/kubeadmconfig_controller.go

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
"k8s.io/klog/v2"
3535
"k8s.io/utils/pointer"
3636
ctrl "sigs.k8s.io/controller-runtime"
37+
"sigs.k8s.io/controller-runtime/pkg/builder"
3738
"sigs.k8s.io/controller-runtime/pkg/client"
3839
"sigs.k8s.io/controller-runtime/pkg/controller"
3940
"sigs.k8s.io/controller-runtime/pkg/handler"
@@ -142,26 +143,23 @@ func (r *KubeadmConfigReconciler) SetupWithManager(ctx context.Context, mgr ctrl
142143
b = b.Watches(
143144
&source.Kind{Type: &expv1.MachinePool{}},
144145
handler.EnqueueRequestsFromMapFunc(r.MachinePoolToBootstrapMapFunc),
145-
).WithEventFilter(predicates.ResourceNotPausedAndHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue))
146-
}
147-
148-
c, err := b.Build(r)
149-
if err != nil {
150-
return errors.Wrap(err, "failed setting up with a controller manager")
146+
)
151147
}
152148

153-
err = c.Watch(
149+
b = b.Watches(
154150
&source.Kind{Type: &clusterv1.Cluster{}},
155151
handler.EnqueueRequestsFromMapFunc(r.ClusterToKubeadmConfigs),
156-
predicates.All(ctrl.LoggerFrom(ctx),
157-
predicates.ClusterUnpausedAndInfrastructureReady(ctrl.LoggerFrom(ctx)),
158-
predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
152+
builder.WithPredicates(
153+
predicates.All(ctrl.LoggerFrom(ctx),
154+
predicates.ClusterUnpausedAndInfrastructureReady(ctrl.LoggerFrom(ctx)),
155+
predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
156+
),
159157
),
160158
)
161-
if err != nil {
162-
return errors.Wrap(err, "failed adding Watch for Clusters to controller manager")
163-
}
164159

160+
if err := b.Complete(r); err != nil {
161+
return errors.Wrap(err, "failed setting up with a controller manager")
162+
}
165163
return nil
166164
}
167165

controlplane/kubeadm/internal/controllers/controller.go

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"k8s.io/klog/v2"
3232
"k8s.io/utils/pointer"
3333
ctrl "sigs.k8s.io/controller-runtime"
34+
"sigs.k8s.io/controller-runtime/pkg/builder"
3435
"sigs.k8s.io/controller-runtime/pkg/client"
3536
"sigs.k8s.io/controller-runtime/pkg/controller"
3637
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
@@ -95,23 +96,20 @@ func (r *KubeadmControlPlaneReconciler) SetupWithManager(ctx context.Context, mg
9596
Owns(&clusterv1.Machine{}).
9697
WithOptions(options).
9798
WithEventFilter(predicates.ResourceNotPausedAndHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue)).
98-
Build(r)
99+
Watches(
100+
&source.Kind{Type: &clusterv1.Cluster{}},
101+
handler.EnqueueRequestsFromMapFunc(r.ClusterToKubeadmControlPlane),
102+
builder.WithPredicates(
103+
predicates.All(ctrl.LoggerFrom(ctx),
104+
predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
105+
predicates.ClusterUnpausedAndInfrastructureReady(ctrl.LoggerFrom(ctx)),
106+
),
107+
),
108+
).Build(r)
99109
if err != nil {
100110
return errors.Wrap(err, "failed setting up with a controller manager")
101111
}
102112

103-
err = c.Watch(
104-
&source.Kind{Type: &clusterv1.Cluster{}},
105-
handler.EnqueueRequestsFromMapFunc(r.ClusterToKubeadmControlPlane),
106-
predicates.All(ctrl.LoggerFrom(ctx),
107-
predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
108-
predicates.ClusterUnpausedAndInfrastructureReady(ctrl.LoggerFrom(ctx)),
109-
),
110-
)
111-
if err != nil {
112-
return errors.Wrap(err, "failed adding Watch for Clusters to controller manager")
113-
}
114-
115113
r.controller = c
116114
r.recorder = mgr.GetEventRecorderFor("kubeadm-control-plane-controller")
117115
r.ssaCache = ssa.NewCache()

exp/internal/controllers/machinepool_controller.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"k8s.io/client-go/tools/record"
3030
"k8s.io/klog/v2"
3131
ctrl "sigs.k8s.io/controller-runtime"
32+
"sigs.k8s.io/controller-runtime/pkg/builder"
3233
"sigs.k8s.io/controller-runtime/pkg/client"
3334
"sigs.k8s.io/controller-runtime/pkg/controller"
3435
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
@@ -80,22 +81,21 @@ func (r *MachinePoolReconciler) SetupWithManager(ctx context.Context, mgr ctrl.M
8081
For(&expv1.MachinePool{}).
8182
WithOptions(options).
8283
WithEventFilter(predicates.ResourceNotPausedAndHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue)).
84+
Watches(
85+
&source.Kind{Type: &clusterv1.Cluster{}},
86+
handler.EnqueueRequestsFromMapFunc(clusterToMachinePools),
87+
// TODO: should this wait for Cluster.Status.InfrastructureReady similar to Infra Machine resources?
88+
builder.WithPredicates(
89+
predicates.All(ctrl.LoggerFrom(ctx),
90+
predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
91+
predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
92+
),
93+
),
94+
).
8395
Build(r)
8496
if err != nil {
8597
return errors.Wrap(err, "failed setting up with a controller manager")
8698
}
87-
err = c.Watch(
88-
&source.Kind{Type: &clusterv1.Cluster{}},
89-
handler.EnqueueRequestsFromMapFunc(clusterToMachinePools),
90-
// TODO: should this wait for Cluster.Status.InfrastructureReady similar to Infra Machine resources?
91-
predicates.All(ctrl.LoggerFrom(ctx),
92-
predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
93-
predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
94-
),
95-
)
96-
if err != nil {
97-
return errors.Wrap(err, "failed adding Watch for Cluster to controller manager")
98-
}
9999

100100
r.controller = c
101101
r.recorder = mgr.GetEventRecorderFor("machinepool-controller")

internal/controllers/cluster/cluster_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ type Reconciler struct {
7676
}
7777

7878
func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, options controller.Options) error {
79-
controller, err := ctrl.NewControllerManagedBy(mgr).
79+
c, err := ctrl.NewControllerManagedBy(mgr).
8080
For(&clusterv1.Cluster{}).
8181
Watches(
8282
&source.Kind{Type: &clusterv1.Machine{}},
@@ -92,7 +92,7 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt
9292

9393
r.recorder = mgr.GetEventRecorderFor("cluster-controller")
9494
r.externalTracker = external.ObjectTracker{
95-
Controller: controller,
95+
Controller: c,
9696
}
9797
return nil
9898
}

internal/controllers/machine/machine_controller.go

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
"k8s.io/klog/v2"
3535
kubedrain "k8s.io/kubectl/pkg/drain"
3636
ctrl "sigs.k8s.io/controller-runtime"
37+
"sigs.k8s.io/controller-runtime/pkg/builder"
3738
"sigs.k8s.io/controller-runtime/pkg/client"
3839
"sigs.k8s.io/controller-runtime/pkg/controller"
3940
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
@@ -109,36 +110,33 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt
109110
r.nodeDeletionRetryTimeout = 10 * time.Second
110111
}
111112

112-
controller, err := ctrl.NewControllerManagedBy(mgr).
113+
c, err := ctrl.NewControllerManagedBy(mgr).
113114
For(&clusterv1.Machine{}).
114115
WithOptions(options).
115116
WithEventFilter(predicates.ResourceNotPausedAndHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue)).
117+
Watches(
118+
&source.Kind{Type: &clusterv1.Cluster{}},
119+
handler.EnqueueRequestsFromMapFunc(clusterToMachines),
120+
builder.WithPredicates(
121+
// TODO: should this wait for Cluster.Status.InfrastructureReady similar to Infra Machine resources?
122+
predicates.All(ctrl.LoggerFrom(ctx),
123+
predicates.Any(ctrl.LoggerFrom(ctx),
124+
predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
125+
predicates.ClusterControlPlaneInitialized(ctrl.LoggerFrom(ctx)),
126+
),
127+
predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
128+
),
129+
)).
116130
Build(r)
117131
if err != nil {
118132
return errors.Wrap(err, "failed setting up with a controller manager")
119133
}
120134

121-
err = controller.Watch(
122-
&source.Kind{Type: &clusterv1.Cluster{}},
123-
handler.EnqueueRequestsFromMapFunc(clusterToMachines),
124-
// TODO: should this wait for Cluster.Status.InfrastructureReady similar to Infra Machine resources?
125-
predicates.All(ctrl.LoggerFrom(ctx),
126-
predicates.Any(ctrl.LoggerFrom(ctx),
127-
predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
128-
predicates.ClusterControlPlaneInitialized(ctrl.LoggerFrom(ctx)),
129-
),
130-
predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
131-
),
132-
)
133-
if err != nil {
134-
return errors.Wrap(err, "failed to add Watch for Clusters to controller manager")
135-
}
136-
137-
r.controller = controller
135+
r.controller = c
138136

139137
r.recorder = mgr.GetEventRecorderFor("machine-controller")
140138
r.externalTracker = external.ObjectTracker{
141-
Controller: controller,
139+
Controller: c,
142140
}
143141
r.ssaCache = ssa.NewCache()
144142
return nil

internal/controllers/machinedeployment/machinedeployment_controller.go

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"k8s.io/client-go/tools/record"
3131
"k8s.io/klog/v2"
3232
ctrl "sigs.k8s.io/controller-runtime"
33+
"sigs.k8s.io/controller-runtime/pkg/builder"
3334
"sigs.k8s.io/controller-runtime/pkg/client"
3435
"sigs.k8s.io/controller-runtime/pkg/controller"
3536
"sigs.k8s.io/controller-runtime/pkg/handler"
@@ -79,7 +80,7 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt
7980
return err
8081
}
8182

82-
c, err := ctrl.NewControllerManagedBy(mgr).
83+
err = ctrl.NewControllerManagedBy(mgr).
8384
For(&clusterv1.MachineDeployment{}).
8485
Owns(&clusterv1.MachineSet{}).
8586
Watches(
@@ -88,24 +89,21 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt
8889
).
8990
WithOptions(options).
9091
WithEventFilter(predicates.ResourceNotPausedAndHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue)).
91-
Build(r)
92+
Watches(
93+
&source.Kind{Type: &clusterv1.Cluster{}},
94+
handler.EnqueueRequestsFromMapFunc(clusterToMachineDeployments),
95+
builder.WithPredicates(
96+
// TODO: should this wait for Cluster.Status.InfrastructureReady similar to Infra Machine resources?
97+
predicates.All(ctrl.LoggerFrom(ctx),
98+
predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
99+
predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
100+
),
101+
),
102+
).Complete(r)
92103
if err != nil {
93104
return errors.Wrap(err, "failed setting up with a controller manager")
94105
}
95106

96-
err = c.Watch(
97-
&source.Kind{Type: &clusterv1.Cluster{}},
98-
handler.EnqueueRequestsFromMapFunc(clusterToMachineDeployments),
99-
// TODO: should this wait for Cluster.Status.InfrastructureReady similar to Infra Machine resources?
100-
predicates.All(ctrl.LoggerFrom(ctx),
101-
predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
102-
predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
103-
),
104-
)
105-
if err != nil {
106-
return errors.Wrap(err, "failed to add Watch for Clusters to controller manager")
107-
}
108-
109107
r.recorder = mgr.GetEventRecorderFor("machinedeployment-controller")
110108
r.ssaCache = ssa.NewCache()
111109
return nil

internal/controllers/machinehealthcheck/machinehealthcheck_controller.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
"k8s.io/client-go/tools/record"
3737
"k8s.io/klog/v2"
3838
ctrl "sigs.k8s.io/controller-runtime"
39+
"sigs.k8s.io/controller-runtime/pkg/builder"
3940
"sigs.k8s.io/controller-runtime/pkg/client"
4041
"sigs.k8s.io/controller-runtime/pkg/controller"
4142
"sigs.k8s.io/controller-runtime/pkg/handler"
@@ -85,32 +86,30 @@ type Reconciler struct {
8586
}
8687

8788
func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, options controller.Options) error {
88-
controller, err := ctrl.NewControllerManagedBy(mgr).
89+
c, err := ctrl.NewControllerManagedBy(mgr).
8990
For(&clusterv1.MachineHealthCheck{}).
9091
Watches(
9192
&source.Kind{Type: &clusterv1.Machine{}},
9293
handler.EnqueueRequestsFromMapFunc(r.machineToMachineHealthCheck),
9394
).
9495
WithOptions(options).
9596
WithEventFilter(predicates.ResourceNotPausedAndHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue)).
96-
Build(r)
97+
Watches(
98+
&source.Kind{Type: &clusterv1.Cluster{}},
99+
handler.EnqueueRequestsFromMapFunc(r.clusterToMachineHealthCheck),
100+
builder.WithPredicates(
101+
// TODO: should this wait for Cluster.Status.InfrastructureReady similar to Infra Machine resources?
102+
predicates.All(ctrl.LoggerFrom(ctx),
103+
predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
104+
predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
105+
),
106+
),
107+
).Build(r)
97108
if err != nil {
98109
return errors.Wrap(err, "failed setting up with a controller manager")
99110
}
100-
err = controller.Watch(
101-
&source.Kind{Type: &clusterv1.Cluster{}},
102-
handler.EnqueueRequestsFromMapFunc(r.clusterToMachineHealthCheck),
103-
// TODO: should this wait for Cluster.Status.InfrastructureReady similar to Infra Machine resources?
104-
predicates.All(ctrl.LoggerFrom(ctx),
105-
predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
106-
predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
107-
),
108-
)
109-
if err != nil {
110-
return errors.Wrap(err, "failed to add Watch for Clusters to controller manager")
111-
}
112111

113-
r.controller = controller
112+
r.controller = c
114113
r.recorder = mgr.GetEventRecorderFor("machinehealthcheck-controller")
115114
return nil
116115
}

internal/controllers/machineset/machineset_controller.go

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"k8s.io/client-go/tools/record"
3434
"k8s.io/klog/v2"
3535
ctrl "sigs.k8s.io/controller-runtime"
36+
"sigs.k8s.io/controller-runtime/pkg/builder"
3637
"sigs.k8s.io/controller-runtime/pkg/client"
3738
"sigs.k8s.io/controller-runtime/pkg/controller"
3839
"sigs.k8s.io/controller-runtime/pkg/handler"
@@ -95,7 +96,7 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt
9596
return err
9697
}
9798

98-
c, err := ctrl.NewControllerManagedBy(mgr).
99+
err = ctrl.NewControllerManagedBy(mgr).
99100
For(&clusterv1.MachineSet{}).
100101
Owns(&clusterv1.Machine{}).
101102
Watches(
@@ -104,24 +105,21 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt
104105
).
105106
WithOptions(options).
106107
WithEventFilter(predicates.ResourceNotPausedAndHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue)).
107-
Build(r)
108+
Watches(
109+
&source.Kind{Type: &clusterv1.Cluster{}},
110+
handler.EnqueueRequestsFromMapFunc(clusterToMachineSets),
111+
builder.WithPredicates(
112+
// TODO: should this wait for Cluster.Status.InfrastructureReady similar to Infra Machine resources?
113+
predicates.All(ctrl.LoggerFrom(ctx),
114+
predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
115+
predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
116+
),
117+
),
118+
).Complete(r)
108119
if err != nil {
109120
return errors.Wrap(err, "failed setting up with a controller manager")
110121
}
111122

112-
err = c.Watch(
113-
&source.Kind{Type: &clusterv1.Cluster{}},
114-
handler.EnqueueRequestsFromMapFunc(clusterToMachineSets),
115-
// TODO: should this wait for Cluster.Status.InfrastructureReady similar to Infra Machine resources?
116-
predicates.All(ctrl.LoggerFrom(ctx),
117-
predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
118-
predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
119-
),
120-
)
121-
if err != nil {
122-
return errors.Wrap(err, "failed to add Watch for Clusters to controller manager")
123-
}
124-
125123
r.recorder = mgr.GetEventRecorderFor("machineset-controller")
126124
r.ssaCache = ssa.NewCache()
127125
return nil

0 commit comments

Comments
 (0)