Skip to content

Commit 7ed2914

Browse files
committed
controller: fixes
1 parent 4dfc343 commit 7ed2914

File tree

3 files changed

+21
-11
lines changed

3 files changed

+21
-11
lines changed

pkg/services/vmoperator/resource_policy.go

+10-2
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,14 @@ func getFallbackWorkerClusterModuleGroupName(clusterName string) string {
130130
return fmt.Sprintf("%s-workers-0", clusterName)
131131
}
132132

133+
func getWorkerAntiAffinityMode(vSphereCluster *vmwarev1.VSphereCluster) vmwarev1.VSphereClusterWorkerAntiAffinityMode {
134+
if vSphereCluster.Spec.Placement == nil || vSphereCluster.Spec.Placement.WorkerAntiAffinity == nil {
135+
return vmwarev1.VSphereClusterWorkerAntiAffinityModeCluster
136+
}
137+
138+
return vSphereCluster.Spec.Placement.WorkerAntiAffinity.Mode
139+
}
140+
133141
func getTargetClusterModuleGroups(ctx context.Context, ctrlClient client.Client, cluster *clusterv1.Cluster, vSphereCluster *vmwarev1.VSphereCluster) ([]string, error) {
134142
if !feature.Gates.Enabled(feature.WorkerAntiAffinity) {
135143
// Fallback to old behaviour
@@ -143,7 +151,7 @@ func getTargetClusterModuleGroups(ctx context.Context, ctrlClient client.Client,
143151
ControlPlaneVMClusterModuleGroupName,
144152
}
145153

146-
switch vSphereCluster.Spec.Placement.WorkerAntiAffinity.Mode {
154+
switch mode := getWorkerAntiAffinityMode(vSphereCluster); mode {
147155
case vmwarev1.VSphereClusterWorkerAntiAffinityModeNone:
148156
// Only configure a cluster module for control-plane nodes
149157
case vmwarev1.VSphereClusterWorkerAntiAffinityModeCluster:
@@ -158,7 +166,7 @@ func getTargetClusterModuleGroups(ctx context.Context, ctrlClient client.Client,
158166

159167
modules = append(modules, machineDeploymentNames...)
160168
default:
161-
return nil, errors.Errorf("unknown mode %q configured for WorkerAntiAffinity", vSphereCluster.Spec.Placement.WorkerAntiAffinity.Mode)
169+
return nil, errors.Errorf("unknown mode %q configured for WorkerAntiAffinity", mode)
162170
}
163171

164172
// Add cluster modules from existing VirtualMachines and deduplicate with the target ones.

pkg/services/vmoperator/resource_policy_test.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func TestRPService_ReconcileResourcePolicy(t *testing.T) {
4343
tests := []struct {
4444
name string
4545
cluster *clusterv1.Cluster
46-
vSphereCluster *vmwarev1.VSphereCluster
46+
vSphereCluster *vmwarev1.VSphereCluster ``
4747
additionalObjs []client.Object
4848
wantClusterModuleGroups []string
4949
wantErr bool
@@ -52,7 +52,7 @@ func TestRPService_ReconcileResourcePolicy(t *testing.T) {
5252
{
5353
name: "create VirtualMachinesetResourcePolicy for control-plane only on None mode (WorkerAntiAffinity: false)",
5454
cluster: &clusterv1.Cluster{ObjectMeta: metav1.ObjectMeta{Namespace: "some", Name: "cluster"}},
55-
vSphereCluster: &vmwarev1.VSphereCluster{Spec: vmwarev1.VSphereClusterSpec{Placement: vmwarev1.VSphereClusterPlacement{WorkerAntiAffinity: vmwarev1.VSphereClusterWorkerAntiAffinity{
55+
vSphereCluster: &vmwarev1.VSphereCluster{Spec: vmwarev1.VSphereClusterSpec{Placement: &vmwarev1.VSphereClusterPlacement{WorkerAntiAffinity: &vmwarev1.VSphereClusterWorkerAntiAffinity{
5656
Mode: vmwarev1.VSphereClusterWorkerAntiAffinityModeNone,
5757
}}}},
5858
wantErr: false,
@@ -62,7 +62,7 @@ func TestRPService_ReconcileResourcePolicy(t *testing.T) {
6262
{
6363
name: "create VirtualMachinesetResourcePolicy for control-plane only on None mode (WorkerAntiAffinity: true)",
6464
cluster: &clusterv1.Cluster{ObjectMeta: metav1.ObjectMeta{Namespace: "some", Name: "cluster"}},
65-
vSphereCluster: &vmwarev1.VSphereCluster{Spec: vmwarev1.VSphereClusterSpec{Placement: vmwarev1.VSphereClusterPlacement{WorkerAntiAffinity: vmwarev1.VSphereClusterWorkerAntiAffinity{
65+
vSphereCluster: &vmwarev1.VSphereCluster{Spec: vmwarev1.VSphereClusterSpec{Placement: &vmwarev1.VSphereClusterPlacement{WorkerAntiAffinity: &vmwarev1.VSphereClusterWorkerAntiAffinity{
6666
Mode: vmwarev1.VSphereClusterWorkerAntiAffinityModeNone,
6767
}}}},
6868
wantErr: false,
@@ -72,7 +72,7 @@ func TestRPService_ReconcileResourcePolicy(t *testing.T) {
7272
{
7373
name: "create VirtualMachinesetResourcePolicy for control-plane and workers on Cluster mode (WorkerAntiAffinity: false)",
7474
cluster: &clusterv1.Cluster{ObjectMeta: metav1.ObjectMeta{Namespace: "some", Name: "cluster"}},
75-
vSphereCluster: &vmwarev1.VSphereCluster{Spec: vmwarev1.VSphereClusterSpec{Placement: vmwarev1.VSphereClusterPlacement{WorkerAntiAffinity: vmwarev1.VSphereClusterWorkerAntiAffinity{
75+
vSphereCluster: &vmwarev1.VSphereCluster{Spec: vmwarev1.VSphereClusterSpec{Placement: &vmwarev1.VSphereClusterPlacement{WorkerAntiAffinity: &vmwarev1.VSphereClusterWorkerAntiAffinity{
7676
Mode: vmwarev1.VSphereClusterWorkerAntiAffinityModeCluster,
7777
}}}},
7878
wantErr: false,
@@ -82,7 +82,7 @@ func TestRPService_ReconcileResourcePolicy(t *testing.T) {
8282
{
8383
name: "create VirtualMachinesetResourcePolicy for control-plane and workers on Cluster mode (WorkerAntiAffinity: true)",
8484
cluster: &clusterv1.Cluster{ObjectMeta: metav1.ObjectMeta{Namespace: "some", Name: "cluster"}},
85-
vSphereCluster: &vmwarev1.VSphereCluster{Spec: vmwarev1.VSphereClusterSpec{Placement: vmwarev1.VSphereClusterPlacement{WorkerAntiAffinity: vmwarev1.VSphereClusterWorkerAntiAffinity{
85+
vSphereCluster: &vmwarev1.VSphereCluster{Spec: vmwarev1.VSphereClusterSpec{Placement: &vmwarev1.VSphereClusterPlacement{WorkerAntiAffinity: &vmwarev1.VSphereClusterWorkerAntiAffinity{
8686
Mode: vmwarev1.VSphereClusterWorkerAntiAffinityModeCluster,
8787
}}}},
8888
wantErr: false,
@@ -92,7 +92,7 @@ func TestRPService_ReconcileResourcePolicy(t *testing.T) {
9292
{
9393
name: "create VirtualMachinesetResourcePolicy for control-plane only when no MachineDeployments exist on MachineDeployment mode (WorkerAntiAffinity: true)",
9494
cluster: &clusterv1.Cluster{ObjectMeta: metav1.ObjectMeta{Namespace: "some", Name: "cluster"}},
95-
vSphereCluster: &vmwarev1.VSphereCluster{Spec: vmwarev1.VSphereClusterSpec{Placement: vmwarev1.VSphereClusterPlacement{WorkerAntiAffinity: vmwarev1.VSphereClusterWorkerAntiAffinity{
95+
vSphereCluster: &vmwarev1.VSphereCluster{Spec: vmwarev1.VSphereClusterSpec{Placement: &vmwarev1.VSphereClusterPlacement{WorkerAntiAffinity: &vmwarev1.VSphereClusterWorkerAntiAffinity{
9696
Mode: vmwarev1.VSphereClusterWorkerAntiAffinityModeMachineDeployment,
9797
}}}},
9898
wantErr: false,
@@ -102,7 +102,7 @@ func TestRPService_ReconcileResourcePolicy(t *testing.T) {
102102
{
103103
name: "create VirtualMachinesetResourcePolicy for control-plane and workers on MachineDeployment mode (WorkerAntiAffinity: true)",
104104
cluster: &clusterv1.Cluster{ObjectMeta: metav1.ObjectMeta{Namespace: "some", Name: "cluster"}},
105-
vSphereCluster: &vmwarev1.VSphereCluster{Spec: vmwarev1.VSphereClusterSpec{Placement: vmwarev1.VSphereClusterPlacement{WorkerAntiAffinity: vmwarev1.VSphereClusterWorkerAntiAffinity{
105+
vSphereCluster: &vmwarev1.VSphereCluster{Spec: vmwarev1.VSphereClusterSpec{Placement: &vmwarev1.VSphereClusterPlacement{WorkerAntiAffinity: &vmwarev1.VSphereClusterWorkerAntiAffinity{
106106
Mode: vmwarev1.VSphereClusterWorkerAntiAffinityModeMachineDeployment,
107107
}}}},
108108
additionalObjs: []client.Object{
@@ -117,7 +117,7 @@ func TestRPService_ReconcileResourcePolicy(t *testing.T) {
117117
{
118118
name: "update VirtualMachinesetResourcePolicy for control-plane only on None mode and preserve used cluster modules from VirtualMachine's (WorkerAntiAffinity: true)",
119119
cluster: &clusterv1.Cluster{ObjectMeta: metav1.ObjectMeta{Namespace: "some", Name: "cluster"}},
120-
vSphereCluster: &vmwarev1.VSphereCluster{Spec: vmwarev1.VSphereClusterSpec{Placement: vmwarev1.VSphereClusterPlacement{WorkerAntiAffinity: vmwarev1.VSphereClusterWorkerAntiAffinity{
120+
vSphereCluster: &vmwarev1.VSphereCluster{Spec: vmwarev1.VSphereClusterSpec{Placement: &vmwarev1.VSphereClusterPlacement{WorkerAntiAffinity: &vmwarev1.VSphereClusterWorkerAntiAffinity{
121121
Mode: vmwarev1.VSphereClusterWorkerAntiAffinityModeNone,
122122
}}}},
123123
additionalObjs: []client.Object{

pkg/services/vmoperator/vmopmachine.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,7 @@ func addResourcePolicyAnnotations(ctx context.Context, ctrlClient client.Client,
555555
var clusterModuleGroupName string
556556
// Set ClusterModuleGroupName depending on the configured mode from VSphereCluster.Spec.Placement.WorkerAntiAffinity.Mode
557557
// and the WorkerAntiAffinity feature-gate
558-
switch supervisorMachineCtx.VSphereCluster.Spec.Placement.WorkerAntiAffinity.Mode {
558+
switch mode := getWorkerAntiAffinityMode(supervisorMachineCtx.VSphereCluster); mode {
559559
case vmwarev1.VSphereClusterWorkerAntiAffinityModeNone:
560560
// Nothing to set.
561561
case vmwarev1.VSphereClusterWorkerAntiAffinityModeCluster:
@@ -577,6 +577,8 @@ func addResourcePolicyAnnotations(ctx context.Context, ctrlClient client.Client,
577577
if ok {
578578
return errors.Errorf("failed to set ClusterModuleGroup because of missing label %s on Machine", clusterv1.MachineDeploymentNameLabel)
579579
}
580+
default:
581+
return errors.Errorf("unknown mode %q configured for WorkerAntiAffinity", mode)
580582
}
581583

582584
if err := checkClusterModuleGroup(ctx, ctrlClient, supervisorMachineCtx.Cluster, clusterModuleGroupName); err != nil {

0 commit comments

Comments
 (0)