RSD integration

This specs proposes to integrate with rsd-lib to support
compose node on the fly.

It base on the previous valence integration spec.

Co-Authored-By: Zhenguo Niu <Niu.ZGlinux@gmail.com>
Co-Authored-By: Xinran <xin-ran.wang@intel.com>
Co-Authored-By: zhangjl <zhangjl@awcloud.com>

Change-Id: I73266062b3ad90a4ec3a934ff2820373188f5d3d
This commit is contained in:
Shaohe Feng 2017-10-22 17:46:27 -04:00
parent 9c47b0bff1
commit ee6b28c23a
1 changed files with 170 additions and 0 deletions

View File

@ -0,0 +1,170 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
===================
RSD Integration
===================
https://blueprints.launchpad.net/mogan/+spec/rsd-integration
The current Mogan implementation only supports pre-set configuration servers.
For custom servers, Mogan should to be able to compose bare metal through
integration with rsd-lib [1]_ that extends the existing Sushy [2]_ library
and leverages the Redfish API to compose nodes using disaggregated resources.
Problem description
===================
Mogan currently can only provision pre-set configuration servers, but users may
want to request a custom server with specific configurations like CPU, RAM, and
DISK.
Use Cases
---------
* An enterprise user wants to manage the RSD and general servers in a
unified manner.
* An enterprise user wants to apply a custom server with CPU, RAM, and DISK
specified by himself.
Proposed change
===============
We need to add a new underlying driver based on rsd-lib to compose/decompose a node.
And we also need to extend our server creat API to pass rsd-lib required parameters
when composing a node, need to align with rsd-lib team. But for non-rack servers
we can keep the current way of scheduling a node to provision.
When a request come with the rsd-lib specific parameters, We can invoke new driver
to compose the node on the fly, then register the composed node into Ironic with
Redfish driver. When nodes are enrolled in Ironic, there's no difference with
non-rack nodes. And these works are all done before the current server create
workflow, so we can create a new taskflow [3]_ for rsd-lib which includes
compose and enroll tasks:
ComposeNodeTask:
* execute: Invoke rsd-lib to compose a node according to the specified flavor.
* revert: Release the composed node if there's something wrong when enrolling.
EnrollNodeTask:
* execute: Enroll the composed node to Ironic.
* revert: If some exception raised and the node has been enrolled, need to
remove it from Ironic.
For rsd-lib node, we should skip the scheduling task in provison workflow.
Currently there are OnFailureRescheduleTask, we can pass some parameter to
indicate that we don't need to reschedule the task flow in rsd-lib scenario.
To distinguish RSD or no-rack server, we will add a system metadata key-value
for it.
Also, if there's some exceptions raised when provisioning, we should release the
composed node to rsd-lib pool and remove it from Ironic.
When deleting a server we should remove it from ironic firstly, then release the
resources to RSD pool.
Alternatives
------------
It will automatically invoke to compose node if scheduling max attempts
exceeds instead of using a specific flavor to indicate it's a RSD server.
Data model impact
-----------------
None
REST API impact
---------------
None
Security impact
---------------
None
Notifications impact
--------------------
None
Other end user impact
---------------------
None
Performance Impact
------------------
There's one potential performance impact on the server creating process,
as we need to composing the node via rsd-lib first.
Other deployer impact
---------------------
None
Developer impact
----------------
* As Mogan plans to support not only Ironic driver but also CloudBoot, need
to figure out whether CloudBoot has supported Redfish already or there's no
plan to support it.
Implementation
==============
Assignee(s)
-----------
Primary assignee:
<niu-zglinux>
<shaohe_feng>
<Xinran WANG>
Work Items
----------
* Refactor flavor(server type) to meet rsd-lib's requirements.
* Add `composed` filed to server object.
* Add a new taskflow for node composing and enrolling.
* Change delete server process to handle composed node gracefully.
* Add rsd-lib installation in Mogan devstack plugin as an option
Dependencies
============
* Redfish driver landed in ironic.
* PodManager simulator need to be improved, maybe return a fake
node(VM) and maybe we can test it with ssh driver before Redfish driver
available.
Testing
=======
Unit Testing will be added.
Documentation Impact
====================
Docs about rsd-lib integration will be added.
References
==========
.. [1] https://github.com/openstack/rsd-lib
.. [2] https://github.com/openstack/sushy
.. [3] https://wiki.openstack.org/wiki/TaskFlow
* https://github.com/openstack/rsd-lib/blob/master/doc/source/reference/usage.rst