baremetal node: 'error' is a failed state

For baremetal.wait_for_provision_state(), if abort_on_failed_state
is True, we need to abort if the node goes into the 'error'
provision state (which happens if a failure occurs while trying
to delete the BM node).

Change-Id: I6f628787dcf458ff9149dbb3502e7beeded70d9e
Story: #2006860
This commit is contained in:
Ruby Loo 2019-11-15 22:00:26 +00:00
parent 733ea50f24
commit 3c6dae3a65
2 changed files with 14 additions and 1 deletions

View File

@ -487,7 +487,8 @@ class Node(_common.ListMixin, resource.Resource):
elif not abort_on_failed_state:
return False
if self.provision_state.endswith(' failed'):
if (self.provision_state.endswith(' failed') or
self.provision_state == 'error'):
raise exceptions.ResourceFailure(
"Node %(node)s reached failure state \"%(state)s\"; "
"the last error is %(error)s" %

View File

@ -183,6 +183,18 @@ class TestNodeWaitForProvisionState(base.TestCase):
self.node.wait_for_provision_state,
self.session, 'manageable')
def test_failure_error(self, mock_fetch):
def _get_side_effect(_self, session):
self.node.provision_state = 'error'
self.assertIs(session, self.session)
mock_fetch.side_effect = _get_side_effect
self.assertRaisesRegex(exceptions.ResourceFailure,
'failure state "error"',
self.node.wait_for_provision_state,
self.session, 'manageable')
def test_enroll_as_failure(self, mock_fetch):
def _get_side_effect(_self, session):
self.node.provision_state = 'enroll'