[virt-tools-list] libosinfo - implemented.

Daniel P. Berrange berrange at redhat.com
Thu Feb 4 15:20:12 UTC 2010

On Wed, Jan 27, 2010 at 10:54:07PM -0500, Arjun Roy wrote:
> Hi all,
> Back in October I posted some thoughts on a library for dealing with OS metadata
> used by the various virt applications.
> As a refresher, here it is:
> https://www.redhat.com/archives/virt-tools-list/2009-October/msg00091.html
> After a few emails back and forth, I revised the proposed API to :
> https://www.redhat.com/archives/virt-tools-list/2009-October/msg00162.html
> I have no implemented the API, mostly as described in the second email, and have
> it hosted at the following location:
> https://fedorahosted.org/libosinfo
> I feel that with a little integration work, this would be very useful for any of
> the virt management applications in use, and would like to hear any comments on
> the implementation.

I've looked at the way the API works in a little more detail and I think
the way filters / hypervisors interoperate could be improved. In particular
I don't like the way you have to call 'osi_set_lib_hypervisor' to filter
the list of OS devices against a hypervisor, because this is modifying the
global state, preventing you easily dealing with multiple HVs. This may
not be required for the provisioning scenario, but in other usage cases I
think this would be a limitation.

I think to address this, the way filters & device lists are handled should
be changed. In psuedo code I'd think something like

Get the initial objets

 - hv = osi_hv_lookup(id)
 - os = osi_os_lookup(id)

Get the list of Hv devics

 - hvdevs = osi_hv_get_devices(hv)

Get the list of OS devices

 - osdevs = osi_os_get_devices(os)

Get a new list that shows the intersection of the first two

 - supporteddevs = osi_device_list_intersect(hvdevs, osdevs)

Create a filter for some kind of desired property set

 - filter = osi_new_filter()
 - osi_filter_add_constraint(filter, foo, bar)
 - osi_filter_add_constraint(filter, foo, bar)
 - osi_filter_add_constraint(filter, foo, bar)

Get a new device list that has the filter applied

 - wanteddevs = osi_device_list_filter(supporteddevs, filter)

The key idea here is that each object is *immutable*. Thus when 
you're applying filters you are in fact creating new objects to 
represent the result, not ever modifying the state of the existing 

|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

More information about the virt-tools-list mailing list