Out-of-band Boot from UEFI iSCSI volume for HPE Proliant server

This change proposes to add a new methods in ilo management
interface to support out-of-band booting from iSCSI Cinder
volume for HPE Proliant Servers which supports booting from
UEFI iSCSI volume in firmware.

Co-Authored-By: Debayan Ray <debayan.ray@gmail.com>
Co-Authored-By: Paresh Sao <paresh.h.sao@gmail.com>

Partial-Bug: 1526861
Change-Id: I86fb4fa7913cc7f925b2e450c81fb618135bf169
This commit is contained in:
Ramakrishnan G 2015-07-20 02:09:24 +00:00 committed by paresh-sao
parent 58d4dfb768
commit 0783f0581f
2 changed files with 303 additions and 0 deletions

View File

@ -0,0 +1,302 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
===============================
UEFI iSCSI Boot for iLO drivers
===============================
https://bugs.launchpad.net/ironic/+bug/1526861
HPE ProLiant Servers (Gen9 and beyond) supports UEFI iSCSI Boot through its
firmware. The proposed feature is to add support for this firmware based
booting of an iSCSI Cinder volume in UEFI mode for Ironic iLO drivers.
Problem description
===================
Currently, Ironic has ability to boot from Cinder volume. Moreover, this
support is to boot from an iSCSI volume using bootloaders like iPXE. It
doesn't provide any way to harness the feature of some servers which
inherently supports booting from an iSCSI volume using their firmware
capabilities. Hardware can be configured programmatically to boot from an
iSCSI volume through firmware.
Proposed change
===============
This change is based on the reference driver implementation guidelines
proposed by `Boot from Volume - Reference Drivers`_ spec to support booting
ironic nodes from a storage device that is hosted and/or controlled remotely. This
change proposes two new methods for iLO drivers management interface; namely
``set_iscsi_boot_target`` and ``clear_iscsi_boot_target``, which will facilitate
setting and clearing iSCSI target information using iLO interfaces for UEFI
iSCSI boot capable HPE Proliant servers.
The boot interface method ``prepare_instance()`` in ``ilo`` hardware type
will check if the instance requested boot mode is 'UEFI' and given volume is
bootable. If so, it will set the iSCSI target in the iLO and set boot device
to iSCSI target.
If the instance requested boot mode is 'BIOS' the behavior for the two boot
interfaces (``ilo-pxe`` and ``ilo-virtual-media``) will be as under:
* ``ilo-pxe`` : It will fallback to iPXE to boot the volume.
* ``ilo-virtual-media``: It will throw the following error:
``virtual media cannot boot volume in bios.``
The function definition for ``ilo-pxe`` boot interface with its pseudo-code
will be as follows:
.. code-block:: python
class IloPXEBoot(pxe.PXEBoot):
def prepare_instance(self, task):
"""Prepares the boot of instance.
:param task: a task from TaskManager.
:returns: None
:raises: IloOperationError, if some operation on iLO failed.
"""
if deploy_utils.is_iscsi_boot(task) and boot_mode == 'uefi':
#Call the management interface
task.driver.management.set_iscsi_boot_target(task)
#Set boot device to 'ISCSIBOOT'
deploy_utils.try_set_boot_device(task, boot_devices.ISCSIBOOT)
else:
#Let iPXE handle this
super(IloPXEBoot, self).prepare_instance(task)
def clean_up_instance(self, task):
"""Cleans up the boot of instance.
:param task: a task from TaskManager.
:returns: None
:raises: IloOperationError, if some operation on iLO failed.
"""
if deploy_utils.is_iscsi_boot(task) and boot_mode == 'uefi':
#Call the management interface
task.driver.management.clear_iscsi_boot_target(task)
else:
#Let iPXE handle this
super(IloPXEBoot, self).clean_up_instance(task)
The function definition for ``ilo-virtual-media`` boot interface with its
pseudo-code will be as follows:
.. code-block:: python
class IloVirtualMediaBoot(base.BootInterface):
def prepare_instance(self, task):
"""Prepares the boot of instance.
:param task: a task from TaskManager.
:returns: None
:raises: IloOperationError, if some operation on iLO failed.
"""
if deploy_utils.is_iscsi_boot(task) and boot_mode == 'uefi':
#Call the management interface
task.driver.management.set_iscsi_boot_target(task)
#Set boot device to 'ISCSIBOOT'
deploy_utils.try_set_boot_device(task, boot_devices.ISCSIBOOT)
return
elif deploy_utils.is_iscsi_boot(task) and boot_mode == 'bios':
#Throw the error in bios boot mode
msg = 'virtual media can not boot volume in bios mode.'
raise exception.InstanceDeployFailure(msg)
else:
#Default code
def clean_up_instance(self, task):
"""Cleans up the boot of instance.
:param task: a task from TaskManager.
:returns: None
:raises: IloOperationError, if some operation on iLO failed.
"""
if deploy_utils.is_iscsi_boot(task) and boot_mode == 'uefi':
#Call the management interface
task.driver.management.clear_iscsi_boot_target(task)
else:
#Fall to virtual media cleanup
Two new methods will be added in ``ilo`` drivers management interface
``ilo.management.IloManangement``:
* set_iscsi_boot_target() - To set iSCSI target information into iLO
* clear_iscsi_boot_target() - To clear iSCSI target information from iLO
New version of proliantutils library would be released that supports the
above mentioned methods.
The function definition with its pseudo-code will be as follows:
.. code-block:: python
class IloManagement(base.ManagementInterface):
def set_iscsi_boot_target(self, task):
"""Set iscsi boot volume target info from the node.
:param task: a task from TaskManager.
"""
#Proliants call to set iscsi target info
def clear_iscsi_boot_target(self, task):
"""Clear iscsi boot volume target info from the node.
:param task: a task from TaskManager.
"""
#Library call to clear iscsi target info
Alternatives
------------
None.
Data model impact
-----------------
None.
State Machine Impact
--------------------
None.
REST API impact
---------------
None.
Client (CLI) impact
-------------------
None.
RPC API impact
--------------
None.
Driver API impact
-----------------
None.
Nova driver impact
------------------
None.
Security impact
---------------
None.
Ramdisk impact
--------------
None.
Other end user impact
---------------------
None.
Scalability impact
------------------
None.
Performance Impact
------------------
None.
Other deployer impact
---------------------
Deployers will be able to configure server which support UEFI iSCSI boot with
this change. The workflow will be as follows:
* Operator configures the node with appropriate hardware type with boot
interface and adds the capability ``iscsi_boot=true`` in
``node.properties['capabilities']`` (or it could be populated by
inspection, but it's not part of this spec on how it gets populated).
* Operator creates a flavor with Compute capability ``iscsi_boot=true`` to
request bare metal booting from Cinder volume.
* Tenant creates a Cinder volume.
* Tenant requests a bare metal instance to be booted up with a Cinder volume
with the above mentioned flavor.
* Node having 'ilo-virtual-media' as boot interface with capability
'iscsi_boot=true' should also have capability 'boot_mode' configured
to 'uefi' only.
* Nova Ironic virt driver passes information about iSCSI volume to Ironic.
For more information, refer ironic spec
`Add volume connection information for Ironic nodes`_.
.. _`Add volume connection information for Ironic nodes`: https://specs.openstack.org/openstack/ironic-specs/specs/9.0/volume-connection-information.html
Developer impact
----------------
None.
Implementation
==============
Assignee(s)
-----------
Primary assignee:
kesper
Other contributors:
deray
stendulker
Work Items
----------
* Need to add changes in ``ilo-pxe`` and ``ilo-virtual-media`` boot
interfaces.
* Need to implement ``set_iscsi_boot_target`` and ``clear_iscsi_boot_target``
in ``ilo`` management interface.
Dependencies
============
None.
Testing
=======
This feature would be tested using HPE iLO third-party CI.
Upgrades and Backwards Compatibility
====================================
None.
Documentation Impact
====================
iLO drivers documentation will be updated for this feature.
References
==========
* `Boot from Volume - Reference Drivers`_
.. _`add support in Ironic framework`: https://specs.openstack.org/openstack/ironic-specs/specs/approved/volume-connection-information.html
.. _`Boot from Volume - Reference Drivers`: https://specs.openstack.org/openstack/ironic-specs/specs/approved/boot-from-volume-reference-drivers.html
.. _`iLO UEFI Deployment Guide`: https://support.hpe.com/hpsc/doc/public/display?docId=c04565930

View File

@ -0,0 +1 @@
../approved/ilo-uefi-iscsi-boot.rst