diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py index 35e5b1e032..3f75ac5acb 100644 --- a/ironic/conductor/manager.py +++ b/ironic/conductor/manager.py @@ -835,10 +835,11 @@ class ConductorManager(periodic_task.PeriodicTasks): """ node = task.node - if not node.clean_step: - return [] - next_steps = node.driver_internal_info.get('clean_steps', []) + if not node.clean_step: + # first time through, return all steps + return next_steps + try: # Trim off the last clean step (now finished) and # all previous steps diff --git a/ironic/tests/unit/conductor/test_manager.py b/ironic/tests/unit/conductor/test_manager.py index 4e745b8ebd..6fe7542100 100644 --- a/ironic/tests/unit/conductor/test_manager.py +++ b/ironic/tests/unit/conductor/test_manager.py @@ -2064,6 +2064,20 @@ class DoNodeCleanTestCase(_ServiceSetUpMixin, tests_db_base.DbTestCase): steps = self.service._get_node_next_clean_steps(task) self.assertEqual(self.next_clean_steps, steps) + def test__get_node_next_clean_steps_unset_clean_step(self): + driver_internal_info = {'clean_steps': self.clean_steps} + node = obj_utils.create_test_node( + self.context, driver='fake', + provision_state=states.CLEANWAIT, + target_provision_state=states.AVAILABLE, + driver_internal_info=driver_internal_info, + last_error=None, + clean_step=None) + + with task_manager.acquire(self.context, node.uuid) as task: + steps = self.service._get_node_next_clean_steps(task) + self.assertEqual(self.clean_steps, steps) + def test__get_node_next_clean_steps_bad_clean_step(self): driver_internal_info = {'clean_steps': self.clean_steps} node = obj_utils.create_test_node( diff --git a/releasenotes/notes/fix-clean-steps-not-running-0d065cb022bc0419.yaml b/releasenotes/notes/fix-clean-steps-not-running-0d065cb022bc0419.yaml new file mode 100644 index 0000000000..2ef966a188 --- /dev/null +++ b/releasenotes/notes/fix-clean-steps-not-running-0d065cb022bc0419.yaml @@ -0,0 +1,11 @@ +--- +prelude: > + A major bug was fixed where clean steps do not run. +critical: + - This fixes a bug where Ironic skipped all clean steps, + which may leave the previous tenant's data on disk + available to new users. +security: + - This fixes a bug where Ironic skipped all clean steps, + which may leave the previous tenant's data on disk + available to new users.