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: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: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:
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
innode.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.
Developer impact¶
None.
Implementation¶
Assignee(s)¶
- Primary assignee:
kesper
- Other contributors:
deray stendulker
Work Items¶
Need to add changes in
ilo-pxe
andilo-virtual-media
boot interfaces.Need to implement
set_iscsi_boot_target
andclear_iscsi_boot_target
inilo
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.