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 object(s). Regards, Daniel -- |: 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 :| _______________________________________________ virt-tools-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/virt-tools-list
