Skip to content

Commit 9d4330e

Browse files
authored
Set Kubevirt live-migrations multi-chassis options for all VM nics (#6241)
* feat: Set multi-chassis options for all VM nics Signed-off-by: Jules Skrill <julesskrill@gmail.com> * fix: Use set to collect port names Signed-off-by: Jules Skrill <julesskrill@gmail.com> * fix: Simplify logic to discovery all lsp ports Signed-off-by: Jules Skrill <julesskrill@gmail.com> --------- Signed-off-by: Jules Skrill <julesskrill@gmail.com>
1 parent 98a3b1e commit 9d4330e

File tree

1 file changed

+35
-17
lines changed

1 file changed

+35
-17
lines changed

pkg/controller/kubevirt.go

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package controller
33
import (
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

Comments
 (0)