[openstack-dev] [nova] os-capabilities library created
Jay Pipes
jaypipes at gmail.com
Fri Aug 12 13:20:12 UTC 2016
On 08/12/2016 04:05 AM, Daniel P. Berrange wrote:
> On Wed, Aug 03, 2016 at 07:47:37PM -0400, Jay Pipes wrote:
>> Hi Novas and anyone interested in how to represent capabilities in a
>> consistent fashion.
>>
>> I spent an hour creating a new os-capabilities Python library this evening:
>>
>> http://github.com/jaypipes/os-capabilities
>>
>> Please see the README for examples of how the library works and how I'm
>> thinking of structuring these capability strings and symbols. I intend
>> os-capabilities to be the place where the OpenStack community catalogs and
>> collates standardized features for hardware, devices, networks, storage,
>> hypervisors, etc.
>>
>> Let me know what you think about the structure of the library and whether
>> you would be interested in owning additions to the library of constants in
>> your area of expertise.
>
> How are you expecting that these constants are used ? It seems unlikely
> the, say nova code, code is going to be explicitly accessing any of the
> individual CPU flag constants.
These capability strings are what deployers will associate with a flavor
in Nova and they will be passed in the request to the placement API in
either a "requirements" or a "preferences" list. In order to ensure that
two OpenStack clouds refer to various capabilities (not just CPU flags,
see below), we need a curated list of these standardized constants.
> It should surely just be entirely metatadata
> driven - eg libvirt driver would just parse libvirt capabilities XML and
> extract all the CPU flag strings & simply export them.
You are just thinking in terms of (lib)virt/compute capabilities.
os-capabilities intends to provide a standard set of capability
constants for more than virt/compute, including storage, network devices
and more.
But, yes, I imagine discovery code running on a compute node with the
*libvirt* virt driver could indeed simply query the libvirt capabilities
XML snippet and translate those capability codes into os-capabilities
constants. Remember, VMWare and Hyper-V also need to do this discovery
and translation to a standardized set of constants. So does
ironic-inspector when it queries an IPMI interface of course.
> It would be very
> undesirable to have to add new code to os-capabilities every time that
> Intel/AMD create new CPU flags for new features, and force users to upgrade
> openstack to be able to express requirements on those CPU flags.
I don't see how we would be able to expose a particular new CPU flag
*across disparate OpenStack clouds* unless we have some standardized set
of constants that has been curated. Not all OpenStack clouds run
libvirt. And again, think bigger than just virt/compute.
Best,
-jay
>> Next steps for the library include:
>>
>> * Bringing in other top-level namespaces like disk: or net: and working with
>> contributors to fill in the capability strings and symbols.
>> * Adding constraints functionality to the library. For instance, building in
>> information to the os-capabilities interface that would allow a set of
>> capabilities to be cross-checked for set violations. As an example, a
>> resource provider having DISK_GB inventory cannot have *both* the disk:ssd
>> *and* the disk:hdd capability strings associated with it -- clearly the disk
>> storage is either SSD or spinning disk.
>
> Regards,
> Daniel
>
More information about the OpenStack-dev
mailing list