Skip to content

Commit 5f2dec0

Browse files
jskrilloilbeater
authored andcommitted
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 38965a6 commit 5f2dec0

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

@@ -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

Comments
 (0)