Skip to content

Commit 2100b43

Browse files
authored
Merge pull request #1944 from rikatz/improve-fd-selector
🌱 Improve fd selection logic
2 parents ae6652a + eb6f475 commit 2100b43

File tree

1 file changed

+27
-31
lines changed

1 file changed

+27
-31
lines changed

controllers/vspherecluster_reconciler.go

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
apiv1 "k8s.io/api/core/v1"
2828
apierrors "k8s.io/apimachinery/pkg/api/errors"
2929
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
30-
"k8s.io/apimachinery/pkg/labels"
3130
"k8s.io/apimachinery/pkg/types"
3231
kerrors "k8s.io/apimachinery/pkg/util/errors"
3332
"k8s.io/apimachinery/pkg/util/wait"
@@ -351,49 +350,46 @@ func (r clusterReconciler) reconcileVCenterVersion(ctx *context.ClusterContext,
351350
}
352351

353352
func (r clusterReconciler) reconcileDeploymentZones(ctx *context.ClusterContext) (bool, error) {
353+
// If there is no failure domain selector, we should simply skip it
354+
if ctx.VSphereCluster.Spec.FailureDomainSelector == nil {
355+
return true, nil
356+
}
357+
358+
var opts client.ListOptions
359+
var err error
360+
opts.LabelSelector, err = metav1.LabelSelectorAsSelector(ctx.VSphereCluster.Spec.FailureDomainSelector)
361+
if err != nil {
362+
return false, errors.Wrapf(err, "zone label selector is misconfigured")
363+
}
364+
354365
var deploymentZoneList infrav1.VSphereDeploymentZoneList
355-
err := r.Client.List(ctx, &deploymentZoneList)
366+
err = r.Client.List(ctx, &deploymentZoneList, &opts)
356367
if err != nil {
357368
return false, errors.Wrap(err, "unable to list deployment zones")
358369
}
359370

360371
readyNotReported, notReady := 0, 0
361372
failureDomains := clusterv1.FailureDomains{}
362373
for _, zone := range deploymentZoneList.Items {
363-
if zone.Spec.Server == ctx.VSphereCluster.Spec.Server {
364-
// If users are deploying a non-multi-az workload cluster in a multi-az enabled management cluster,
365-
// FailureDomainSelector shouldn't be set, it would be a null label selector, and no zone should be
366-
// selected
367-
if ctx.VSphereCluster.Spec.FailureDomainSelector == nil {
368-
continue
369-
}
370-
371-
selector, err := metav1.LabelSelectorAsSelector(ctx.VSphereCluster.Spec.FailureDomainSelector)
372-
if err != nil {
373-
return false, errors.Wrapf(err, "zone label selector is misconfigured")
374-
}
374+
if zone.Spec.Server != ctx.VSphereCluster.Spec.Server {
375+
continue
376+
}
375377

376-
// An empty selector allows the zone to be selected
377-
if !selector.Empty() && !selector.Matches(labels.Set(zone.GetLabels())) {
378-
r.Logger.V(5).Info("skipping the deployment zone due to label mismatch", "name", zone.Name)
379-
continue
378+
if zone.Status.Ready == nil {
379+
readyNotReported++
380+
failureDomains[zone.Name] = clusterv1.FailureDomainSpec{
381+
ControlPlane: pointer.BoolDeref(zone.Spec.ControlPlane, true),
380382
}
383+
continue
384+
}
381385

382-
if zone.Status.Ready == nil {
383-
readyNotReported++
384-
failureDomains[zone.Name] = clusterv1.FailureDomainSpec{
385-
ControlPlane: pointer.BoolDeref(zone.Spec.ControlPlane, true),
386-
}
387-
} else {
388-
if *zone.Status.Ready {
389-
failureDomains[zone.Name] = clusterv1.FailureDomainSpec{
390-
ControlPlane: pointer.BoolDeref(zone.Spec.ControlPlane, true),
391-
}
392-
} else {
393-
notReady++
394-
}
386+
if *zone.Status.Ready {
387+
failureDomains[zone.Name] = clusterv1.FailureDomainSpec{
388+
ControlPlane: pointer.BoolDeref(zone.Spec.ControlPlane, true),
395389
}
390+
continue
396391
}
392+
notReady++
397393
}
398394

399395
ctx.VSphereCluster.Status.FailureDomains = failureDomains

0 commit comments

Comments
 (0)