[virt-tools-list] Libosinfo + GObject
Arjun Roy
arroy at redhat.com
Thu May 27 18:44:03 UTC 2010
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
________________________________________________________________________________
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