summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Gilliard <matthew.gilliard@hp.com>2015-01-16 14:37:39 +0000
committerMatthew Gilliard <matthew.gilliard@hp.com>2015-01-22 15:34:06 +0000
commit6681513fe247cd8c458f234b8514e2af25d8b0ff (patch)
tree6a3857c3bc83e14884f7d6648e320b4fe7920200
parentcf70dbff33b1d74a72cbd8f3d958c67bff105d43 (diff)
downloadironic-6681513fe247cd8c458f234b8514e2af25d8b0ff.tar.gz
Force glance recheck for kernel/ramdisk on rebuild
When doing a rebuild, clear the instance_info's kernel and ramdisk values, to force the deploy driver to check glance. This is necessary as those values may have changed without us knowing. closes-bug: #1401501 (cherry picked from commit 2e06859425ca79fac054b577b54906e4f0f39b12) (includes bugfix and test for that commit, added in 0556b5852c0a685e47862d945e35a4772c8ed267) Conflicts: ironic/conductor/manager.py Change-Id: I8d7831789d21d3a2dcafd614989cf1e53dbedd70
-rw-r--r--ironic/conductor/manager.py8
-rw-r--r--ironic/tests/conductor/test_manager.py7
2 files changed, 14 insertions, 1 deletions
diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py
index d310b4dc4..6d017d047 100644
--- a/ironic/conductor/manager.py
+++ b/ironic/conductor/manager.py
@@ -527,6 +527,14 @@ class ConductorManager(periodic_task.PeriodicTasks):
previous_prov_state = node.provision_state
previous_tgt_provision_state = node.target_provision_state
+ if rebuild:
+ # Note(gilliard) Clear these to force the driver to
+ # check whether they have been changed in glance
+ instance_info = node.instance_info
+ instance_info.pop('kernel', None)
+ instance_info.pop('ramdisk', None)
+ node.instance_info = instance_info
+
# Set target state to expose that work is in progress
node.provision_state = states.DEPLOYING
node.target_provision_state = states.DEPLOYDONE
diff --git a/ironic/tests/conductor/test_manager.py b/ironic/tests/conductor/test_manager.py
index e22484392..f1f49ddc0 100644
--- a/ironic/tests/conductor/test_manager.py
+++ b/ironic/tests/conductor/test_manager.py
@@ -735,7 +735,9 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
self._start_service()
mock_deploy.return_value = states.DEPLOYING
node = obj_utils.create_test_node(self.context, driver='fake',
- provision_state=states.ACTIVE)
+ provision_state=states.ACTIVE,
+ instance_info={'kernel': 'aaaa',
+ 'ramdisk': 'bbbb'})
self.service.do_node_deploy(self.context, node.uuid, rebuild=True)
self.service._worker_pool.waitall()
@@ -747,6 +749,9 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
# Verify reservation has been cleared.
self.assertIsNone(node.reservation)
mock_deploy.assert_called_once_with(mock.ANY)
+ # Verify instance_info values has been cleared.
+ self.assertNotIn('kernel', node.instance_info)
+ self.assertNotIn('ramdisk', node.instance_info)
@mock.patch('ironic.drivers.modules.fake.FakeDeploy.deploy')
def test_do_node_deploy_rebuild_deployfail_state(self, mock_deploy):