d94cedf57f
Corresponding blueprint: https://blueprints.launchpad.net/glance/+spec/metadata-multivalue-operators-support Change-Id: Ia51fad2b317bb71f64a743946e65b66f11bfddb8
227 lines
6.0 KiB
ReStructuredText
227 lines
6.0 KiB
ReStructuredText
..
|
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
|
License.
|
|
|
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
|
|
|
====================================================
|
|
Support for multivalue operators in metadata catalog
|
|
====================================================
|
|
https://blueprints.launchpad.net/glance/+spec/metadata-multivalue-operators-support
|
|
|
|
The metadata catalog provides data that user can pin to resources,
|
|
e.g., flavors extra specs. These are used by scheduler to choose a host that
|
|
satisfies the requirements provided in extra specs. Nova scheduler implements
|
|
operators to combine multiple values under one key in extra specs: ``<or>``
|
|
and ``<all-in>``. Unfortunately, the catalog does not provide which operator
|
|
is suitable for a given property.
|
|
|
|
This blueprint aims at this problem by extending current jsons with suitable
|
|
operators for each property.
|
|
|
|
|
|
Problem description
|
|
===================
|
|
There is work being done in Horizon to provide support for multiple values
|
|
for a single key in extra specs, however, Glance currently does not provide
|
|
information about which operators are suitable for a given property.
|
|
In ``compute-host-capabilities.json`` there is a property called
|
|
``cpu_info:features``. Both operators - ``<all-in>`` and ``<or>`` can be used
|
|
for this property. There are also properties like ``cpu_info:model``
|
|
where ``<or>`` is the only operator that should work.
|
|
|
|
|
|
Proposed change
|
|
===============
|
|
To make end-user (e.g. Horizon) aware which operator can be used for a given
|
|
property, this blueprint extends existing properties (and also properties
|
|
inside objects) with a new section under key - "operators":
|
|
|
|
Currently an example property would be structured like this::
|
|
|
|
"cpu_info:features": {
|
|
"title": "Features",
|
|
"description": "Specifies CPU flags/features.",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"aes",
|
|
"vme",
|
|
"de"
|
|
]
|
|
}
|
|
}
|
|
|
|
And after extension::
|
|
|
|
"cpu_info:features": {
|
|
"title": "Features",
|
|
"description": "Specifies CPU flags/features.",
|
|
"operators": [
|
|
"<or>",
|
|
"<all-in>"
|
|
],
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"aes",
|
|
"vme",
|
|
"de"
|
|
]
|
|
}
|
|
}
|
|
|
|
The added section is::
|
|
|
|
"operators": [
|
|
"<or>",
|
|
"<all-in>"
|
|
]
|
|
|
|
This section will be optional, e.g., property that is integer does
|
|
not need operator.
|
|
|
|
Also glance will not do any check on "operators" field. API consumer
|
|
needs to take care to provide valid operators for nova scheduler. Currently
|
|
there are three operators that are valid for nova scheduler and are usable
|
|
with metadata definitions: ``<or>``, ``<in>`` and ``<all-in>``
|
|
|
|
Alternatives
|
|
------------
|
|
None
|
|
|
|
Data model impact
|
|
-----------------
|
|
This will not impact data model, because "operators" will be part
|
|
of the blob stored in the ``json_schema`` column in the database table.
|
|
|
|
REST API impact
|
|
---------------
|
|
Example extended GET object body::
|
|
|
|
{
|
|
"objects": [
|
|
{
|
|
"name": "object1",
|
|
"namespace": "my-namespace",
|
|
"description": "my-description",
|
|
"properties": {
|
|
"prop1": {
|
|
"title": "My Property",
|
|
"description": "More info here",
|
|
"operators": ["<all-in>"],
|
|
"type": "string",
|
|
"readonly": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"first": "/v2/metadefs/objects?limit=1",
|
|
"next": "/v2/metadefs/objects?marker=object1&limit=1",
|
|
"schema": "/v2/schema/metadefs/objects"
|
|
}
|
|
|
|
Example POST/PUT body on objects::
|
|
|
|
{
|
|
"name": "StorageQOS",
|
|
"description": "Our available storage QOS.",
|
|
"required": [
|
|
"MyProperty"
|
|
],
|
|
"properties": {
|
|
"MyProperty": {
|
|
"type": "string",
|
|
"readonly": false,
|
|
"description": "The My Property",
|
|
"operators": ["<or>"],
|
|
"enum": ["type1", "type2"]
|
|
}
|
|
}
|
|
}
|
|
|
|
Because "operators" field is optional API consumer needs to handle default
|
|
value as it may be missing.
|
|
|
|
Security impact
|
|
---------------
|
|
None
|
|
|
|
Notifications impact
|
|
--------------------
|
|
None
|
|
|
|
Other end user impact
|
|
---------------------
|
|
None
|
|
|
|
Performance Impact
|
|
------------------
|
|
None
|
|
|
|
Other deployer impact
|
|
---------------------
|
|
Upgrade of jsons or database in existing OpenStack installation will not
|
|
be needed. "operators" section will not be mandatory so the installation
|
|
can keep running without upgrade.
|
|
|
|
Also there is possibility that property/object will be missing operators even
|
|
when the value has been added in the latest built-in metadata definition json
|
|
templates, the upgrade process does not update existing database. Deployer
|
|
needs to manually upgrade metadata definitions to the newest set.
|
|
|
|
Developer impact
|
|
----------------
|
|
None
|
|
|
|
|
|
Implementation
|
|
==============
|
|
|
|
Assignee(s)
|
|
-----------
|
|
Primary assignee:
|
|
pawel-koniszewski
|
|
|
|
Other contributors:
|
|
None
|
|
|
|
Reviewers
|
|
---------
|
|
Core reviewer(s):
|
|
lzy-dev
|
|
|
|
Work Items
|
|
----------
|
|
* Extend existing metadata jsons with operators section.
|
|
* Extend API json schema with new option
|
|
|
|
|
|
Dependencies
|
|
============
|
|
Horizon blueprint that depends on this blueprint:
|
|
https://blueprints.launchpad.net/horizon/+spec/metadata-widget-multivalue-selection
|
|
|
|
Nova blueprint that this blueprint depends on:
|
|
https://blueprints.launchpad.net/nova/+spec/add-all-in-list-operator-to-extra-spec-ops
|
|
|
|
|
|
Testing
|
|
=======
|
|
Current unit tests and functional tests will be extended to make sure
|
|
that the new section is returned and that it is correct. Tests will also
|
|
ensure that the operators part is optional.
|
|
|
|
|
|
Documentation Impact
|
|
====================
|
|
The new attribute needs to be documented.
|
|
|
|
|
|
References
|
|
==========
|
|
None
|
|
|