@@ -187,6 +187,8 @@ func (c *Client) ExportVirtualMachine(vm *migration.VirtualMachineImport) (err e
187
187
i .Path = vm .Name + "-" + vm .Namespace + "-" + i .Path
188
188
}
189
189
190
+ busType := detectBusType (i .DeviceId )
191
+
190
192
logrus .WithFields (logrus.Fields {
191
193
"name" : vm .Name ,
192
194
"namespace" : vm .Namespace ,
@@ -195,6 +197,7 @@ func (c *Client) ExportVirtualMachine(vm *migration.VirtualMachineImport) (err e
195
197
"spec.sourceCluster.kind" : vm .Spec .SourceCluster .Kind ,
196
198
"deviceId" : i .DeviceId ,
197
199
"path" : i .Path ,
200
+ "busType" : busType ,
198
201
"size" : i .Size ,
199
202
}).Info ("Downloading an image" )
200
203
@@ -206,7 +209,7 @@ func (c *Client) ExportVirtualMachine(vm *migration.VirtualMachineImport) (err e
206
209
vm .Status .DiskImportStatus = append (vm .Status .DiskImportStatus , migration.DiskInfo {
207
210
Name : i .Path ,
208
211
DiskSize : i .Size ,
209
- BusType : adapterType ( i . DeviceId ) ,
212
+ BusType : busType ,
210
213
})
211
214
} else {
212
215
logrus .WithFields (logrus.Fields {
@@ -501,14 +504,33 @@ func mapNetworkCards(networkCards []networkInfo, mapping []migration.NetworkMapp
501
504
return retNetwork
502
505
}
503
506
504
- // adapterType tries to identify the disk bus type from vmware
505
- // to attempt and set correct bus types in kubevirt
506
- // default is to switch to SATA to ensure device boots
507
- func adapterType (deviceID string ) kubevirt.DiskBus {
508
- if strings .Contains (deviceID , "SCSI" ) {
507
+ // detectBusType tries to identify the disk bus type from VMware to attempt and
508
+ // set correct bus types in kubevirt.
509
+ // Examples:
510
+ // .-----------------------------------------------.
511
+ // | Bus | Device ID |
512
+ // |------|----------------------------------------|
513
+ // | SCSI | /vm-13010/ParaVirtualSCSIController0:0 |
514
+ // | SATA | /vm-13767/VirtualAHCIController0:1 |
515
+ // | IDE | /vm-5678/VirtualIDEController1:0 |
516
+ // | NVMe | /vm-2468/VirtualNVMEController0:0 |
517
+ // | USB | /vm-54321/VirtualUSBController0:0 |
518
+ // '-----------------------------------------------'
519
+ func detectBusType (deviceID string ) kubevirt.DiskBus {
520
+ deviceID = strings .ToLower (deviceID )
521
+ // https://kubevirt.io/api-reference/v1.1.0/definitions.html#_v1_disktarget
522
+ switch {
523
+ case strings .Contains (deviceID , "scsi" ):
509
524
return kubevirt .DiskBusSCSI
525
+ case strings .Contains (deviceID , "ahci" ), strings .Contains (deviceID , "sata" ), strings .Contains (deviceID , "ide" ):
526
+ return kubevirt .DiskBusSATA
527
+ case strings .Contains (deviceID , "nvme" ):
528
+ return kubevirt .DiskBusVirtio
529
+ case strings .Contains (deviceID , "usb" ):
530
+ return kubevirt .DiskBusUSB
531
+ default :
532
+ return kubevirt .DiskBusVirtio
510
533
}
511
- return kubevirt .DiskBusSATA
512
534
}
513
535
514
536
// SanitizeVirtualMachineImport is used to sanitize the VirtualMachineImport object.
0 commit comments