From 216ad852fa17d508f119efdd7c77e2583d6ae8b8 Mon Sep 17 00:00:00 2001 From: "mallikarjuna.kolagatla" Date: Mon, 5 Feb 2018 08:58:36 +0000 Subject: [PATCH] Updates boot mode on the baremetal as per `boot_mode` This patch modifies the ilo drivers to use the `boot_mode` capability for cleaning and update the same on the baremetal. Change-Id: I5b095cac47890e117866f0569f69148deff173b7 Closes-Bug: #1559835 --- ironic/drivers/modules/ilo/boot.py | 11 ++----- .../unit/drivers/modules/ilo/test_boot.py | 30 ++++--------------- ...or-ilo-hardware-type-ebca86da8fc271f6.yaml | 8 +++++ 3 files changed, 16 insertions(+), 33 deletions(-) create mode 100644 releasenotes/notes/update-boot_mode-for-cleaning-scenario-for-ilo-hardware-type-ebca86da8fc271f6.yaml diff --git a/ironic/drivers/modules/ilo/boot.py b/ironic/drivers/modules/ilo/boot.py index 16300b29b7..0765cecfc5 100644 --- a/ironic/drivers/modules/ilo/boot.py +++ b/ironic/drivers/modules/ilo/boot.py @@ -451,13 +451,7 @@ class IloVirtualMediaBoot(base.BootInterface): states.RESCUING): return - # Powering off the Node before initiating boot for node cleaning. - # If node is in system POST, setting boot device fails. - manager_utils.node_power_action(task, states.POWER_OFF) - - if node.provision_state in (states.DEPLOYING, - states.RESCUING): - prepare_node_for_deploy(task) + prepare_node_for_deploy(task) # Clear ilo_boot_iso if it's a glance image to force recreate # another one again (or use existing one in glance). @@ -655,7 +649,8 @@ class IloPXEBoot(pxe.PXEBoot): :raises: IloOperationError, if some operation on iLO failed. """ - if task.node.provision_state in (states.DEPLOYING, states.RESCUING): + if task.node.provision_state in (states.DEPLOYING, states.RESCUING, + states.CLEANING): prepare_node_for_deploy(task) super(IloPXEBoot, self).prepare_ramdisk(task, ramdisk_params) diff --git a/ironic/tests/unit/drivers/modules/ilo/test_boot.py b/ironic/tests/unit/drivers/modules/ilo/test_boot.py index 63d5ff02c5..1414584b2b 100644 --- a/ironic/tests/unit/drivers/modules/ilo/test_boot.py +++ b/ironic/tests/unit/drivers/modules/ilo/test_boot.py @@ -726,8 +726,6 @@ class IloVirtualMediaBootTestCase(db_base.DbTestCase): @mock.patch.object(ilo_boot, 'prepare_node_for_deploy', spec_set=True, autospec=True) - @mock.patch.object(manager_utils, 'node_power_action', - spec_set=True, autospec=True) @mock.patch.object(ilo_common, 'eject_vmedia_devices', spec_set=True, autospec=True) @mock.patch.object(ilo_common, 'setup_vmedia', spec_set=True, @@ -735,7 +733,7 @@ class IloVirtualMediaBootTestCase(db_base.DbTestCase): @mock.patch.object(deploy_utils, 'get_single_nic_with_vif_port_id', spec_set=True, autospec=True) def _test_prepare_ramdisk(self, get_nic_mock, setup_vmedia_mock, - eject_mock, node_power_mock, + eject_mock, prepare_node_for_deploy_mock, ilo_boot_iso, image_source, ramdisk_params={'a': 'b'}, @@ -757,11 +755,7 @@ class IloVirtualMediaBootTestCase(db_base.DbTestCase): task.driver.boot.prepare_ramdisk(task, ramdisk_params) - node_power_mock.assert_called_once_with(task, states.POWER_OFF) - if task.node.provision_state in (states.DEPLOYING, - states.RESCUING): - prepare_node_for_deploy_mock.assert_called_once_with(task) - + prepare_node_for_deploy_mock.assert_called_once_with(task) eject_mock.assert_called_once_with(task) expected_ramdisk_opts = {'a': 'b', 'BOOTIF': '12:34:56:78:90:ab'} get_nic_mock.assert_called_once_with(task) @@ -1148,23 +1142,6 @@ class IloPXEBootTestCase(db_base.DbTestCase): self.node = obj_utils.create_test_node( self.context, driver='pxe_ilo', driver_info=INFO_DICT) - @mock.patch.object(ilo_boot, 'prepare_node_for_deploy', spec_set=True, - autospec=True) - @mock.patch.object(pxe.PXEBoot, 'prepare_ramdisk', spec_set=True, - autospec=True) - def test_prepare_ramdisk_in_cleaning( - self, pxe_prepare_ramdisk_mock, prepare_node_mock): - self.node.provision_state = states.CLEANING - self.node.save() - with task_manager.acquire(self.context, self.node.uuid, - shared=False) as task: - self.assertIsNone( - task.driver.boot.prepare_ramdisk(task, None)) - - self.assertFalse(prepare_node_mock.called) - pxe_prepare_ramdisk_mock.assert_called_once_with( - mock.ANY, task, None) - @mock.patch.object(ilo_boot, 'prepare_node_for_deploy', spec_set=True, autospec=True) @mock.patch.object(pxe.PXEBoot, 'prepare_ramdisk', spec_set=True, @@ -1188,6 +1165,9 @@ class IloPXEBootTestCase(db_base.DbTestCase): def test_prepare_ramdisk_in_rescuing(self): self._test_prepare_ramdisk_needs_node_prep(prov_state=states.RESCUING) + def test_prepare_ramdisk_in_cleaning(self): + self._test_prepare_ramdisk_needs_node_prep(prov_state=states.CLEANING) + @mock.patch.object(deploy_utils, 'is_iscsi_boot', spec_set=True, autospec=True) @mock.patch.object(ilo_common, 'update_secure_boot_mode', spec_set=True, diff --git a/releasenotes/notes/update-boot_mode-for-cleaning-scenario-for-ilo-hardware-type-ebca86da8fc271f6.yaml b/releasenotes/notes/update-boot_mode-for-cleaning-scenario-for-ilo-hardware-type-ebca86da8fc271f6.yaml new file mode 100644 index 0000000000..5cd7f3f189 --- /dev/null +++ b/releasenotes/notes/update-boot_mode-for-cleaning-scenario-for-ilo-hardware-type-ebca86da8fc271f6.yaml @@ -0,0 +1,8 @@ +--- +fixes: + - | + Updates the boot mode on the baremetal for cleaning scenario as per + given ``boot_mode`` in node's properties/capabilities. This change + is for ``ilo`` hardware type. + See `bug 1559835 `_ + for more details.