diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/sync_kvvm.go b/images/virtualization-artifact/pkg/controller/vm/internal/sync_kvvm.go index 530551a938..495d9aaa5d 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/sync_kvvm.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/sync_kvvm.go @@ -717,7 +717,7 @@ func (h *SyncKvvmHandler) isVMUnschedulable( func (h *SyncKvvmHandler) isPlacementPolicyChanged(allChanges vmchange.SpecChanges) bool { for _, c := range allChanges.GetAll() { switch c.Path { - case "affinity", "nodeSelector", "tolerations": + case "affinity", "nodeSelector", "tolerations", "virtualMachineClassName", "VirtualMachineClass:spec.nodeSelector", "VirtualMachineClass:spec.tolerations": if !equality.Semantic.DeepEqual(c.CurrentValue, c.DesiredValue) { return true } diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/sync_kvvm_test.go b/images/virtualization-artifact/pkg/controller/vm/internal/sync_kvvm_test.go index 1ed545dfdc..6c96e15525 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/sync_kvvm_test.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/sync_kvvm_test.go @@ -34,6 +34,7 @@ import ( "github.com/deckhouse/virtualization-controller/pkg/controller/reconciler" vmservice "github.com/deckhouse/virtualization-controller/pkg/controller/vm/internal/service" "github.com/deckhouse/virtualization-controller/pkg/controller/vm/internal/state" + "github.com/deckhouse/virtualization-controller/pkg/controller/vmchange" "github.com/deckhouse/virtualization-controller/pkg/eventrecord" "github.com/deckhouse/virtualization/api/core/v1alpha2" "github.com/deckhouse/virtualization/api/core/v1alpha2/vmcondition" @@ -319,4 +320,19 @@ var _ = Describe("SyncKvvmHandler", func() { Entry("Pending phase with changes applied, condition should not exist", v1alpha2.MachinePending, false, metav1.ConditionUnknown, false), Entry("Pending phase with changes not applied, condition should not exist", v1alpha2.MachinePending, true, metav1.ConditionUnknown, false), ) + + DescribeTable("isPlacementPolicyChanged", + func(path string, expected bool) { + h := &SyncKvvmHandler{} + changes := vmchange.SpecChanges{} + changes.Add(vmchange.FieldChange{Path: path, CurrentValue: "old", DesiredValue: "new"}) + + Expect(h.isPlacementPolicyChanged(changes)).To(Equal(expected)) + }, + Entry("vm tolerations change", "tolerations", true), + Entry("vmclass tolerations change", "VirtualMachineClass:spec.tolerations", true), + Entry("vmclass nodeSelector change", "VirtualMachineClass:spec.nodeSelector", true), + Entry("vmclass name change", "virtualMachineClassName", true), + Entry("cpu change is not a placement policy", "cpu.cores", false), + ) })