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