[Libguestfs] [PATCH nbdkit] plugins: python: Add imageio plugin example

Eric Blake eblake at redhat.com
Sat Aug 8 17:34:38 UTC 2020


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?

Also, I suspect you want s/enigne/engine/; s/eamples/examples/

> +#      --engine-url https://my.engine \
> +#      --username admin at 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.


> +
> +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?

> +
> +
> +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




More information about the Libguestfs mailing list