diff --git a/openstack/baremetal/v1/node.py b/openstack/baremetal/v1/node.py index 9b81937b6..df94a122e 100644 --- a/openstack/baremetal/v1/node.py +++ b/openstack/baremetal/v1/node.py @@ -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" % diff --git a/openstack/tests/unit/baremetal/v1/test_node.py b/openstack/tests/unit/baremetal/v1/test_node.py index 234a7b25d..ad69992d5 100644 --- a/openstack/tests/unit/baremetal/v1/test_node.py +++ b/openstack/tests/unit/baremetal/v1/test_node.py @@ -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'