Skip to content

Commit

Permalink
Do not delete pod affinity in patchAffinity
Browse files Browse the repository at this point in the history
Signed-off-by: futuretea <Hang.Yu@suse.com>
  • Loading branch information
futuretea authored and guangbochen committed Jun 2, 2023
1 parent f9254bf commit 5557c69
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 5 deletions.
9 changes: 5 additions & 4 deletions pkg/webhook/resources/virtualmachine/mutator.go
Original file line number Diff line number Diff line change
Expand Up @@ -262,18 +262,19 @@ func (m *vmMutator) patchAffinity(vm *kubevirtv1.VirtualMachine, patchOps types.
}

affinity := makeAffinityFromVMTemplate(vm.Spec.Template)
nodeSelector := affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution
requiredNodeSelector := affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution
preferredNodeSelector := affinity.NodeAffinity.PreferredDuringSchedulingIgnoredDuringExecution

newVMNetworks := vm.Spec.Template.Spec.Networks
logrus.Debugf("newNetworks: %+v", newVMNetworks)

if err := m.addNodeSelectorTerms(vm.Namespace, nodeSelector, newVMNetworks); err != nil {
if err := m.addNodeSelectorTerms(vm.Namespace, requiredNodeSelector, newVMNetworks); err != nil {
return patchOps, err
}

// The .spec.affinity could not be like `{nodeAffinity:requireDuringSchedulingIgnoreDuringExecution:[]}` if there is not any rules.
if len(nodeSelector.NodeSelectorTerms) == 0 {
return append(patchOps, fmt.Sprintf(`{"op":"replace","path":"/spec/template/spec/affinity","value":{}}`)), nil
if len(requiredNodeSelector.NodeSelectorTerms) == 0 && len(preferredNodeSelector) == 0 {
affinity.NodeAffinity = nil
}

bytes, err := json.Marshal(affinity)
Expand Down
40 changes: 39 additions & 1 deletion pkg/webhook/resources/virtualmachine/mutator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,32 @@ func TestPatchAffinity(t *testing.T) {
},
},
}

vm6 := &kubevirtv1.VirtualMachine{
Spec: kubevirtv1.VirtualMachineSpec{
Template: &kubevirtv1.VirtualMachineInstanceTemplateSpec{
ObjectMeta: metav1.ObjectMeta{},
Spec: kubevirtv1.VirtualMachineInstanceSpec{
Affinity: &v1.Affinity{
PodAffinity: &v1.PodAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: []v1.PodAffinityTerm{
{
TopologyKey: "topology.kubernetes.io/zone",
},
},
},
},
Networks: []kubevirtv1.Network{
{
Name: "default",
NetworkSource: kubevirtv1.NetworkSource{
Pod: &kubevirtv1.PodNetwork{},
},
},
},
},
},
},
}
net1 := &cniv1.NetworkAttachmentDefinition{
ObjectMeta: metav1.ObjectMeta{
Name: "net1",
Expand Down Expand Up @@ -461,6 +486,19 @@ func TestPatchAffinity(t *testing.T) {
},
},
},
{
name: "keep pod affinity",
vm: vm6,
affinity: &v1.Affinity{
PodAffinity: &v1.PodAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: []v1.PodAffinityTerm{
{
TopologyKey: "topology.kubernetes.io/zone",
},
},
},
},
},
}

type patch struct {
Expand Down

0 comments on commit 5557c69

Please sign in to comment.