New flavor for baremetal servers
This spec proposes a new flavor for both general nodes and Valence nodes. Change-Id: I355a3f817eefb54a763314c6365c0b9d030988b3
This commit is contained in:
parent
605c0698c0
commit
5f58e34f1e
236
specs/pike/approved/new-flavor.rst
Normal file
236
specs/pike/approved/new-flavor.rst
Normal file
@ -0,0 +1,236 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
==========
|
||||
New Flavor
|
||||
==========
|
||||
|
||||
https://blueprints.launchpad.net/mogan/+spec/new-flavor
|
||||
|
||||
Ironic added a "resource class" attribute to the primary node object represents
|
||||
the hardware specs. And not like VMs, baremetal nodes are consumed atomically,
|
||||
not piecemeal, so we would like to have the scheduler using a simplified search
|
||||
for the baremetal nodes that only looks for node that has a particular resource
|
||||
class.
|
||||
|
||||
Operators are the people who create the flavors and set the baremetal node
|
||||
resource class attribute, so we need to add a 'resources' field to the flavor
|
||||
which can include one or more resource classes (not only baremetal node, may
|
||||
also extend to add other resources later). And a 'description' field would be
|
||||
added for operators to fill the detail hardware profile.
|
||||
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
Currently, we just use the flavor name to match with the baremetal nodes,
|
||||
which is not flexible, as we also want to support associating one flavor to
|
||||
some different resource classes. And the detail hardware properties fields
|
||||
make the flavor too complex, we need to keep the flavor simple.
|
||||
|
||||
Use Cases
|
||||
---------
|
||||
|
||||
Operators and users wish to use a simple flavor/scheduler to search for
|
||||
baremetal nodes.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
We proposes to add a resources field which can associate one or more resource
|
||||
classes with the required quantities, like I need $N this resource, but for
|
||||
baremetal node, it's atomic, so it always be 1. And we also need a description
|
||||
field for hardware profile. For Valence integration, the flavor.resources can
|
||||
also reference to a Valence flavor which include all detail required hardware
|
||||
properties.
|
||||
|
||||
The operator might define the flavors as such::
|
||||
|
||||
- baremetal-gold
|
||||
resources:
|
||||
CUSTOM_BAREMETAL_GOLD: 1
|
||||
resource_traits:
|
||||
CUSTOM_BAREMETAL_GOLD: FPGA
|
||||
description:
|
||||
Intel(R) Xeon(R) E5620 2.40GHz 16 cores, 8GB RAM
|
||||
|
||||
- baremetal-RSD-gold
|
||||
resources:
|
||||
valence-gold-flavor: 1
|
||||
resource_traits:
|
||||
valence-gold-flavor: PodM1
|
||||
description:
|
||||
Intel(R) Xeon(R) E5620 2.40GHz 16 cores, 8GB RAM
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
None
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
The proposed change will be adding the following fields to the flavor object
|
||||
with their data type and default value for migrations.
|
||||
|
||||
+-----------------------+--------------+-----------------+
|
||||
| Field Name | Field Type | Default Value |
|
||||
+=======================+==============+=================+
|
||||
| uuid | UUID | None |
|
||||
+-----------------------+--------------+-----------------+
|
||||
| name | String | None |
|
||||
+-----------------------+--------------+-----------------+
|
||||
| resources | DictOfString | None |
|
||||
+-----------------------+--------------+-----------------+
|
||||
| resource_traits | DictOfString | None |
|
||||
+-----------------------+--------------+-----------------+
|
||||
| description | String | None |
|
||||
+-----------------------+--------------+-----------------+
|
||||
| is_public | Bool | True |
|
||||
+-----------------------+--------------+-----------------+
|
||||
| disabled | Bool | False |
|
||||
+-----------------------+--------------+-----------------+
|
||||
|
||||
The `resources` field indicates the resource quantities and the
|
||||
`resource_traits` field reference to the resource qualities.
|
||||
|
||||
The `disabled` field is intended to be used when phasing out flavors. In this
|
||||
case, a delete wouldn't work because the flavor needs to still be available
|
||||
for live servers using that flavor, but we don't want to allow *new* servers
|
||||
created from that flavor. And we propose to deny deleting flavors if they are
|
||||
associated with servers.
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
REST API will be changed as part of this change.
|
||||
|
||||
- To create a new flavor, a user will::
|
||||
|
||||
POST /v1/flavors
|
||||
|
||||
With a body containing the JSON description of the flavor.
|
||||
|
||||
JSON Schema::
|
||||
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
'name': {'type': 'string', 'minLength': 1, 'maxLength': 255},
|
||||
'resources': {
|
||||
'type': 'object',
|
||||
'patternProperties': {
|
||||
'^[a-zA-Z0-9-_:. ]{1,255}$': {
|
||||
'type': 'integer', 'minimum': 1
|
||||
}
|
||||
},
|
||||
'additionalProperties': False
|
||||
},
|
||||
'resource_traits': {
|
||||
'type': 'object',
|
||||
'patternProperties': {
|
||||
'^[a-zA-Z0-9-_:. ]{1,255}$': {
|
||||
'type': 'string', 'maxLength': 255
|
||||
}
|
||||
},
|
||||
'additionalProperties': False
|
||||
},
|
||||
'description': {'type': 'string', 'minLength': 1},
|
||||
'disabled': {'type': 'boolean'},
|
||||
'is_public': {'type': 'boolean'},
|
||||
},
|
||||
'required': ['name', 'resources', 'description'],
|
||||
'additionalProperties': False,
|
||||
}
|
||||
|
||||
- To update a flavor, a user will::
|
||||
|
||||
PATCH /v1/flavors/flavor_uuid
|
||||
|
||||
We only allow to update below attributes::
|
||||
|
||||
['/name', '/is_public', '/disabled']
|
||||
|
||||
Example of request BODY::
|
||||
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/disabled",
|
||||
"value": true
|
||||
}
|
||||
|
||||
Update other properties is not allowed, as it will make server properties
|
||||
not consistent with the real hardware. Users need to create a new flavor
|
||||
instead in this scenario. And when creating a server, we will check if
|
||||
the specified flavor is disabled.
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
None
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
<niu-zglinux>
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
* Modify flavor object with the proposed fields.
|
||||
* Change REST API to support new flavor properties.
|
||||
* Change scheduler filters/weighters to match the new flavor.
|
||||
* Change CLI to support flavor management.
|
||||
* Add UT and docs.
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
Unit Testing will be added.
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
Docs about new flavor will be added.
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
None
|
Loading…
Reference in New Issue
Block a user