Previous versions:
v3:
https://www.redhat.com/archives/libguestfs/2018-March/msg00000.html
v2:
https://www.redhat.com/archives/libguestfs/2018-February/msg00177.html
v1:
https://www.redhat.com/archives/libguestfs/2018-February/msg00139.html
This completely rethinks the approach taken by the previous patches.
Instead of trying to involve qemu's curl driver, this uses a small
Python 3 nbdkit plugin to interface between qemu and the oVirt server.
The data path is:
qemu-img convert -------> nbdkit -------> oVirt imageio
nbd https
There are two Python scripts included. One is the nbdkit plugin. The
other creates the VM. As with the previous patches, these scripts get
embeded in virt-v2v at compile time, so effectively there is no API
contract between virt-v2v & the Python code.
With this patch series I am able to (mostly) successfully convert VMs
from local disk to oVirt 4.2, with full end-to-end streaming. There
is some room for optimization -- in particular uploads are currently
rather slow because we rely on qemu-img batching small requests into
large ones which it doesn't do well, and instead the nbdkit plugin
could batch small writes into larger ones. Also I noticed (but only
one time) that very long transfers would cause the oVirt ticket to
expire, even though we were writing the whole time.
There are still a few unresolved issues (see patch 3/3) so this is not
quite ready to go upstream yet, but can still be reviewed. Patches 1
& 2 are the same as posted before.
I did not yet test qcow2 uploads. Those are "interestingly" different
because qcow2 will require us to read from the remote oVirt server as
well as just stream/write to it. The pread method for that is written
but has not been tested.
Rich.