From 717c3c24afbffffd9b971d9fdf368ce39a097d4e Mon Sep 17 00:00:00 2001 From: Valeriy Khorunzhin Date: Thu, 9 Apr 2026 17:13:01 +0300 Subject: [PATCH 1/3] fix with vmop restore Signed-off-by: Valeriy Khorunzhin --- .../pkg/controller/service/restorer/secret_restorer.go | 4 ++++ .../pkg/controller/service/restorer/snapshot_resources.go | 8 +++++++- .../pkg/controller/vmsnapshot/internal/life_cycle.go | 4 ++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/images/virtualization-artifact/pkg/controller/service/restorer/secret_restorer.go b/images/virtualization-artifact/pkg/controller/service/restorer/secret_restorer.go index 98f0c3944f..41acb4ec66 100644 --- a/images/virtualization-artifact/pkg/controller/service/restorer/secret_restorer.go +++ b/images/virtualization-artifact/pkg/controller/service/restorer/secret_restorer.go @@ -180,6 +180,10 @@ func (r SecretRestorer) setVirtualMachineBlockDeviceAttachments(ctx context.Cont } func (r SecretRestorer) setVirtualMachineIPAddress(ctx context.Context, secret *corev1.Secret, vm *v1alpha2.VirtualMachine, keepIPAddress v1alpha2.KeepIPAddress) error { + if vm.Status.VirtualMachineIPAddress == "" { + return nil + } + vmip, err := object.FetchObject(ctx, types.NamespacedName{ Namespace: vm.Namespace, Name: vm.Status.VirtualMachineIPAddress, diff --git a/images/virtualization-artifact/pkg/controller/service/restorer/snapshot_resources.go b/images/virtualization-artifact/pkg/controller/service/restorer/snapshot_resources.go index 178da7f102..ab1cc24165 100644 --- a/images/virtualization-artifact/pkg/controller/service/restorer/snapshot_resources.go +++ b/images/virtualization-artifact/pkg/controller/service/restorer/snapshot_resources.go @@ -129,13 +129,19 @@ func (r *SnapshotResources) Prepare(ctx context.Context) error { macAddressNamesByAddress[vmmac.Status.Address] = vmmac.Name } + hasMainNetwork := len(vm.Spec.Networks) > 0 && vm.Spec.Networks[0].Type == v1alpha2.NetworksTypeMain + for i := range vm.Spec.Networks { ns := &vm.Spec.Networks[i] if ns.Type == v1alpha2.NetworksTypeMain { continue } - ns.VirtualMachineMACAddressName = macAddressNamesByAddress[macAddressOrder[i-1]] + delta := 0 + if hasMainNetwork { + delta = 1 + } + ns.VirtualMachineMACAddressName = macAddressNamesByAddress[macAddressOrder[i-delta]] } } else { for i := range vm.Spec.Networks { diff --git a/images/virtualization-artifact/pkg/controller/vmsnapshot/internal/life_cycle.go b/images/virtualization-artifact/pkg/controller/vmsnapshot/internal/life_cycle.go index 87d7dfe763..78f1ec1e06 100644 --- a/images/virtualization-artifact/pkg/controller/vmsnapshot/internal/life_cycle.go +++ b/images/virtualization-artifact/pkg/controller/vmsnapshot/internal/life_cycle.go @@ -767,7 +767,7 @@ func (h LifeCycleHandler) fillStatusResources(ctx context.Context, vmSnapshot *v Name: vm.Name, }) - if vmSnapshot.Spec.KeepIPAddress == v1alpha2.KeepIPAddressAlways { + if vmSnapshot.Spec.KeepIPAddress == v1alpha2.KeepIPAddressAlways && vm.Status.VirtualMachineIPAddress != "" { vmip, err := object.FetchObject(ctx, types.NamespacedName{ Namespace: vm.Namespace, Name: vm.Status.VirtualMachineIPAddress, @@ -787,7 +787,7 @@ func (h LifeCycleHandler) fillStatusResources(ctx context.Context, vmSnapshot *v }) } - if len(vm.Spec.Networks) > 1 { + if len(vm.Spec.Networks) > 0 { for _, ns := range vm.Status.Networks { if ns.Type == v1alpha2.NetworksTypeMain { continue From 007b844cd8f619ab7e667ac735568c31fb30a2e8 Mon Sep 17 00:00:00 2001 From: Valeriy Khorunzhin Date: Thu, 9 Apr 2026 17:34:25 +0300 Subject: [PATCH 2/3] vmrestore fix Signed-off-by: Valeriy Khorunzhin --- .../pkg/controller/vmrestore/internal/life_cycle.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/images/virtualization-artifact/pkg/controller/vmrestore/internal/life_cycle.go b/images/virtualization-artifact/pkg/controller/vmrestore/internal/life_cycle.go index dec2a44155..54e86eed28 100644 --- a/images/virtualization-artifact/pkg/controller/vmrestore/internal/life_cycle.go +++ b/images/virtualization-artifact/pkg/controller/vmrestore/internal/life_cycle.go @@ -180,13 +180,18 @@ func (h LifeCycleHandler) Handle(ctx context.Context, vmRestore *v1alpha2.Virtua macAddressNamesByAddress[vmmac.Status.Address] = vmmac.Name } + hasMainNetwork := len(vm.Spec.Networks) > 0 && vm.Spec.Networks[0].Type == v1alpha2.NetworksTypeMain for i := range vm.Spec.Networks { ns := &vm.Spec.Networks[i] if ns.Type == v1alpha2.NetworksTypeMain { continue } - ns.VirtualMachineMACAddressName = macAddressNamesByAddress[macAddressOrder[i-1]] + delta := 0 + if hasMainNetwork { + delta = 1 + } + ns.VirtualMachineMACAddressName = macAddressNamesByAddress[macAddressOrder[i-delta]] } } From d6cf08f66a6d3996b4273ab7254b408f0a655c10 Mon Sep 17 00:00:00 2001 From: Valeriy Khorunzhin Date: Fri, 10 Apr 2026 17:41:22 +0300 Subject: [PATCH 3/3] refactoring Signed-off-by: Valeriy Khorunzhin --- .../pkg/controller/service/restorer/secret_restorer.go | 8 +++++--- .../pkg/controller/service/restorer/snapshot_resources.go | 8 +------- .../pkg/controller/vmrestore/internal/life_cycle.go | 7 +------ 3 files changed, 7 insertions(+), 16 deletions(-) diff --git a/images/virtualization-artifact/pkg/controller/service/restorer/secret_restorer.go b/images/virtualization-artifact/pkg/controller/service/restorer/secret_restorer.go index 41acb4ec66..889b9e091e 100644 --- a/images/virtualization-artifact/pkg/controller/service/restorer/secret_restorer.go +++ b/images/virtualization-artifact/pkg/controller/service/restorer/secret_restorer.go @@ -121,10 +121,12 @@ func (r SecretRestorer) RestoreMACAddressOrder(_ context.Context, secret *corev1 var macAddressOrder []string for _, ns := range vm.Status.Networks { - if ns.Type == v1alpha2.NetworksTypeMain { - continue + switch ns.Type { + case v1alpha2.NetworksTypeMain: + macAddressOrder = append(macAddressOrder, "") + default: + macAddressOrder = append(macAddressOrder, ns.MAC) } - macAddressOrder = append(macAddressOrder, ns.MAC) } return macAddressOrder, nil } diff --git a/images/virtualization-artifact/pkg/controller/service/restorer/snapshot_resources.go b/images/virtualization-artifact/pkg/controller/service/restorer/snapshot_resources.go index ab1cc24165..42f00b2789 100644 --- a/images/virtualization-artifact/pkg/controller/service/restorer/snapshot_resources.go +++ b/images/virtualization-artifact/pkg/controller/service/restorer/snapshot_resources.go @@ -129,19 +129,13 @@ func (r *SnapshotResources) Prepare(ctx context.Context) error { macAddressNamesByAddress[vmmac.Status.Address] = vmmac.Name } - hasMainNetwork := len(vm.Spec.Networks) > 0 && vm.Spec.Networks[0].Type == v1alpha2.NetworksTypeMain - for i := range vm.Spec.Networks { ns := &vm.Spec.Networks[i] if ns.Type == v1alpha2.NetworksTypeMain { continue } - delta := 0 - if hasMainNetwork { - delta = 1 - } - ns.VirtualMachineMACAddressName = macAddressNamesByAddress[macAddressOrder[i-delta]] + ns.VirtualMachineMACAddressName = macAddressNamesByAddress[macAddressOrder[i]] } } else { for i := range vm.Spec.Networks { diff --git a/images/virtualization-artifact/pkg/controller/vmrestore/internal/life_cycle.go b/images/virtualization-artifact/pkg/controller/vmrestore/internal/life_cycle.go index 54e86eed28..75aa9e77ae 100644 --- a/images/virtualization-artifact/pkg/controller/vmrestore/internal/life_cycle.go +++ b/images/virtualization-artifact/pkg/controller/vmrestore/internal/life_cycle.go @@ -180,18 +180,13 @@ func (h LifeCycleHandler) Handle(ctx context.Context, vmRestore *v1alpha2.Virtua macAddressNamesByAddress[vmmac.Status.Address] = vmmac.Name } - hasMainNetwork := len(vm.Spec.Networks) > 0 && vm.Spec.Networks[0].Type == v1alpha2.NetworksTypeMain for i := range vm.Spec.Networks { ns := &vm.Spec.Networks[i] if ns.Type == v1alpha2.NetworksTypeMain { continue } - delta := 0 - if hasMainNetwork { - delta = 1 - } - ns.VirtualMachineMACAddressName = macAddressNamesByAddress[macAddressOrder[i-delta]] + ns.VirtualMachineMACAddressName = macAddressNamesByAddress[macAddressOrder[i]] } }