From: "Daniel P. Berrange" <berrange@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@gmail.com>
Cc: QEMU <qemu-devel@nongnu.org>,
"Markus Armbruster" <armbru@redhat.com>,
"Max Reitz" <mreitz@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH v6 4/7] qom: support arbitrary non-scalar properties with -object
Date: Wed, 29 Jun 2016 13:20:20 +0100 [thread overview]
Message-ID: <20160629122020.GK4221@redhat.com> (raw)
In-Reply-To: <CAJ+F1C+dp0m=BNJiQshkh4sx=0L8NRjKHBsG-=NzzTddeQQm=g@mail.gmail.com>
On Tue, Jun 28, 2016 at 06:09:08PM +0200, Marc-André Lureau wrote:
> Hi
>
> On Tue, Jun 14, 2016 at 6:07 PM, Daniel P. Berrange <berrange@redhat.com> wrote:
> > The current -object command line syntax only allows for
> > creation of objects with scalar properties, or a list
> > with a fixed scalar element type. Objects which have
> > properties that are represented as structs in the QAPI
> > schema cannot be created using -object.
> >
> > This is a design limitation of the way the OptsVisitor
> > is written. It simply iterates over the QemuOpts values
> > as a flat list. The support for lists is enabled by
> > allowing the same key to be repeated in the opts string.
> >
> > It is not practical to extend the OptsVisitor to support
> > more complex data structures while also maintaining
> > the existing list handling behaviour that is relied upon
> > by other areas of QEMU.
> >
> > Fortunately there is no existing object that implements
> > the UserCreatable interface that relies on the list
> > handling behaviour, so it is possible to swap out the
> > OptsVisitor for a different visitor implementation, so
> > -object supports non-scalar properties, thus leaving
> > other users of OptsVisitor unaffected.
> >
> > The previously added qdict_crumple() method is able to
> > take a qdict containing a flat set of properties and
> > turn that into a arbitrarily nested set of dicts and
> > lists. By combining qemu_opts_to_qdict and qdict_crumple()
> > together, we can turn the opt string into a data structure
> > that is practically identical to that passed over QMP
> > when defining an object. The only difference is that all
> > the scalar values are represented as strings, rather than
> > strings, ints and bools. This is sufficient to let us
> > replace the OptsVisitor with the QMPInputVisitor for
> > use with -object.
> >
> > Thus -object can now support non-scalar properties,
> > for example the QMP object
> >
> > {
> > "execute": "object-add",
> > "arguments": {
> > "qom-type": "demo",
> > "id": "demo0",
> > "parameters": {
> > "foo": [
> > { "bar": "one", "wizz": "1" },
> > { "bar": "two", "wizz": "2" }
> > ]
> > }
> > }
> > }
> >
> > Would be creatable via the CLI now using
> >
> > $QEMU \
> > -object demo,id=demo0,\
> > foo.0.bar=one,foo.0.wizz=1,\
> > foo.1.bar=two,foo.1.wizz=2
> >
> > Notice that this syntax is intentionally compatible
> > with that currently used by block drivers.
> >
> > This is also wired up to work for the 'object_add' command
> > in the HMP monitor with the same syntax.
> >
> > (hmp) object_add demo,id=demo0,\
> > foo.0.bar=one,foo.0.wizz=1,\
> > foo.1.bar=two,foo.1.wizz=2
> >
> > NB indentation should not be used with HMP commands, this
> > is just for convenient formatting in this commit message.
> >
> > Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
>
> The patch breaks parsing of size arguments:
>
> -object memory-backend-file,id=mem,size=512M,mem-path=/tmp: Parameter
> 'size' expects a number
>
>
> Looks like the previous patch needs type_size support
Yep, I've modified the previous patch to implement the type_size callback
on the QMP visitor and added a unit test case for this too.
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
next prev parent reply other threads:[~2016-06-29 12:20 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-14 16:07 [Qemu-devel] [PATCH v6 0/7] Provide a QOM-based authorization API Daniel P. Berrange
2016-06-14 16:07 ` [Qemu-devel] [PATCH v6 1/7] qdict: implement a qdict_crumple method for un-flattening a dict Daniel P. Berrange
2016-06-28 16:09 ` Marc-André Lureau
2016-06-14 16:07 ` [Qemu-devel] [PATCH v6 2/7] option: make parse_option_bool/number non-static Daniel P. Berrange
2016-06-28 16:09 ` Marc-André Lureau
2016-06-14 16:07 ` [Qemu-devel] [PATCH v6 3/7] qapi: add a QmpInputVisitor that does string conversion Daniel P. Berrange
2016-06-28 16:09 ` Marc-André Lureau
2016-06-14 16:07 ` [Qemu-devel] [PATCH v6 4/7] qom: support arbitrary non-scalar properties with -object Daniel P. Berrange
2016-06-28 16:09 ` Marc-André Lureau
2016-06-29 12:20 ` Daniel P. Berrange [this message]
2016-06-14 16:07 ` [Qemu-devel] [PATCH v6 5/7] util: add QAuthZ object as an authorization base class Daniel P. Berrange
2016-06-28 16:22 ` Marc-André Lureau
2016-06-29 11:37 ` Daniel P. Berrange
2016-06-14 16:07 ` [Qemu-devel] [PATCH v6 6/7] util: add QAuthZSimple object type for a simple access control list Daniel P. Berrange
2016-06-28 16:58 ` Marc-André Lureau
2016-06-14 16:07 ` [Qemu-devel] [PATCH v6 7/7] acl: delete existing ACL implementation Daniel P. Berrange
2016-06-27 15:33 ` [Qemu-devel] [PATCH v6 0/7] Provide a QOM-based authorization API Daniel P. Berrange
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160629122020.GK4221@redhat.com \
--to=berrange@redhat.com \
--cc=afaerber@suse.de \
--cc=armbru@redhat.com \
--cc=marcandre.lureau@gmail.com \
--cc=mreitz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.