summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulia Kreger <juliaashleykreger@gmail.com>2020-07-27 12:25:22 -0700
committerJulia Kreger <juliaashleykreger@gmail.com>2020-08-03 13:59:09 -0700
commit01345082661b4f34275bdd6feeea6d73972c50be (patch)
tree6c3fbad3d8fcca51712dce76b306f55ad3243b01
parent44d66d351f68fd5bafef2376f4c96d94fa26ff2b (diff)
downloadironic-01345082661b4f34275bdd6feeea6d73972c50be.tar.gz
Prevents power sync with ADOPTFAIL nodes
We shouldn't attempt to sync the power state on nodes in the adopt failed state as they may be in some sort of intermediate state indicitive of their adoption failure. Change-Id: I779155ba2dc3f256273a7f45c5354ee8e6a6fabf Story: 2007901 Task: 40296
-rw-r--r--ironic/conductor/manager.py3
-rw-r--r--ironic/tests/unit/conductor/test_manager.py22
-rw-r--r--releasenotes/notes/skip-power-sync-for-adoptfail-d2498f1a2e997ed7.yaml5
3 files changed, 29 insertions, 1 deletions
diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py
index 80dd6eb7b..abfbbaf93 100644
--- a/ironic/conductor/manager.py
+++ b/ironic/conductor/manager.py
@@ -81,7 +81,8 @@ LOG = log.getLogger(__name__)
METRICS = metrics_utils.get_metrics_logger(__name__)
-SYNC_EXCLUDED_STATES = (states.DEPLOYWAIT, states.CLEANWAIT, states.ENROLL)
+SYNC_EXCLUDED_STATES = (states.DEPLOYWAIT, states.CLEANWAIT, states.ENROLL,
+ states.ADOPTFAIL)
class ConductorManager(base_manager.BaseConductorManager):
diff --git a/ironic/tests/unit/conductor/test_manager.py b/ironic/tests/unit/conductor/test_manager.py
index 1946eab30..77b2c4e56 100644
--- a/ironic/tests/unit/conductor/test_manager.py
+++ b/ironic/tests/unit/conductor/test_manager.py
@@ -5227,6 +5227,28 @@ class ManagerSyncPowerStatesTestCase(mgr_utils.CommonMixIn,
shared=True)
sync_mock.assert_called_once_with(task, mock.ANY)
+ def test_single_node_adopt_failed(self, get_nodeinfo_mock,
+ mapped_mock, acquire_mock, sync_mock):
+ get_nodeinfo_mock.return_value = self._get_nodeinfo_list_response()
+ mapped_mock.return_value = True
+ task = self._create_task(
+ node_attrs=dict(uuid=self.node.uuid,
+ provision_state=states.ADOPTFAIL))
+ acquire_mock.side_effect = self._get_acquire_side_effect(task)
+
+ self.service._sync_power_states(self.context)
+
+ get_nodeinfo_mock.assert_called_once_with(
+ columns=self.columns, filters=self.filters)
+ mapped_mock.assert_called_once_with(self.service,
+ self.node.uuid,
+ self.node.driver,
+ self.node.conductor_group)
+ acquire_mock.assert_called_once_with(self.context, self.node.uuid,
+ purpose=mock.ANY,
+ shared=True)
+ sync_mock.assert_not_called()
+
def test__sync_power_state_multiple_nodes(self, get_nodeinfo_mock,
mapped_mock, acquire_mock,
sync_mock):
diff --git a/releasenotes/notes/skip-power-sync-for-adoptfail-d2498f1a2e997ed7.yaml b/releasenotes/notes/skip-power-sync-for-adoptfail-d2498f1a2e997ed7.yaml
new file mode 100644
index 000000000..2bff91797
--- /dev/null
+++ b/releasenotes/notes/skip-power-sync-for-adoptfail-d2498f1a2e997ed7.yaml
@@ -0,0 +1,5 @@
+---
+fixes:
+ - |
+ Fixes the conductor so the power sync operations are not asserted for
+ nodes in the ``adopt failed`` state.