summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Tantsur <divius.inside@gmail.com>2018-05-24 13:55:24 +0200
committerDmitry Tantsur <divius.inside@gmail.com>2018-06-05 13:24:57 +0000
commitde77496644fd1f12d829717a51b0d565a4c82283 (patch)
treed9fb6321a3c73f5957a4456a3e1901c481155dbb
parente944146e86aa4a796a4fe7caf6e5a702906b6268 (diff)
downloadpython-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.py4
-rw-r--r--ironicclient/v1/node.py2
-rw-r--r--releasenotes/notes/wait-for-prov-last-error-5f49b1c488879775.yaml8
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>`_.