Skip to content

Commit 11620ba

Browse files
authored
Merge pull request kubernetes-sigs#9985 from adityabhatia/revertClusterWatcherForTopologyMD
🐛 Revert "Watch for Cluster resources in topology MD controller"
2 parents eb88bc8 + b3e0d05 commit 11620ba

File tree

4 files changed

+33
-24
lines changed

4 files changed

+33
-24
lines changed

internal/controllers/machinedeployment/machinedeployment_controller.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,12 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt
9292
Watches(
9393
&clusterv1.Cluster{},
9494
handler.EnqueueRequestsFromMapFunc(clusterToMachineDeployments),
95-
// TODO: should this wait for Cluster.Status.InfrastructureReady similar to Infra Machine resources?
9695
builder.WithPredicates(
97-
predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
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+
),
98101
),
99102
).Complete(r)
100103
if err != nil {

internal/controllers/topology/machinedeployment/machinedeployment_controller.go

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@ 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"
2827
"sigs.k8s.io/controller-runtime/pkg/client"
2928
"sigs.k8s.io/controller-runtime/pkg/controller"
3029
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
31-
"sigs.k8s.io/controller-runtime/pkg/handler"
3230

3331
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
3432
"sigs.k8s.io/cluster-api/internal/controllers/topology/machineset"
@@ -57,27 +55,14 @@ type Reconciler struct {
5755
}
5856

5957
func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, options controller.Options) error {
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.ResourceIsTopologyOwned(ctrl.LoggerFrom(ctx)),
69-
predicates.ResourceNotPaused(ctrl.LoggerFrom(ctx)))).
58+
err := ctrl.NewControllerManagedBy(mgr).
59+
For(&clusterv1.MachineDeployment{}).
7060
Named("topology/machinedeployment").
71-
WithEventFilter(predicates.ResourceHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue)).
7261
WithOptions(options).
73-
Watches(
74-
&clusterv1.Cluster{},
75-
handler.EnqueueRequestsFromMapFunc(clusterToMachineDeployments),
76-
builder.WithPredicates(
77-
predicates.ClusterHasTopology(ctrl.LoggerFrom(ctx)),
78-
predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
79-
),
80-
).
62+
WithEventFilter(predicates.All(ctrl.LoggerFrom(ctx),
63+
predicates.ResourceNotPausedAndHasFilterLabel(ctrl.LoggerFrom(ctx), r.WatchFilterValue),
64+
predicates.ResourceIsTopologyOwned(ctrl.LoggerFrom(ctx)),
65+
)).
8166
Complete(r)
8267
if err != nil {
8368
return errors.Wrap(err, "failed setting up with a controller manager")

test/framework/finalizers_helpers.go

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

2525
. "github.com/onsi/gomega"
2626
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
27+
"k8s.io/apimachinery/pkg/types"
2728
kerrors "k8s.io/apimachinery/pkg/util/errors"
2829
"sigs.k8s.io/controller-runtime/pkg/client"
2930

@@ -66,6 +67,10 @@ func ValidateFinalizersResilience(ctx context.Context, proxy ClusterProxy, names
6667
// Unpause the cluster.
6768
setClusterPause(ctx, proxy.GetClient(), clusterKey, false)
6869

70+
// Annotate the MachineDeployment to speed up reconciliation. This ensures MachineDeployment topology Finalizers are re-reconciled.
71+
// TODO: Remove this as part of https://github.com/kubernetes-sigs/cluster-api/issues/9532
72+
forceMachineDeploymentTopologyReconcile(ctx, proxy.GetClient(), clusterKey)
73+
6974
// Check that the Finalizers are as expected after further reconciliations.
7075
assertFinalizersExist(ctx, proxy, namespace, objectsWithFinalizers)
7176
}
@@ -143,3 +148,19 @@ func assertFinalizersExist(ctx context.Context, proxy ClusterProxy, namespace st
143148
return kerrors.NewAggregate(allErrs)
144149
}).WithTimeout(1 * time.Minute).WithPolling(2 * time.Second).Should(Succeed())
145150
}
151+
152+
// forceMachineDeploymentTopologyReconcile forces reconciliation of the MachineDeployment.
153+
func forceMachineDeploymentTopologyReconcile(ctx context.Context, cli client.Client, clusterKey types.NamespacedName) {
154+
mdList := &clusterv1.MachineDeploymentList{}
155+
clientOptions := (&client.ListOptions{}).ApplyOptions([]client.ListOption{
156+
client.MatchingLabels{clusterv1.ClusterNameLabel: clusterKey.Name},
157+
})
158+
Expect(cli.List(ctx, mdList, clientOptions)).To(Succeed())
159+
160+
for i := range mdList.Items {
161+
if _, ok := mdList.Items[i].GetLabels()[clusterv1.ClusterTopologyOwnedLabel]; ok {
162+
annotationPatch := client.RawPatch(types.MergePatchType, []byte(fmt.Sprintf("{\"metadata\":{\"annotations\":{\"cluster.x-k8s.io/modifiedAt\":\"%v\"}}}", time.Now().Format(time.RFC3339))))
163+
Expect(cli.Patch(ctx, &mdList.Items[i], annotationPatch)).To(Succeed())
164+
}
165+
}
166+
}

util/util.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ func ClusterToTypedObjectsMapper(c client.Client, ro client.ObjectList, scheme *
522522

523523
results := []ctrl.Request{}
524524
for _, obj := range objects {
525-
// Note: We don't check if the type cast succeeds as all items in a client.ObjectList
525+
// Note: We don't check if the type cast succeeds as all items in an client.ObjectList
526526
// are client.Objects.
527527
o := obj.(client.Object)
528528
results = append(results, ctrl.Request{

0 commit comments

Comments
 (0)