On Sat, Aug 8, 2020 at 8:34 PM Eric Blake <eblake(a)redhat.com> wrote:
On 8/6/20 5:54 PM, Nir Soffer wrote:
> This is mainly for testing the new parallel python threading model, but
> it also an example how to manage multiple connection from a plugin.
>
> I tested this with local imageio server, serving qcow2 image on local
> SSD.
>
> diff --git a/plugins/python/examples/imageio.py
b/plugins/python/examples/imageio.py
> new file mode 100644
> index 00000000..e77fd2f4
> --- /dev/null
> +++ b/plugins/python/examples/imageio.py
> @@ -0,0 +1,167 @@
> +# Example Python plugin.
> +#
> +# This example can be freely used for any purpose.
> +#
> +# Upload and download images to oVirt with nbdkit and qemu-img.
> +#
> +# Install ovirt-imageio-client
> +#
> +# dnf copr enable nsoffer/ovirt-imageio-preview
> +# dnf install ovirt-imageio-client
Even after running these steps,...
> +#
> +# To upload or download images, you need to start an image transfer. The
> +# easiest way is using oVirt image_transfer.py example:
> +#
> +# /usr/share/doc/python3-ovirt-enigne-sdk4/eamples/image_transfer.py \
...I do not have a /usr/share/doc/python3-ovirt-* directory at all.
Where am I supposed to get it from?
I forgot to mention that you need also python3-ovirt-engine-sdk4.
But if you want to try this you also need oVirt installation, requiring at least
2 vms, one for engine, one for the host.
I think it would be better to replace this with the instructions of using
a standalone imageio server, like I used in the commit message.
Also, I suspect you want s/enigne/engine/; s/eamples/examples/
> +# --engine-url
https://my.engine \
> +# --username admin@internal \
> +# --password-file password \
> +# --cafile my.engine.pem \
> +# upload disk-uuid
> +#
> +# This will print the trasnfer URL for this image transfer.
s/trasnfer/transfer/
> +#
> +# Run this example from the build directory:
> +#
> +# ./nbdkit -t4 -f -v -U /tmp/nbd.sock -t4 python \
-t4 does not need to be listed twice.
> +# ./plugins/python/examples/imageio.py \
> +# transfer_url=https://server:54322/images/ticket-id \
> +# connections=4 \
> +# secure=no
> +#
> +# Note that number of nbdkit threads and imageio connections should match.
> +#
> +# To upload an image run:
> +#
> +# qemu-img convert -f qcow2 -O raw disk.img nbd:///?socket=tmp/nbd.sock
URIs containing ? should be shell-quoted (in the unlikely case that
someone has an 'nbd:' subdirectory that could interfere with shell
globbing).
> +#
> +# Downloading image is not efficient with this version, since we don't report
> +# extents yet.
I'll push the obvious typo fixes.
Thanks!
> +
> +def boolify(key, value):
> + v = value.lower()
> + if v in ("yes", "true", "1"):
> + return True
> + if v in ("no", "false", 0):
> + return False
> + raise RuntimeError("Invalid boolean value for {}: {!r}".format(key,
value))
nbdkit_parse_bool also handles 'on/off'. Should we make that function
more easily available to python plugins, so you aren't having to
reimplement it yourself?
Yes, it makes sense that all plugins can use a similar interface.
> +def config_complete():
> + """
> + Called when configuration completed.
missing 'is'
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization:
qemu.org |
libvirt.org