diff options
author | Zuul <zuul@review.opendev.org> | 2020-07-30 11:21:52 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2020-07-30 11:21:52 +0000 |
commit | 888f766cee71d1dd9cfd92ff72818476e9cd7ff7 (patch) | |
tree | ac832570295eda95b9f21a6067ebb93c4c908605 | |
parent | 08617ee716e29a79fcc584c3197456a0b6411b5a (diff) | |
parent | 44d66d351f68fd5bafef2376f4c96d94fa26ff2b (diff) | |
download | ironic-888f766cee71d1dd9cfd92ff72818476e9cd7ff7.tar.gz |
Merge "Reset power state upon adoption failure"
-rw-r--r-- | ironic/conductor/manager.py | 2 | ||||
-rw-r--r-- | ironic/tests/unit/conductor/test_manager.py | 9 | ||||
-rw-r--r-- | releasenotes/notes/unsave-power-state-on-adopt-failed-09194c8269c779de.yaml | 7 |
3 files changed, 17 insertions, 1 deletions
diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py index ef7debbe0..f75029eaa 100644 --- a/ironic/conductor/manager.py +++ b/ironic/conductor/manager.py @@ -1770,6 +1770,8 @@ class ConductorManager(base_manager.BaseConductorManager): msg = (_('Error while attempting to adopt node %(node)s: ' '%(err)s.') % {'node': node.uuid, 'err': err}) LOG.error(msg) + # Wipe power state from being preserved as it is likely invalid. + node.power_state = states.NOSTATE node.last_error = msg task.process_event('fail') diff --git a/ironic/tests/unit/conductor/test_manager.py b/ironic/tests/unit/conductor/test_manager.py index 35800ca04..f1b0990bf 100644 --- a/ironic/tests/unit/conductor/test_manager.py +++ b/ironic/tests/unit/conductor/test_manager.py @@ -7090,7 +7090,13 @@ class DoNodeAdoptionTestCase(mgr_utils.ServiceSetUpMixin, db_base.DbTestCase): self._start_service() node = obj_utils.create_test_node( self.context, driver='fake-hardware', - provision_state=states.ADOPTING) + provision_state=states.ADOPTING, + power_state=states.POWER_ON) + # NOTE(TheJulia): When nodes are created for adoption, they + # would have no power state. Under normal circumstances + # during validate the node object is updated with power state + # however we need to make sure that we wipe preserved state + # as part of failure handling. task = task_manager.TaskManager(self.context, node.uuid) self.service._do_adoption(task) @@ -7104,6 +7110,7 @@ class DoNodeAdoptionTestCase(mgr_utils.ServiceSetUpMixin, db_base.DbTestCase): self.assertFalse(mock_start_console.called) self.assertTrue(mock_boot_validate.called) self.assertIn('is_whole_disk_image', task.node.driver_internal_info) + self.assertEqual(states.NOSTATE, node.power_state) @mock.patch('ironic.drivers.modules.fake.FakeBoot.validate', autospec=True) @mock.patch('ironic.drivers.modules.fake.FakeConsole.start_console', diff --git a/releasenotes/notes/unsave-power-state-on-adopt-failed-09194c8269c779de.yaml b/releasenotes/notes/unsave-power-state-on-adopt-failed-09194c8269c779de.yaml new file mode 100644 index 000000000..cebb92035 --- /dev/null +++ b/releasenotes/notes/unsave-power-state-on-adopt-failed-09194c8269c779de.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Fixes the preservation of potentially incorrect power state + information when adoption process fails. Power state is now + wiped as part of the failure handling process instead of + being preserved. |