[Libvir] RFC: get/set properties

Ryan Scott Ryan.Scott at Sun.COM
Tue Apr 15 21:23:53 UTC 2008

Daniel P. Berrange wrote:
> On Tue, Apr 15, 2008 at 11:31:32AM -0700, Ryan Scott wrote:
>>   I'd like to get some comments on the following...
>>   We would like to use libvirt to store some properties related to a 
>> domain.  This can be done by adding a simple get/set API as follows:
> What are the properties ?  I'm not really very enthusiastic about the
> idea of adding API / XML for generic key,value properties. I think it
> will quickly be abused as a way to add arbitrary, non-standardized 
> hypervisor / driver specific configuration which would be better 
> represented with explicit schema.

One thing we have in mind is driver/software version numbers.  For 
example, the control tools may change the domain configuration based on 
whether a certain driver has the support for a new feature.  If we 
create the domain's xml with the driver information, we can make this 
decision quickly, on the fly, in dom0.

While this information is related to domain configuration, it's not 
hypervisor-specific, so I'm not sure where else we would put it in the 
domain's XML description.

This gives the control tools someplace to store that information, rather 
than having to create some separate storage for each domain.

>> /*
>>  * Domain property get/set interfaces
>>  *
>>  * For GetProp, the return value must be freed by the caller.
>>  */
>> char *          virDomainGetProp    (virDomainPtr domain,
>>                         const char *propName);
>> int         virDomainSetProp    (virDomainPtr domain,
>>                         const char *propName,
>>                         const char *value);
>>   The XML would look something like this:
>> virsh # dumpxml solaris-pv-0
>> <domain type='xen' id='-1'>
>> [ snip ]
>>   <properties>
>>     <blah value="3"/>
>>     <foo value="bar"/>
>>   </properties>
>> </domain>
> One of the key ideas behind libvirt is that we try to provide a consistent
> set of configuration options across all drivers. NB, I'm not saying we need
> the lowest-common denominator - just that we try to formalize a way to
> represent every configuration option in such a away that it could be applied
> to any driver.  I don't think simple  key,value pairs are sufficient in the
> general case. 

This wasn't meant to be a generic solution to handle storage of all 
domain information.  For your example below, if someone wants more 
information on the console, the API should be extended to allow that.

However, extending the API to every piece of information for a domain 
seems to be overkill.  That's why we just want a simple name/value pair.


> As an example, you could define a property 'console' which takes a pty path
> as its value. But  if you want to generalize this to different types of
> console access, then a single value becomes insufficient.eg need a host+port
> for a console accessed over TCP. The more explicit specialized <console>
> tag allows us the flexibility of adding attributes and sub-elements as 
> needed, not restricting ourselves to key,value pairs.
> Dan,

More information about the libvir-list mailing list