From 1838a6b66d38a9be545a87b08bb6a637865a8dd0 Mon Sep 17 00:00:00 2001 From: Roman Sysoev Date: Fri, 19 Dec 2025 14:31:13 +0300 Subject: [PATCH] fix(vm): skip validation for VMs in terminating status To prevent reconciliation errors when the Virtualization Controller attempts to remove finalizers from VMs in the terminating status. Signed-off-by: Roman Sysoev --- .../controller/vm/internal/validators/affinity_validator.go | 3 +++ .../vm/internal/validators/block_device_limiter_validator.go | 3 +++ .../vm/internal/validators/block_device_refs_validator.go | 3 +++ .../controller/vm/internal/validators/cpu_count_validator.go | 3 +++ .../vm/internal/validators/first_block_device_validator.go | 4 ++++ .../pkg/controller/vm/internal/validators/ipam_validator.go | 4 ++++ .../pkg/controller/vm/internal/validators/meta_validator.go | 4 ++++ .../controller/vm/internal/validators/networks_validator.go | 4 ++++ .../vm/internal/validators/sizing_policy_validator.go | 3 +++ .../vm/internal/validators/topology_spread_validator.go | 3 +++ 10 files changed, 34 insertions(+) diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/validators/affinity_validator.go b/images/virtualization-artifact/pkg/controller/vm/internal/validators/affinity_validator.go index 4c9ad99a70..47c4f05507 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/validators/affinity_validator.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/validators/affinity_validator.go @@ -38,6 +38,9 @@ func (v *AffinityValidator) ValidateCreate(_ context.Context, vm *v1alpha2.Virtu } func (v *AffinityValidator) ValidateUpdate(_ context.Context, _, newVM *v1alpha2.VirtualMachine) (admission.Warnings, error) { + if newVM == nil || !newVM.GetDeletionTimestamp().IsZero() { + return nil, nil + } return v.Validate(newVM) } diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/validators/block_device_limiter_validator.go b/images/virtualization-artifact/pkg/controller/vm/internal/validators/block_device_limiter_validator.go index 895f37d825..251df62e25 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/validators/block_device_limiter_validator.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/validators/block_device_limiter_validator.go @@ -45,6 +45,9 @@ func (v *BlockDeviceLimiterValidator) ValidateCreate(ctx context.Context, vm *v1 } func (v *BlockDeviceLimiterValidator) ValidateUpdate(ctx context.Context, _, newVM *v1alpha2.VirtualMachine) (admission.Warnings, error) { + if newVM == nil || !newVM.GetDeletionTimestamp().IsZero() { + return nil, nil + } return v.validate(ctx, newVM) } diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/validators/block_device_refs_validator.go b/images/virtualization-artifact/pkg/controller/vm/internal/validators/block_device_refs_validator.go index f578aef5cc..0f8ccd2283 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/validators/block_device_refs_validator.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/validators/block_device_refs_validator.go @@ -64,6 +64,9 @@ func (v *BlockDeviceSpecRefsValidator) ValidateCreate(_ context.Context, vm *v1a } func (v *BlockDeviceSpecRefsValidator) ValidateUpdate(_ context.Context, _, newVM *v1alpha2.VirtualMachine) (admission.Warnings, error) { + if newVM == nil || !newVM.GetDeletionTimestamp().IsZero() { + return nil, nil + } return nil, v.validate(newVM) } diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/validators/cpu_count_validator.go b/images/virtualization-artifact/pkg/controller/vm/internal/validators/cpu_count_validator.go index a2949bbd93..2fcb8a6891 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/validators/cpu_count_validator.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/validators/cpu_count_validator.go @@ -36,6 +36,9 @@ func (v *CPUCountValidator) ValidateCreate(_ context.Context, vm *v1alpha2.Virtu } func (v *CPUCountValidator) ValidateUpdate(_ context.Context, _, newVM *v1alpha2.VirtualMachine) (admission.Warnings, error) { + if newVM == nil || !newVM.GetDeletionTimestamp().IsZero() { + return nil, nil + } return v.Validate(newVM) } diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/validators/first_block_device_validator.go b/images/virtualization-artifact/pkg/controller/vm/internal/validators/first_block_device_validator.go index 3407d4f154..1818c88560 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/validators/first_block_device_validator.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/validators/first_block_device_validator.go @@ -47,6 +47,10 @@ func (v *FirstBlockDeviceValidator) ValidateCreate(ctx context.Context, vm *v1al } func (v *FirstBlockDeviceValidator) ValidateUpdate(ctx context.Context, oldVM, newVM *v1alpha2.VirtualMachine) (admission.Warnings, error) { + if newVM == nil || !newVM.GetDeletionTimestamp().IsZero() { + return nil, nil + } + if reflect.DeepEqual(oldVM.Spec.BlockDeviceRefs, newVM.Spec.BlockDeviceRefs) { return nil, nil } diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/validators/ipam_validator.go b/images/virtualization-artifact/pkg/controller/vm/internal/validators/ipam_validator.go index 17996664e0..82f9c17baf 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/validators/ipam_validator.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/validators/ipam_validator.go @@ -62,6 +62,10 @@ func (v *IPAMValidator) ValidateCreate(ctx context.Context, vm *v1alpha2.Virtual } func (v *IPAMValidator) ValidateUpdate(ctx context.Context, oldVM, newVM *v1alpha2.VirtualMachine) (admission.Warnings, error) { + if newVM == nil || !newVM.GetDeletionTimestamp().IsZero() { + return nil, nil + } + if oldVM.Spec.VirtualMachineIPAddress == newVM.Spec.VirtualMachineIPAddress { return nil, nil } diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/validators/meta_validator.go b/images/virtualization-artifact/pkg/controller/vm/internal/validators/meta_validator.go index f51f27daff..ae1911fc82 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/validators/meta_validator.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/validators/meta_validator.go @@ -58,6 +58,10 @@ func (v *MetaValidator) ValidateCreate(_ context.Context, vm *v1alpha2.VirtualMa } func (v *MetaValidator) ValidateUpdate(_ context.Context, _, newVM *v1alpha2.VirtualMachine) (admission.Warnings, error) { + if newVM == nil || !newVM.GetDeletionTimestamp().IsZero() { + return nil, nil + } + for key := range newVM.Annotations { if strings.Contains(key, core.GroupName) { return nil, fmt.Errorf("using the %s group's name in the annotation is prohibited", core.GroupName) diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/validators/networks_validator.go b/images/virtualization-artifact/pkg/controller/vm/internal/validators/networks_validator.go index bf441ecda2..9001a25231 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/validators/networks_validator.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/validators/networks_validator.go @@ -52,6 +52,10 @@ func (v *NetworksValidator) ValidateCreate(_ context.Context, vm *v1alpha2.Virtu } func (v *NetworksValidator) ValidateUpdate(_ context.Context, oldVM, newVM *v1alpha2.VirtualMachine) (admission.Warnings, error) { + if newVM == nil || !newVM.GetDeletionTimestamp().IsZero() { + return nil, nil + } + newNetworksSpec := newVM.Spec.Networks if len(newNetworksSpec) == 0 { return nil, nil diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/validators/sizing_policy_validator.go b/images/virtualization-artifact/pkg/controller/vm/internal/validators/sizing_policy_validator.go index 47e5d37d63..dec5cd3c0a 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/validators/sizing_policy_validator.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/validators/sizing_policy_validator.go @@ -48,6 +48,9 @@ func (v *SizingPolicyValidator) ValidateCreate(ctx context.Context, vm *v1alpha2 } func (v *SizingPolicyValidator) ValidateUpdate(ctx context.Context, _, newVM *v1alpha2.VirtualMachine) (admission.Warnings, error) { + if newVM == nil || !newVM.GetDeletionTimestamp().IsZero() { + return nil, nil + } return v.validate(ctx, newVM) } diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/validators/topology_spread_validator.go b/images/virtualization-artifact/pkg/controller/vm/internal/validators/topology_spread_validator.go index 8b47632060..1319c8cb2c 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/validators/topology_spread_validator.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/validators/topology_spread_validator.go @@ -38,6 +38,9 @@ func (v *TopologySpreadConstraintValidator) ValidateCreate(_ context.Context, vm } func (v *TopologySpreadConstraintValidator) ValidateUpdate(_ context.Context, _, newVM *v1alpha2.VirtualMachine) (admission.Warnings, error) { + if newVM == nil || !newVM.GetDeletionTimestamp().IsZero() { + return nil, nil + } return v.Validate(newVM) }