
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@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org