[virt-tools-list] Libosinfo + GObject

Cole Robinson crobinso at redhat.com
Tue Jun 15 14:57:18 UTC 2010


On 05/27/2010 02:44 PM, Arjun Roy wrote:
> Proposed GObject based libosinfo API.
> 
> See also:
> 
> https://www.redhat.com/archives/virt-tools-list/2010-February/msg00000.html
> https://www.redhat.com/archives/virt-tools-list/2010-February/msg00013.html
> 
> Quick summary:
> 1. A few main object types, one abstract, the rest usable by interface users
> 2. Each object has a collection of public methods that are listed below and
>    are the only interface with the library.
> 3. Each method listed below is grouped with the object for which the functionality
>    makes the most sense.
> 
> Current Status:
> 1. All objects except lists and filters are specified fully, though a couple of
>    methods need to be filled in.
> 2. Remaining tasks include implementing lists and filters, and filling in some
>    methods on the other objects.
> 
> Request:
> 
> 1. If possible, go over the API real quick if you have the time, and see if
> anything else needs to be changed.
> 
> 2. Observe the email at
> https://www.redhat.com/archives/virt-tools-list/2009-October/msg00162.html
> that specifies the data format, and verify that it matches the desired
> functionality. (I'm pretty certain that it does).
> 
> 
> -Arjun
> 

Thanks for this. As far as I can tell it looks good, we should be able
to replace current functionality with this. I'd be interested in seeing
the generated python bindings, since hopefully they should look a lot
more intuitive (2 params for nearly every function would disappear, self
and err).

>From there it's just a matter of building out the osdict, and wiring up
existing apps like virtinst and cobbler.

Thanks,
Cole

> ________________________________________________________________________________
> 
> Main objects
> 
> OsinfoDb : Main interface to libosinfo
> OsinfoEntity : Base class for all objects tracked by libosinfo
> OsinfoDevice : descends from OsinfoEntity
> OsinfoHypervisor : descends from OsinfoEntity
> OsinfoOs : descends from OsinfoEntity
> OsinfoFilter : used for list filtering
> OsinfoOsList, OsinfoDeviceList, OsinfoHypervisorList : Lists of objects
> 
> _________________________________________________
> OsinfoEntity: Implemented as a GObject
> Properties:
> ID
> Backpointer to OsinfoDb object
> 
> gchar *osinfoGetId(OsinfoEntity *self, GError **err);
> GPtrArray *osinfoGetParams(OsinfoEntity *self, GError **err);
> gchar *osinfoGetParamValue(OsinfoEntity *self, gchar *key, GError **err);
> GPtrArray *osinfoGetParamAllValues(OsinfoEntity *self, gchar *key, GError **err);
> 
> _________________________________________________
> 
> OsinfoDb: Main interface to libosinfo
> 
> // Get handle to single object by ID
> OsinfoHypervisor *osinfoGetHypervisorById(OsinfoDb *self, gchar *hvId, GError **err);
> OsinfoDevice *osinfoGetDeviceById(OsinfoDb *self, gchar *devId, GError **err);
> OsinfoOs *osinfoGetOsById(OsinfoDb *self, gchar *osId, GError **err);
> 
> // Get list of devices, can supply initial filter
> OsinfoOsList *osinfoGetOsList(OsinfoDb *self, OsinfoFilter *filter, GError **err);
> OsinfoHypervisorList *osinfoGetHypervisorList(OsinfoDb *self, OsinfoFilter *filter, GError **err);
> OsinfoDeviceList *osinfoGetDeviceList(OsinfoDb *self, OsinfoFilter *filter, GError **err);
> 
> // Get me all unique values for property "vendor" among operating systems
> GPtrArray *osinfoUniqueValuesForPropertyInOs(OsinfoDb *self, gchar *propName, GError **err);
> 
> // Get me all unique values for property "vendor" among hypervisors
> GPtrArray *osinfoUniqueValuesForPropertyInHv(OsinfoDb *self, gchar *propName, GError **err);
> 
> // Get me all unique values for property "vendor" among devices
> GPtrArray *osinfoUniqueValuesForPropertyInDev(OsinfoDb *self, gchar *propName, GError **err);
> 
> // Get me all OSes that 'upgrade' another OS (or whatever relationship is specified)
> OsinfoOsList *osinfoUniqueValuesForOsRelationship(OsinfoDb *self, osinfoRelation relshp, GError **err);
> 
> _________________________________________________
> 
> Hypervisor: All methods in OsinfoEntity, plus
> 
> // Return a list of all device types handled by hypervisor on some OS
> GPtrArray *osinfoGetHypervisorDeviceTypes(OsinfoHypervisor *self, GError **err);
> 
> // Get all devices of type. Note these are not OS specific, all we know is that the hypervisor
> // supports the device on some OS
> OsinfoDeviceList *osinfoGetHypervisorDevicesByType(OsinfoHypervisor *self, gchar *devType, OsinfoFilter *filter, GError **err);
> 
> _________________________________________________
> 
> Devices: All methods in OsinfoEntity, plus
> 
> // Get device driver for OS and HV combination. If HV is null, assume we want
> // driver used by OS when running on bare metal. Note we specify devType in case
> // we have a franken-device which does more than one task (eg. a video card that
> // can also handle...networking, I guess?)
> gchar *osinfoGetDeviceDriver(OsinfoDevice *self, gchar *devType, OsinfoOs *os, OsinfoHypervisor *hv, GError **err);
> 
> _________________________________________________
> 
> Operating Systems: All methods in OsinfoEntity, plus
> 
> // Get me the OS that 'clones' this one, for example
> OsinfoOs *osinfoGetRelatedOs(OsinfoOs *self, osinfoRelation relshp, GError **err);
> 
> // Get me the best audio device for this OS on this hypervisor that isn't made by Realtek
> OsinfoDevice *osinfoGetPreferredDeviceForOs(OsinfoOs *self, OsinfoHypervisor *hv, gchar *devType, OsinfoFilter *filter, GError **err);
> 
> // Get me all audio devices for this OS on this hypervisor that isn't made by Realtek, sorted by how 'preferable' they are
> OsinfoDeviceList *osinfoGetDevicesForOs(OsinfoOs *self, OsinfoHypervisor *hv, gchar *devType, OsinfoFilter *filter, GError **err);
> 
> _________________________________________________
> 
> All lists will have the following methods:
> 
> ie. Analogous methods for OsList, HypervisorList
> 
> void osinfoFreeDeviceList(OsinfoDeviceList *self);
> gint osinfoDeviceListLength(OsinfoDeviceList *self);
> OsinfoDevice *osinfoGetDeviceAtIndex(OsinfoDeviceList *self, gint idx);
> OsinfoDeviceList *osinfoDeviceListIntersect(OsinfoDeviceList *self, OsinfoDeviceList *otherList, GError **err);
> OsinfoDeviceList *osinfoDeviceListUnion(OsinfoDeviceList *self, OsinfoDeviceList *otherList, GError **err);
> OsinfoDeviceList *osinfoDeviceListFilter(OsinfoDeviceList *self, OsinfoFilter *filter, GError **err);
> 
> _________________________________________________
> 
> Filter:
> 
> OsinfoFilter *osinfoGetFilter(OsinfoDb *db, GError **err);
> OsinfoFilter *osinfoFreeFilter(OsinfoFilter *self);
> 
> gboolean osinfoAddFilterContstraint(OsinfoFilter *self, gchar *propName, gchar *propVal);
> 
> // Only applicable to OSes, ignored by other types of objects
> gboolean osinfoAddRelationConstraint(OsinfoFilter *self, osinfoRelationship relshp, OsinfoOs *os);
> 
> gboolean osinfoClearFilterConstraint(OsinfoFilter *self, gchar *propName);
> gboolean osinfoClearRelationshipConstraint(OsinfoFilter *self, osinfoRelationship relshp);
> gboolean osinfoClearAllFilterConstraints(OsinfoFilter *self);
> 
> GPtrArray *osinfoGetFilterConstraintKeys(OsinfoFilter *self, GError **err);
> gchar *osinfoGetFilterConstraintValue(OsinfoFilter *self, GError **err);
> OsinfoOs *osinfoGetRelationshipConstraintValue(OsinfoFilter *self, osinfoRelationship relshp, GError **err);





More information about the virt-tools-list mailing list