On 05/05/2011 11:26 AM, Daniel P. Berrange wrote:
This is the bare minimum code required to allow libvirt to connect
to an externally launched QEMU instance, reverse engineering the
XML configuration from the command line args.
The biggest problem is that our ARGV-> XML convertor does not know
about the -device syntax people often now use.
Agreed. There's definitely some work to do here. At least the
<qemu:commandline> XML conversion is a nice backdoor so that we can at
least round trip native -> xml -> native in most simple cases.
There is also some robustness work to be done the QEMU driver in
general, to remove some assumptions that no longer hold true. For
example in our domain shutdown code, there are bits of cleanup
we should skip because we will not have done the corresponding
setup in the first place.
And I'd really like to make a couple of improvements at some point - the
native-to-xml currently expects a space-separated list of arguments for
"qemu-argv" mode, when it would be much easier if we introduced a
"qemu-argz" mode which took as the native string the name of a filename
containing NUL-terminated arguments (note that this is intentionally
like /proc/nnn/cmdline!). Furthermore, I want to make
virCommandToString be smarter about producing optional shell quoting, as
well as making qemu-argv mode smarter when the input is properly
shell-quoted, so that it becomes an unambiguous translation from xml to
native back to xml (right now, we can really throw off the conversion if
we have shell-quoted spaces in one of the arguments). But those can be
separate improvements on top of this base framework.
We also need to verify what happens with all the various APIs
particularly device hotplug, to ensure there are no bad results.
That said, even as it is, this functionality will be quite
useful for QEMU developers
It definitely falls in the category of provided but unsupported, much
like qemu raw monitor passthrough commands - we are making it easier for
debuggers. So this should belong to the qemu set of RPC calls rather
than the generic set; linked in through libvirt-qemu.la rather than the
normal libvirt.la (I haven't read the rest of the series to see if you
actually did this). But ACK on the idea!
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org