On Tue, Apr 12, 2016 at 06:46:31PM +0300, Roman Kagan wrote:
(match guestcaps.gcaps_block_bus with - | Virtio_blk -> "VirtIO" | IDE -> "IDE"); + | Virtio_blk -> "VirtIO" + | Virtio_SCSI -> "SCSI"
I believe this should be "VirtIO_SCSI", although it's difficult to get a straight answer from the massive and convoluted Java sources of ovirt-engine ...
@@ -1148,14 +1149,15 @@ let rec convert ~keep_serial_console (g : G.guestfs) inspect source rcaps = List.iter (fun path -> ignore (g#aug_rm path)) (List.rev paths_to_delete);
- g#aug_set (path ^ "/modulename") "virtio_blk" + g#aug_set (path ^ "/modulename") + (string_of_block_type block_type)
Here ...
) else ( (* We have to add a scsi_hostadapter. *) let modpath = discover_modpath () in g#aug_set (sprintf "/files%s/alias[last()+1]" modpath) "scsi_hostadapter"; g#aug_set (sprintf "/files%s/alias[last()]/modulename" modpath) - "virtio_blk" + (string_of_block_type block_type) )
... and here don't seem right. Firstly, string_of_block_type returns "virtio-blk" (not "virtio_blk"). Maybe for this configuration file it doesn't matter. But, the real problem is that string_of_block_type is essentially an internal debugging function. What we should really have is a new function (eg. "linux_module_of_block_type") which converts the block type to a Linux module name.
+ (* Presence of virtio-scsi controller. *) + let has_virtio_scsi = + let obj = Xml.xpath_eval_expression xpathctx + "/domain/devices/controller[@model='virtio-scsi']" in
I guess this short cut is OK. A true test would involve checking the <target bus="scsi"> on each disk and matching it back to the controller. In other words, a huge pain! Maybe you can add an "XXX" comment in the source about this.
+ (Xml.xpathobj_nr_nodes obj) > 0 in ^ ^ You don't need these parentheses. In functional languages, function application always binds tightest of all, eg:
f x + 1 is the same as: (f x) + 1
diff --git a/v2v/output_glance.ml b/v2v/output_glance.ml index 9487f0b..2572de6 100644 --- a/v2v/output_glance.ml +++ b/v2v/output_glance.ml @@ -86,6 +86,7 @@ object "hw_disk_bus", (match guestcaps.gcaps_block_bus with | Virtio_blk -> "virtio" + | Virtio_SCSI -> "scsi" | IDE -> "ide"); "hw_vif_model", (match guestcaps.gcaps_net_bus with
This is wrong, or at least, incomplete. Apparently you need: hw_disk_bus=scsi (as above) hw_scsi_model=virtio-scsi (additional property) See: http://www.sebastien-han.fr/blog/2015/02/02/openstack-and-ceph-rbd-discard/
if not (copy_drivers g inspect driverdir) then ( match rcaps with - | { rcaps_block_bus = Some Virtio_blk } + | { rcaps_block_bus = (Some Virtio_blk | Some Virtio_SCSI) }
I don't think you need parens there. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-builder quickly builds VMs from scratch http://libguestfs.org/virt-builder.1.html