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
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.
Libguestfs mailing list