Skip to content

Commit 33d4e57

Browse files
refactor(vm): set non migratable usb if firmware out of date and usb devices exists
Signed-off-by: Yaroslav Borbat <yaroslav.borbat@flant.com>
1 parent faec755 commit 33d4e57

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

images/virtualization-artifact/pkg/controller/vm/internal/migrating.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,9 @@ func (h *MigratingHandler) getVMOPCandidate(ctx context.Context, s state.Virtual
278278
}
279279

280280
func (h *MigratingHandler) syncMigratable(ctx context.Context, s state.VirtualMachineState, vm *v1alpha2.VirtualMachine, kvvm *virtv1.VirtualMachine) error {
281+
if h.setUSBNonMigratable(vm) {
282+
return nil
283+
}
281284
cb := conditions.NewConditionBuilder(vmcondition.TypeMigratable).Generation(vm.GetGeneration())
282285

283286
if kvvm != nil {
@@ -345,3 +348,24 @@ func (h *MigratingHandler) syncMigratable(ctx context.Context, s state.VirtualMa
345348
func liveMigrationInProgress(migrationState *v1alpha2.VirtualMachineMigrationState) bool {
346349
return migrationState != nil && migrationState.StartTimestamp != nil && migrationState.EndTimestamp == nil
347350
}
351+
352+
// TODO: Delete me after 1.7 version
353+
func (h *MigratingHandler) setUSBNonMigratable(vm *v1alpha2.VirtualMachine) bool {
354+
cond, _ := conditions.GetCondition(vmcondition.TypeFirmwareUpToDate, vm.Status.Conditions)
355+
if cond.Status == metav1.ConditionTrue || cond.Reason != vmcondition.ReasonFirmwareOutOfDate.String() {
356+
return false
357+
}
358+
359+
usbExists := len(vm.Spec.USBDevices) > 0
360+
if !usbExists {
361+
return false
362+
}
363+
364+
cb := conditions.NewConditionBuilder(vmcondition.TypeMigratable).
365+
Generation(vm.GetGeneration()).
366+
Status(metav1.ConditionFalse).
367+
Reason(vmcondition.ReasonNonMigratable).
368+
Message("USB devices cannot be migratable on this virtualization version, firmware should be updated first. Please restart virtual machine or unplug usb devices and migrate.")
369+
conditions.SetCondition(cb, &vm.Status.Conditions)
370+
return true
371+
}

images/virtualization-artifact/pkg/controller/vm/vm_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ func SetupController(
8080
internal.NewSyncPowerStateHandler(client, recorder),
8181
internal.NewSyncMetadataHandler(client),
8282
internal.NewLifeCycleHandler(client, recorder),
83-
internal.NewMigratingHandler(migrateVolumesService),
8483
internal.NewFirmwareHandler(firmwareImage),
84+
internal.NewMigratingHandler(migrateVolumesService),
8585
internal.NewEvictHandler(),
8686
internal.NewStatisticHandler(client),
8787
}

0 commit comments

Comments
 (0)