diff options
author | Dmitry Tantsur <divius.inside@gmail.com> | 2018-05-24 13:55:24 +0200 |
---|---|---|
committer | Dmitry Tantsur <divius.inside@gmail.com> | 2018-06-05 13:24:57 +0000 |
commit | de77496644fd1f12d829717a51b0d565a4c82283 (patch) | |
tree | d9fb6321a3c73f5957a4456a3e1901c481155dbb | |
parent | e944146e86aa4a796a4fe7caf6e5a702906b6268 (diff) | |
download | python-ironicclient-de77496644fd1f12d829717a51b0d565a4c82283.tar.gz |
Do not abort wait_for_provision_state of last_errors becomes non-empty2.2.1
It can happen if one of heartbeats encounteres "node locked" error, which
is normal, because the next heartbeat will succeed.
Change-Id: Iaed9b83e199761eac4e0e2157c16ea1efa564c24
Story: #2002094
Task: #19772
(cherry picked from commit 8940d72521ea69cbb63cd813baa720c65f70b86f)
-rw-r--r-- | ironicclient/tests/unit/v1/test_node.py | 4 | ||||
-rw-r--r-- | ironicclient/v1/node.py | 2 | ||||
-rw-r--r-- | releasenotes/notes/wait-for-prov-last-error-5f49b1c488879775.yaml | 8 |
3 files changed, 12 insertions, 2 deletions
diff --git a/ironicclient/tests/unit/v1/test_node.py b/ironicclient/tests/unit/v1/test_node.py index 7fde845..73b9780 100644 --- a/ironicclient/tests/unit/v1/test_node.py +++ b/ironicclient/tests/unit/v1/test_node.py @@ -1567,7 +1567,9 @@ class NodeManagerTest(testtools.TestCase): def test_wait_for_provision_state(self, mock_get, mock_sleep): mock_get.side_effect = [ self._fake_node_for_wait('deploying', target='active'), - self._fake_node_for_wait('deploying', target='active'), + # Sometimes non-fatal errors can be recorded in last_error + self._fake_node_for_wait('deploying', target='active', + error='Node locked'), self._fake_node_for_wait('active') ] diff --git a/ironicclient/v1/node.py b/ironicclient/v1/node.py index b8571ab..dcc0eca 100644 --- a/ironicclient/v1/node.py +++ b/ironicclient/v1/node.py @@ -647,7 +647,7 @@ class NodeManager(base.CreateManager): return # Note that if expected_state == 'error' we still succeed - if (node.last_error or node.provision_state == 'error' or + if (node.provision_state == 'error' or node.provision_state.endswith(' failed')): raise exc.StateTransitionFailed( _('Node %(node)s failed to reach state %(state)s. ' diff --git a/releasenotes/notes/wait-for-prov-last-error-5f49b1c488879775.yaml b/releasenotes/notes/wait-for-prov-last-error-5f49b1c488879775.yaml new file mode 100644 index 0000000..1db8477 --- /dev/null +++ b/releasenotes/notes/wait-for-prov-last-error-5f49b1c488879775.yaml @@ -0,0 +1,8 @@ +--- +fixes: + - | + Waiting for a provision state to be reached (via CLI ``--wait`` argument or + the ``wait_for_provision_state`` function) no longer aborts when the node's + ``last_error`` field gets populated. It can cause a normal deployment to + abort if a heartbeat from the ramdisk fails because of locking - see + `story 2002094 <https://storyboard.openstack.org/#!/story/2002094>`_. |