diff --git a/ironic/drivers/modules/irmc/bios.py b/ironic/drivers/modules/irmc/bios.py index d8a2671b30..4300fc415f 100644 --- a/ironic/drivers/modules/irmc/bios.py +++ b/ironic/drivers/modules/irmc/bios.py @@ -87,6 +87,9 @@ class IRMCBIOS(base.BIOSInterface): '%(settings)s', {'settings': settings, 'node_uuid': task.node.uuid}) irmc.elcm.set_bios_configuration(irmc_info, settings) + # NOTE(trungnv): Fix failed cleaning during rebooting node + # when combine OOB and IB steps in manual clean. + self._resume_cleaning(task) except irmc.scci.SCCIError as e: LOG.error('Failed to apply BIOS configuration on node ' '%(node_uuid)s. Error: %(error)s', @@ -138,3 +141,9 @@ class IRMCBIOS(base.BIOSInterface): delete_names = [setting['name'] for setting in delete_list] objects.BIOSSettingList.delete(task.context, node_id, delete_names) + + def _resume_cleaning(self, task): + driver_internal_info = task.node.driver_internal_info + driver_internal_info['cleaning_reboot'] = True + task.node.driver_internal_info = driver_internal_info + task.node.save() diff --git a/ironic/tests/unit/drivers/modules/irmc/test_bios.py b/ironic/tests/unit/drivers/modules/irmc/test_bios.py index 5bc5dbd0e3..9876317f85 100644 --- a/ironic/tests/unit/drivers/modules/irmc/test_bios.py +++ b/ironic/tests/unit/drivers/modules/irmc/test_bios.py @@ -56,6 +56,7 @@ class IRMCBIOSTestCase(test_common.BaseIRMCTest): }] with task_manager.acquire(self.context, self.node.uuid) as task: irmc_info = irmc_common.parse_driver_info(task.node) + task.node.save = mock.Mock() get_bios_settings_mock.return_value = settings task.driver.bios.apply_configuration(task, settings) set_bios_configuration_mock.assert_called_once_with(irmc_info,