Follow-up patch for the Redfish spec

This patch contains changes to the driver's properties from the original
Redfish spec[0].

Before the driver was expecting a single "redfish_uri" property which
contained two pieces of information: The URI to the root resource and
the system resource identifier.

As discussed on IRC on 14/03/2017 [1] and later on 21/03/2017 [2], it
turns out that the Redfish specification isn't very opinionated regarding
the names of the resources which may lead to some implementations to
call /Systems (as we call it in this specification) /Nodes or any other
variant. Therefore, splitting the old proposed "redfish_uri" into
"redfish_address" and "redfish_system_id" makes more sense and makes the
driver more flexible when working with different types of Redfish
systems from different vendors.

[0] 88b55d4307
[1] http://eavesdrop.openstack.org/irclogs/%23openstack-ironic/%23openstack-ironic.2017-03-14.log.html#t2017-03-14T12:05:46
[2] http://eavesdrop.openstack.org/irclogs/%23openstack-ironic/%23openstack-ironic.2017-03-21.log.html#t2017-03-21T16:36:08

Change-Id: I9cdeee2f50859d97e8ae8b8b4d528446e106eced
This commit is contained in:
Lucas Alvares Gomes 2017-03-14 12:44:13 +00:00
parent 1a4ea22810
commit 6c8c98679a
1 changed files with 69 additions and 44 deletions

View File

@ -4,14 +4,15 @@
http://creativecommons.org/licenses/by/3.0/legalcode
=========================
Redfish driver interfaces
=========================
====================================
Redfish hardware type and interfaces
====================================
https://bugs.launchpad.net/ironic/+bug/1526477
This specification proposes the addition of a new driver in order to support
Ironic deployment on Redfish compliant servers.
This specification proposes the addition of a new ``redfish`` hardware
type, power and management interfaces in order to support ironic
deployment on Redfish compliant servers.
Problem description
===================
@ -19,25 +20,28 @@ Problem description
The Distributed Management Task Force (DMTF) has published a new specification
called Redfish (refer to http://www.dmtf.org/standards/redfish) to provide a
RESTful based API to manage servers in a standard way. This specification aims
at adding support to Ironic for controlling Redfish compliant servers.
at adding support to ironic for controlling Redfish compliant servers.
Proposed change
===============
Power and management interfaces will be extended with Redfish support.
The new Redfish module can use either the python-redfish (when it is mature
enough) or the sushy library for communicating with a Redfish system.
(refer to https://github.com/openstack/python-redfish and
https://github.com/openstack/sushy)
This spec proposes adding a new ``redfish`` hardware type, power and
management interfaces. None of which will be enabled by default.
The goal is to provide power management similarly to what is done
in the pre-existing in-tree drivers.
The new interfaces will use the `sushy`_ library in order to handle the
communication between the driver and the Redfish controller.
This library may be switched to `python-redfish`_ in the future after
re-evaluation by the ironic community. The switch to `python-redfish`_
is outside the scope of this specification, but it should not cause
any public interface to be changed. It would most likely involve code
changes and new configuration options.
Note that no OEM specific extension will be supported.
Alternatives
------------
No real alternative exists currently
None
Data model impact
-----------------
@ -89,31 +93,49 @@ None
Other deployer impact
---------------------
The following driver_info fields are required while enrolling nodes into Ironic:
* redfish_uri URI of the System to interact with
(e.g.: http://x.y.z.t/redfish/v1/Systems/1 or
https://redfishmgr/redfish/v1/Systems/CX34R87)
* redfish_username: User account with admin/server-profile access privilege
* redfish_password: User account password
* redfish_verify_ca: this property contains either a boolean value,
a path to a CA_BUNDLE file or directory with
certificates of trusted CAs. If set to True
the driver will verify the host certificates;
if False the driver will ignore verifying the
SSL certificate; If it's a path the driver will
use the specified certificate or one of the
certificates in the directory. Defaults to True.
The following driver_info fields are required while enrolling nodes
into ironic:
* ``redfish_address``: The URL address to the Redfish controller. It
should include scheme and authority portion of the URL. For example:
https://mgmt.vendor.com
* ``redfish_system_id``: The canonical path to the ComputerSystem
resource that the driver will interact with. It should include the
root service, version and the unique resource path to a ComputerSystem
within the same authority as the redfish_address property. For
example: /redfish/v1/Systems/1
* ``redfish_username``: User account with admin/server-profile
access privilege. Although this property is not mandatory it's highly
recommended to set a username. Optional
* ``redfish_password``: User account password. Although this property
is not mandatory it's highly recommended to set a password. Optional
* ``redfish_verify_ca``: This property contains either a boolean
value, a path to a CA_BUNDLE file or directory with certificates
of trusted CAs. If set to True the driver will verify the host
certificates; if False the driver will ignore verifying the SSL
certificate; If it's a path the driver will use the specified
certificate or one of the certificates in the directory. Defaults
to True. Optional
For more information about the expected syntax of the
``redfish_system_id`` property check the `Resource identifier property
<http://redfish.dmtf.org/schemas/DSP0266_1.1.html#resource-identifier-property>`_
section of the DMTF specification.
The following new configuration variables are proposed (and their default
values) to be added to the conductor variable group:
* [redfish]/connection_attempts = 5
* [redfish]/``connection_attempts``
Maximum number of attempts to try to connect to Redfish
Maximum number of attempts to try to connect to Redfish.
* [redfish]/connection_retry_interval = 2
* [redfish]/``connection_retry_interval``
Number of seconds to wait between attempts to connect to Redfish
Number of seconds to wait between attempts to connect to Redfish.
Developer impact
----------------
@ -139,14 +161,14 @@ Work Items
* Add a new ``redfish`` hardware type, power and management interfaces.
* Write unit-tests for the new code.
* Modify the Ironic DevStack module to setup a virtual environment that
* Modify the ironic DevStack module to setup a virtual environment that
is able to test nodes using the new Redfish driver.
* Write documentation.
Dependencies
============
This driver requires either that python-redfish or sushy installed on the
conductor node.
The new ``redfish`` power and management interfaces will require the
`sushy`_ library to be installed on the conductor node.
Testing
=======
@ -163,16 +185,19 @@ the RPC API.
Documentation Impact
====================
* Updating Ironic documentation section _`Enabling Drivers`:
http://docs.openstack.org/developer/ironic/deploy/drivers.html with Redfish
related instructions.
* Updating Ironic install-guide documentation section
_`Setup the drivers for the Bare Metal service`:
http://docs.openstack.org/project-install-guide/baremetal/draft/setup-drivers.html
* Updating ironic documentation section `Enabling Drivers
<http://docs.openstack.org/developer/ironic/deploy/drivers.html>`_
with Redfish related instructions.
* Updating ironic install-guide documentation section
`Setup the drivers for the Bare Metal service
<http://docs.openstack.org/project-install-guide/baremetal/draft/setup-drivers.html>`_.
References
==========
* Redfish DMTF: http://www.dmtf.org/standards/redfish
* Sushy library: https://github.com/openstack/sushy
* python-redfish library: https://github.com/openstack/python-redfish
_`Redfish DMTF`: http://www.dmtf.org/standards/redfish
_`python-redfish`: https://github.com/openstack/python-redfish
_`sushy`: https://github.com/openstack/sushy
.. _`sushy`: https://github.com/openstack/sushy
.. _`python-redfish`: https://github.com/openstack/python-redfish