diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/defaulter/defaulters_suite_test.go b/images/virtualization-artifact/pkg/controller/vm/internal/defaulter/defaulters_suite_test.go index 35c9398e98..ec397d8b02 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/defaulter/defaulters_suite_test.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/defaulter/defaulters_suite_test.go @@ -97,7 +97,7 @@ var _ = Describe("Set default class in virtualMachineClasName", func() { }) Context("creating VM with empty virtualMachineClassName", func() { - It("should keep virtualMachineClassName empty if no default class", func() { + It("should return a clear error if no default class", func() { // Initialize fake client with some classes. name := "single-custom-class" setup( @@ -107,7 +107,7 @@ var _ = Describe("Set default class in virtualMachineClasName", func() { vm := newVMWithEmptyClass("vm-with-empty-class") err := classDefaulter.Default(ctx, vm) - Expect(err).Should(BeNil()) + Expect(err).Should(MatchError(ContainSubstring("spec.virtualMachineClassName is empty and no default VirtualMachineClass is configured"))) Expect(vm.Spec.VirtualMachineClassName).Should(BeEmpty()) }) diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/defaulter/virtual_machine_class_name.go b/images/virtualization-artifact/pkg/controller/vm/internal/defaulter/virtual_machine_class_name.go index 834afb6f5f..ff826aed23 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/defaulter/virtual_machine_class_name.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/defaulter/virtual_machine_class_name.go @@ -22,6 +22,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" + "github.com/deckhouse/virtualization-controller/pkg/common/annotations" "github.com/deckhouse/virtualization-controller/pkg/controller/service" "github.com/deckhouse/virtualization/api/core/v1alpha2" ) @@ -56,10 +57,8 @@ func (v *VirtualMachineClassNameDefaulter) Default(ctx context.Context, vm *v1al return err } - // "No default class" is not a mutating error, validators will complain - // about missing field during validation phase later. if defaultClass == nil { - return nil + return fmt.Errorf("spec.virtualMachineClassName is empty and no default VirtualMachineClass is configured; set spec.virtualMachineClassName explicitly or mark one VirtualMachineClass as default with the %q annotation set to %q", annotations.AnnVirtualMachineClassDefault, "true") } vm.Spec.VirtualMachineClassName = defaultClass.GetName()