@@ -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
@@ -141,7 +141,19 @@ func (c *Controller) handleAddOrUpdateVMIMigration(key string) error {
141141 }
142142 }
143143
144- portName := ovs .PodNameToPortName (vmiMigration .Spec .VMIName , vmiMigration .Namespace , util .OvnProvider )
144+ lsps , err := c .OVNNbClient .ListNormalLogicalSwitchPorts (c .config .EnableExternalVpc , map [string ]string {"pod" : fmt .Sprintf ("%s/%s" , vmi .Namespace , vmi .Name )})
145+ if err != nil {
146+ klog .Errorf ("failed to list logical switch ports for vmi %s/%s, %v" , vmi .Namespace , vmi .Name , err )
147+ return err
148+ }
149+
150+ portNames := make ([]string , 0 , len (lsps ))
151+ for _ , lsp := range lsps {
152+ portNames = append (portNames , lsp .Name )
153+ }
154+
155+ klog .Infof ("collected port names of vmi %s, port names are %v" , vmi .Name , strings .Join (portNames , ", " ))
156+
145157 switch vmiMigration .Status .Phase {
146158 case kubevirtv1 .MigrationScheduling :
147159 selector , err := metav1 .LabelSelectorAsSelector (& metav1.LabelSelector {
@@ -180,30 +192,36 @@ func (c *Controller) handleAddOrUpdateVMIMigration(key string) error {
180192 klog .Infof ("VM pod %s/%s is migrating from %s to %s (migration job UID: %s)" ,
181193 targetPod .Namespace , targetPod .Name , sourceNode , targetPod .Spec .NodeName , vmiMigration .UID )
182194
183- if err := c .OVNNbClient .SetLogicalSwitchPortMigrateOptions (portName , sourceNode , targetPod .Spec .NodeName ); err != nil {
184- err = fmt .Errorf ("failed to set migrate options for VM pod lsp %s: %w" , portName , err )
185- klog .Error (err )
186- return err
195+ for _ , portName := range portNames {
196+ if err := c .OVNNbClient .SetLogicalSwitchPortMigrateOptions (portName , sourceNode , targetPod .Spec .NodeName ); err != nil {
197+ err = fmt .Errorf ("failed to set migrate options for VM pod lsp %s: %w" , portName , err )
198+ klog .Error (err )
199+ return err
200+ }
201+ klog .Infof ("successfully set migrate options for lsp %s from %s to %s" , portName , sourceNode , targetPod .Spec .NodeName )
187202 }
188- klog .Infof ("successfully set migrate options for lsp %s from %s to %s" , portName , sourceNode , targetPod .Spec .NodeName )
189203 } else {
190204 klog .Warningf ("target pod not yet created for migration job UID %s in phase %s, waiting for pod creation" ,
191205 vmiMigration .UID , vmiMigration .Status .Phase )
192206 return nil
193207 }
194208 case kubevirtv1 .MigrationSucceeded :
195- klog .Infof ("migrate end reset options for lsp %s from %s to %s, migrated succeed" , portName , srcNodeName , targetNodeName )
196- if err := c .OVNNbClient .ResetLogicalSwitchPortMigrateOptions (portName , srcNodeName , targetNodeName , false ); err != nil {
197- err = fmt .Errorf ("failed to clean migrate options for lsp %s, %w" , portName , err )
198- klog .Error (err )
199- return err
209+ for _ , portName := range portNames {
210+ klog .Infof ("migrate end reset options for lsp %s from %s to %s, migrated succeed" , portName , srcNodeName , targetNodeName )
211+ if err := c .OVNNbClient .ResetLogicalSwitchPortMigrateOptions (portName , srcNodeName , targetNodeName , false ); err != nil {
212+ err = fmt .Errorf ("failed to clean migrate options for lsp %s, %w" , portName , err )
213+ klog .Error (err )
214+ return err
215+ }
200216 }
201217 case kubevirtv1 .MigrationFailed :
202- klog .Infof ("migrate end reset options for lsp %s from %s to %s, migrated fail" , portName , srcNodeName , targetNodeName )
203- if err := c .OVNNbClient .ResetLogicalSwitchPortMigrateOptions (portName , srcNodeName , targetNodeName , true ); err != nil {
204- err = fmt .Errorf ("failed to clean migrate options for lsp %s, %w" , portName , err )
205- klog .Error (err )
206- return err
218+ for _ , portName := range portNames {
219+ klog .Infof ("migrate end reset options for lsp %s from %s to %s, migrated fail" , portName , srcNodeName , targetNodeName )
220+ if err := c .OVNNbClient .ResetLogicalSwitchPortMigrateOptions (portName , srcNodeName , targetNodeName , true ); err != nil {
221+ err = fmt .Errorf ("failed to clean migrate options for lsp %s, %w" , portName , err )
222+ klog .Error (err )
223+ return err
224+ }
207225 }
208226 }
209227 return nil
0 commit comments