summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ironic/conductor/manager.py5
-rw-r--r--ironic/tests/unit/conductor/test_manager.py14
-rw-r--r--releasenotes/notes/fix-clean-steps-not-running-0d065cb022bc0419.yaml11
3 files changed, 28 insertions, 2 deletions
diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py
index 35e5b1e03..3f75ac5ac 100644
--- a/ironic/conductor/manager.py
+++ b/ironic/conductor/manager.py
@@ -835,10 +835,11 @@ class ConductorManager(periodic_task.PeriodicTasks):
"""
node = task.node
+ next_steps = node.driver_internal_info.get('clean_steps', [])
if not node.clean_step:
- return []
+ # first time through, return all steps
+ return next_steps
- next_steps = node.driver_internal_info.get('clean_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 4e745b8eb..6fe754210 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 000000000..2ef966a18
--- /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.