@@ -278,6 +278,9 @@ func (h *MigratingHandler) getVMOPCandidate(ctx context.Context, s state.Virtual
278278}
279279
280280func (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
345348func 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+ }
0 commit comments