Fix bug where clean steps do not run

A bug was introduced during Liberty where Ironic transparently
ignores all clean steps and finishes cleaning. This is caused
by _get_node_next_clean_steps returning an empty list when
cleaning has just started. Fix this method to return the full
list of clean steps when cleaning begins.

This may leave previous tenants' data on disk and available to future
tenants. Deployers should apply this patch (or upgrade to a new release
with this patch) ASAP.

Depends-On: Id15cf6cc49122b08e557e44871b31a8c0d20b55d

Change-Id: If815f81d7e668244f0d434d4e2933e8f41946107
Closes-Bug: #1517277
This commit is contained in:
Jim Rollenhagen 2015-11-23 22:40:19 +00:00 committed by Devananda van der Veen
parent 2c6ed6bd8c
commit bf518cd540
3 changed files with 29 additions and 3 deletions

View File

@ -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

View File

@ -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(

View File

@ -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.