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

Nir Soffer nsoffer at redhat.com
Sat Aug 8 19:47:08 UTC 2020


On Sat, Aug 8, 2020 at 8:34 PM Eric Blake <eblake at 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 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.

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
>




More information about the Libguestfs mailing list