Merge "Add support for preparing rescue ramdisk in iLO PXE"

This commit is contained in:
Zuul 2018-01-31 04:30:38 +00:00 committed by Gerrit Code Review
commit e882dfbd52
2 changed files with 28 additions and 14 deletions

View File

@ -607,15 +607,19 @@ class IloVirtualMediaBoot(base.BootInterface):
class IloPXEBoot(pxe.PXEBoot): class IloPXEBoot(pxe.PXEBoot):
@METRICS.timer('IloPXEBoot.prepare_ramdisk') @METRICS.timer('IloPXEBoot.prepare_ramdisk')
def prepare_ramdisk(self, task, ramdisk_params): def prepare_ramdisk(self, task, ramdisk_params, mode='deploy'):
"""Prepares the boot of Ironic ramdisk using PXE. """Prepares the boot of Ironic ramdisk using PXE.
This method prepares the boot of the deploy ramdisk after This method prepares the boot of the deploy or rescue ramdisk after
reading relevant information from the node's driver_info and reading relevant information from the node's driver_info and
instance_info. instance_info.
:param task: a task from TaskManager. :param task: a task from TaskManager.
:param ramdisk_params: the parameters to be passed to the ramdisk. :param ramdisk_params: the parameters to be passed to the ramdisk.
:param mode: Label indicating a deploy or rescue operation
being carried out on the node. Supported values are
'deploy' and 'rescue'. Defaults to 'deploy', indicating
deploy operation is being carried out.
:returns: None :returns: None
:raises: MissingParameterValue, if some information is missing in :raises: MissingParameterValue, if some information is missing in
node's driver_info or instance_info. node's driver_info or instance_info.
@ -626,10 +630,11 @@ class IloPXEBoot(pxe.PXEBoot):
:raises: IloOperationError, if some operation on iLO failed. :raises: IloOperationError, if some operation on iLO failed.
""" """
if task.node.provision_state == states.DEPLOYING: if task.node.provision_state in (states.DEPLOYING, states.RESCUING):
prepare_node_for_deploy(task) prepare_node_for_deploy(task)
super(IloPXEBoot, self).prepare_ramdisk(task, ramdisk_params) super(IloPXEBoot, self).prepare_ramdisk(task, ramdisk_params,
mode=mode)
@METRICS.timer('IloPXEBoot.prepare_instance') @METRICS.timer('IloPXEBoot.prepare_instance')
def prepare_instance(self, task): def prepare_instance(self, task):

View File

@ -1076,8 +1076,8 @@ class IloPXEBootTestCase(db_base.DbTestCase):
autospec=True) autospec=True)
@mock.patch.object(pxe.PXEBoot, 'prepare_ramdisk', spec_set=True, @mock.patch.object(pxe.PXEBoot, 'prepare_ramdisk', spec_set=True,
autospec=True) autospec=True)
def test_prepare_ramdisk_not_deploying_not_cleaning( def test_prepare_ramdisk_in_cleaning(
self, pxe_prepare_instance_mock, prepare_node_mock): self, pxe_prepare_ramdisk_mock, prepare_node_mock):
self.node.provision_state = states.CLEANING self.node.provision_state = states.CLEANING
self.node.save() self.node.save()
with task_manager.acquire(self.context, self.node.uuid, with task_manager.acquire(self.context, self.node.uuid,
@ -1086,25 +1086,34 @@ class IloPXEBootTestCase(db_base.DbTestCase):
task.driver.boot.prepare_ramdisk(task, None)) task.driver.boot.prepare_ramdisk(task, None))
self.assertFalse(prepare_node_mock.called) self.assertFalse(prepare_node_mock.called)
pxe_prepare_instance_mock.assert_called_once_with(mock.ANY, pxe_prepare_ramdisk_mock.assert_called_once_with(
task, None) mock.ANY, task, None, mode='deploy')
@mock.patch.object(ilo_boot, 'prepare_node_for_deploy', spec_set=True, @mock.patch.object(ilo_boot, 'prepare_node_for_deploy', spec_set=True,
autospec=True) autospec=True)
@mock.patch.object(pxe.PXEBoot, 'prepare_ramdisk', spec_set=True, @mock.patch.object(pxe.PXEBoot, 'prepare_ramdisk', spec_set=True,
autospec=True) autospec=True)
def test_prepare_ramdisk_in_deploying(self, pxe_prepare_instance_mock, def _test_prepare_ramdisk_needs_node_prep(self, pxe_prepare_ramdisk_mock,
prepare_node_mock): prepare_node_mock, prov_state,
self.node.provision_state = states.DEPLOYING mode):
self.node.provision_state = prov_state
self.node.save() self.node.save()
with task_manager.acquire(self.context, self.node.uuid, with task_manager.acquire(self.context, self.node.uuid,
shared=False) as task: shared=False) as task:
self.assertIsNone( self.assertIsNone(
task.driver.boot.prepare_ramdisk(task, None)) task.driver.boot.prepare_ramdisk(task, None, mode=mode))
prepare_node_mock.assert_called_once_with(task) prepare_node_mock.assert_called_once_with(task)
pxe_prepare_instance_mock.assert_called_once_with(mock.ANY, pxe_prepare_ramdisk_mock.assert_called_once_with(
task, None) mock.ANY, task, None, mode=mode)
def test_prepare_ramdisk_in_deploying(self):
self._test_prepare_ramdisk_needs_node_prep(prov_state=states.DEPLOYING,
mode='deploy')
def test_prepare_ramdisk_in_rescuing(self):
self._test_prepare_ramdisk_needs_node_prep(prov_state=states.RESCUING,
mode='rescue')
@mock.patch.object(deploy_utils, 'is_iscsi_boot', @mock.patch.object(deploy_utils, 'is_iscsi_boot',
spec_set=True, autospec=True) spec_set=True, autospec=True)