@@ -3,6 +3,7 @@ package controller
33import (
44 "context"
55 "fmt"
6+ "strings"
67 "time"
78
89 k8serrors "k8s.io/apimachinery/pkg/api/errors"
@@ -13,7 +14,6 @@ import (
1314 kubevirtv1 "kubevirt.io/api/core/v1"
1415
1516 "github.com/kubeovn/kube-ovn/pkg/informer"
16- "github.com/kubeovn/kube-ovn/pkg/ovs"
1717 "github.com/kubeovn/kube-ovn/pkg/util"
1818)
1919
@@ -136,7 +136,19 @@ func (c *Controller) handleAddOrUpdateVMIMigration(key string) error {
136136 klog .Infof ("current vmiMigration %s status %s, vmi MigrationState is nil" , key , vmiMigration .Status .Phase )
137137 }
138138
139- portName := ovs .PodNameToPortName (vmiMigration .Spec .VMIName , vmiMigration .Namespace , util .OvnProvider )
139+ lsps , err := c .OVNNbClient .ListNormalLogicalSwitchPorts (c .config .EnableExternalVpc , map [string ]string {"pod" : fmt .Sprintf ("%s/%s" , vmi .Namespace , vmi .Name )})
140+ if err != nil {
141+ klog .Errorf ("failed to list logical switch ports for vmi %s/%s, %v" , vmi .Namespace , vmi .Name , err )
142+ return err
143+ }
144+
145+ portNames := make ([]string , 0 , len (lsps ))
146+ for _ , lsp := range lsps {
147+ portNames = append (portNames , lsp .Name )
148+ }
149+
150+ klog .Infof ("collected port names of vmi %s, port names are %v" , vmi .Name , strings .Join (portNames , ", " ))
151+
140152 switch vmiMigration .Status .Phase {
141153 case kubevirtv1 .MigrationScheduling :
142154 selector , err := metav1 .LabelSelectorAsSelector (& metav1.LabelSelector {
@@ -175,30 +187,36 @@ func (c *Controller) handleAddOrUpdateVMIMigration(key string) error {
175187 klog .Infof ("VM pod %s/%s is migrating from %s to %s (migration job UID: %s)" ,
176188 targetPod .Namespace , targetPod .Name , sourceNode , targetPod .Spec .NodeName , vmiMigration .UID )
177189
178- if err := c .OVNNbClient .SetLogicalSwitchPortMigrateOptions (portName , sourceNode , targetPod .Spec .NodeName ); err != nil {
179- err = fmt .Errorf ("failed to set migrate options for VM pod lsp %s: %w" , portName , err )
180- klog .Error (err )
181- return err
190+ for _ , portName := range portNames {
191+ if err := c .OVNNbClient .SetLogicalSwitchPortMigrateOptions (portName , sourceNode , targetPod .Spec .NodeName ); err != nil {
192+ err = fmt .Errorf ("failed to set migrate options for VM pod lsp %s: %w" , portName , err )
193+ klog .Error (err )
194+ return err
195+ }
196+ klog .Infof ("successfully set migrate options for lsp %s from %s to %s" , portName , sourceNode , targetPod .Spec .NodeName )
182197 }
183- klog .Infof ("successfully set migrate options for lsp %s from %s to %s" , portName , sourceNode , targetPod .Spec .NodeName )
184198 } else {
185199 klog .Warningf ("target pod not yet created for migration job UID %s in phase %s, waiting for pod creation" ,
186200 vmiMigration .UID , vmiMigration .Status .Phase )
187201 return nil
188202 }
189203 case kubevirtv1 .MigrationSucceeded :
190- klog .Infof ("migrate end reset options for lsp %s from %s to %s, migrated succeed" , portName , srcNodeName , targetNodeName )
191- if err := c .OVNNbClient .ResetLogicalSwitchPortMigrateOptions (portName , srcNodeName , targetNodeName , false ); err != nil {
192- err = fmt .Errorf ("failed to clean migrate options for lsp %s, %w" , portName , err )
193- klog .Error (err )
194- return err
204+ for _ , portName := range portNames {
205+ klog .Infof ("migrate end reset options for lsp %s from %s to %s, migrated succeed" , portName , srcNodeName , targetNodeName )
206+ if err := c .OVNNbClient .ResetLogicalSwitchPortMigrateOptions (portName , srcNodeName , targetNodeName , false ); err != nil {
207+ err = fmt .Errorf ("failed to clean migrate options for lsp %s, %w" , portName , err )
208+ klog .Error (err )
209+ return err
210+ }
195211 }
196212 case kubevirtv1 .MigrationFailed :
197- klog .Infof ("migrate end reset options for lsp %s from %s to %s, migrated fail" , portName , srcNodeName , targetNodeName )
198- if err := c .OVNNbClient .ResetLogicalSwitchPortMigrateOptions (portName , srcNodeName , targetNodeName , true ); err != nil {
199- err = fmt .Errorf ("failed to clean migrate options for lsp %s, %w" , portName , err )
200- klog .Error (err )
201- return err
213+ for _ , portName := range portNames {
214+ klog .Infof ("migrate end reset options for lsp %s from %s to %s, migrated fail" , portName , srcNodeName , targetNodeName )
215+ if err := c .OVNNbClient .ResetLogicalSwitchPortMigrateOptions (portName , srcNodeName , targetNodeName , true ); err != nil {
216+ err = fmt .Errorf ("failed to clean migrate options for lsp %s, %w" , portName , err )
217+ klog .Error (err )
218+ return err
219+ }
202220 }
203221 }
204222 return nil
0 commit comments