[Libvir] Semantics for ListDomains/ ListDefinedDomains

Daniel P. Berrange berrange at redhat.com
Wed Aug 23 20:22:08 UTC 2006

On Wed, Aug 23, 2006 at 02:21:03PM -0400, Daniel Veillard wrote:
> On Wed, Aug 23, 2006 at 07:16:45PM +0100, Daniel P. Berrange wrote:
> > So I was thinking a little about lifecycle support for passive domains in
> > libvirt and wanted to clarify the intended semantics of the two methods:
> > 
> >   virConnectListDomains
> >   virConnectListDefinedDomains
> > 
> > Am I correct in thinking that  virConnectListDefinedDomains will list a
> > domain if-and-only-if its state == 'shutoff', and that virConnectListDomains
> > will list a domain if-and-only-if its state != 'shutoff'
>  yes

Ok, that makes sense - although means there's a bug in test backend :-)

> > I realize this is a little hypothetical since XenD doesn't have lifecycle
> > management yet, but it matters to the test backend, and any potential
> > QEMU / UML backend, and the future XenD XML-RPC backend
>   I was tempted to do an implementation just local to the library instance
> in the case there is no support by the virtualization engine. If you think
> you will use it then I should really implement it :-)

Trouble is I think we really badly need an implementation that is 
persistent. Tools like the 'xeninst[1]' package are using libvirt for
creating domains, but at the same time manually writing out config
files into /etc/xen - this means they are loosing an important benefit
of libvirt - namely isolation from Xen instability/changes. 

Now it would be pretty easy for libvirt to convert the XML file passed
into virDefineDomain into a config file for xend & stuf it in /etc/xen
The hard part is the reverse - enumerating the config files in the
dir & turning them back into XML. I fear we may have to tackle that
hard part sooner rather than later so I've been trying to thing of
ways we could attack it. Now the key problem is that the xm config
files can contain/are in fact python code.

 * Write a tiny parser for a trivial subset - basically enough to
   handle the (key, string) pairs & (key, list of string) pairs.
   Certainly doable - depending on how general purpose we want to
   get - do we care about the 'if..else' conditional used in the
   sample /etc/xen/xmexample.vti config file ? We can certainly
   make a valid case saying we don't care about this because the
   libvirt XML -> xm config conversion would not generate config
   using that capability 

 * Fork an unprivileged helper python program to exec the config 
   file and re-write it as XML which can be read back in by libvirt

The former is more work, but makes me feel better from a security
point of view. The latter is more genreal purpose but a small slip
up could have big consequences.  My personal preference would be
the first option & say 'if...else' is unsupported for now

Not a perfect solution, but would satisfy a great deal of common
use cases pretty easily without being intrusive into existing code
base & pretty secure.


[1] see  '_get_xen_config'  method, line 140
|=- Red Hat, Engineering, Emerging Technologies, Boston.  +1 978 392 2496 -=|
|=-           Perl modules: http://search.cpan.org/~danberr/              -=|
|=-               Projects: http://freshmeat.net/~danielpb/               -=|
|=-  GnuPG: 7D3B9505   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505  -=| 

More information about the libvir-list mailing list