Skip to content

Commit 28f0335

Browse files
authored
Merge pull request kubernetes-sigs#10029 from adityabhatia/clusterWatcherInMdCtrl
🌱 Watch for Cluster resources in topology MachineSet & MachineDeployment controllers
2 parents 4174cd7 + ba855c9 commit 28f0335

File tree

4 files changed

+52
-34
lines changed

4 files changed

+52
-34
lines changed

internal/controllers/machinedeployment/machinedeployment_controller.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt
9696
// TODO: should this wait for Cluster.Status.InfrastructureReady similar to Infra Machine resources?
9797
predicates.All(ctrl.LoggerFrom(ctx),
9898
predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
99-
predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
10099
),
101100
),
102101
).Complete(r)

internal/controllers/topology/machinedeployment/machinedeployment_controller.go

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ import (
2424
kerrors "k8s.io/apimachinery/pkg/util/errors"
2525
"k8s.io/klog/v2"
2626
ctrl "sigs.k8s.io/controller-runtime"
27+
"sigs.k8s.io/controller-runtime/pkg/builder"
2728
"sigs.k8s.io/controller-runtime/pkg/client"
2829
"sigs.k8s.io/controller-runtime/pkg/controller"
2930
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
31+
"sigs.k8s.io/controller-runtime/pkg/handler"
3032

3133
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
3234
"sigs.k8s.io/cluster-api/internal/controllers/topology/machineset"
@@ -55,14 +57,32 @@ type Reconciler struct {
5557
}
5658

5759
func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, options controller.Options) error {
58-
err := ctrl.NewControllerManagedBy(mgr).
59-
For(&clusterv1.MachineDeployment{}).
60+
clusterToMachineDeployments, err := util.ClusterToTypedObjectsMapper(mgr.GetClient(), &clusterv1.MachineDeploymentList{}, mgr.GetScheme())
61+
if err != nil {
62+
return err
63+
}
64+
65+
err = ctrl.NewControllerManagedBy(mgr).
66+
For(&clusterv1.MachineDeployment{},
67+
builder.WithPredicates(
68+
predicates.All(ctrl.LoggerFrom(ctx),
69+
predicates.ResourceIsTopologyOwned(ctrl.LoggerFrom(ctx)),
70+
predicates.ResourceNotPaused(ctrl.LoggerFrom(ctx))),
71+
),
72+
).
6073
Named("topology/machinedeployment").
6174
WithOptions(options).
62-
WithEventFilter(predicates.All(ctrl.LoggerFrom(ctx),
63-
predicates.ResourceNotPausedAndHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
64-
predicates.ResourceIsTopologyOwned(ctrl.LoggerFrom(ctx)),
65-
)).
75+
WithEventFilter(predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue)).
76+
Watches(
77+
&clusterv1.Cluster{},
78+
handler.EnqueueRequestsFromMapFunc(clusterToMachineDeployments),
79+
builder.WithPredicates(
80+
predicates.All(ctrl.LoggerFrom(ctx),
81+
predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
82+
predicates.ClusterHasTopology(ctrl.LoggerFrom(ctx)),
83+
),
84+
),
85+
).
6686
Complete(r)
6787
if err != nil {
6888
return errors.Wrap(err, "failed setting up with a controller manager")

internal/controllers/topology/machineset/machineset_controller.go

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ import (
2626
kerrors "k8s.io/apimachinery/pkg/util/errors"
2727
"k8s.io/klog/v2"
2828
ctrl "sigs.k8s.io/controller-runtime"
29+
"sigs.k8s.io/controller-runtime/pkg/builder"
2930
"sigs.k8s.io/controller-runtime/pkg/client"
3031
"sigs.k8s.io/controller-runtime/pkg/controller"
3132
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
33+
"sigs.k8s.io/controller-runtime/pkg/handler"
3234

3335
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
3436
tlog "sigs.k8s.io/cluster-api/internal/log"
@@ -57,14 +59,32 @@ type Reconciler struct {
5759
}
5860

5961
func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, options controller.Options) error {
60-
err := ctrl.NewControllerManagedBy(mgr).
61-
For(&clusterv1.MachineSet{}).
62+
clusterToMachineSets, err := util.ClusterToTypedObjectsMapper(mgr.GetClient(), &clusterv1.MachineSetList{}, mgr.GetScheme())
63+
if err != nil {
64+
return err
65+
}
66+
67+
err = ctrl.NewControllerManagedBy(mgr).
68+
For(&clusterv1.MachineSet{},
69+
builder.WithPredicates(
70+
predicates.All(ctrl.LoggerFrom(ctx),
71+
predicates.ResourceIsTopologyOwned(ctrl.LoggerFrom(ctx)),
72+
predicates.ResourceNotPaused(ctrl.LoggerFrom(ctx))),
73+
),
74+
).
6275
Named("topology/machineset").
6376
WithOptions(options).
64-
WithEventFilter(predicates.All(ctrl.LoggerFrom(ctx),
65-
predicates.ResourceNotPausedAndHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
66-
predicates.ResourceIsTopologyOwned(ctrl.LoggerFrom(ctx)),
67-
)).
77+
WithEventFilter(predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue)).
78+
Watches(
79+
&clusterv1.Cluster{},
80+
handler.EnqueueRequestsFromMapFunc(clusterToMachineSets),
81+
builder.WithPredicates(
82+
predicates.All(ctrl.LoggerFrom(ctx),
83+
predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
84+
predicates.ClusterHasTopology(ctrl.LoggerFrom(ctx)),
85+
),
86+
),
87+
).
6888
Complete(r)
6989
if err != nil {
7090
return errors.Wrap(err, "failed setting up with a controller manager")

test/framework/finalizers_helpers.go

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424

2525
. "github.com/onsi/gomega"
2626
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
27-
"k8s.io/apimachinery/pkg/types"
2827
kerrors "k8s.io/apimachinery/pkg/util/errors"
2928
"sigs.k8s.io/controller-runtime/pkg/client"
3029

@@ -85,10 +84,6 @@ func ValidateFinalizersResilience(ctx context.Context, proxy ClusterProxy, names
8584
// Unpause the cluster.
8685
setClusterPause(ctx, proxy.GetClient(), clusterKey, false)
8786

88-
// Annotate the MachineDeployment to speed up reconciliation. This ensures MachineDeployment topology Finalizers are re-reconciled.
89-
// TODO: Remove this as part of https://github.com/kubernetes-sigs/cluster-api/issues/9532
90-
forceMachineDeploymentTopologyReconcile(ctx, proxy.GetClient(), clusterKey)
91-
9287
// Check that the Finalizers are as expected after further reconciliations.
9388
assertFinalizersExist(ctx, proxy, namespace, objectsWithFinalizers, allFinalizerAssertions)
9489
}
@@ -189,19 +184,3 @@ func concatenateFinalizerAssertions(finalizerAssertions ...map[string][]string)
189184

190185
return allFinalizerAssertions, kerrors.NewAggregate(allErrs)
191186
}
192-
193-
// forceMachineDeploymentTopologyReconcile forces reconciliation of the MachineDeployment.
194-
func forceMachineDeploymentTopologyReconcile(ctx context.Context, cli client.Client, clusterKey types.NamespacedName) {
195-
mdList := &clusterv1.MachineDeploymentList{}
196-
clientOptions := (&client.ListOptions{}).ApplyOptions([]client.ListOption{
197-
client.MatchingLabels{clusterv1.ClusterNameLabel: clusterKey.Name},
198-
})
199-
Expect(cli.List(ctx, mdList, clientOptions)).To(Succeed())
200-
201-
for i := range mdList.Items {
202-
if _, ok := mdList.Items[i].GetLabels()[clusterv1.ClusterTopologyOwnedLabel]; ok {
203-
annotationPatch := client.RawPatch(types.MergePatchType, []byte(fmt.Sprintf("{\"metadata\":{\"annotations\":{\"cluster.x-k8s.io/modifiedAt\":\"%v\"}}}", time.Now().Format(time.RFC3339))))
204-
Expect(cli.Patch(ctx, &mdList.Items[i], annotationPatch)).To(Succeed())
205-
}
206-
}
207-
}

0 commit comments

Comments
 (0)