Handle 500 errors coming from nova

We do not want to return the nova error 500 messages to the users but
rather build our own message, so that a bug is filled to us.

Change-Id: Iaeae2affdb60f22df64fd1929e3bd8c18ac3e64c
Closes-bug: #1624233
This commit is contained in:
Alvaro Lopez Garcia 2016-09-19 12:24:28 +02:00
parent c83d3efe8b
commit f9fd5481e3
2 changed files with 35 additions and 11 deletions

View File

@ -88,16 +88,26 @@ def exception_from_response(response):
501: webob.exc.HTTPNotImplemented,
503: webob.exc.HTTPServiceUnavailable,
}
message = ('Unexpected API Error. Please report this at '
'http://bugs.launchpad.net/ooi/ and attach the ooi '
'API log if possible.')
code = response.status_int
exc = exceptions.get(code, webob.exc.HTTPInternalServerError)
try:
message = response.json_body.popitem()[1].get("message")
exc = exc(explanation=message)
except Exception:
LOG.exception("Unknown error happenened processing response %s"
% response)
return webob.exc.HTTPInternalServerError()
return exc
if code in exceptions:
try:
message = response.json_body.popitem()[1].get("message")
except Exception:
LOG.exception("Unknown error happenened processing response %s"
% response)
exc = webob.exc.HTTPInternalServerError
else:
LOG.error("Nova returned an internal server error %s"
% response)
return exc(explanation=message)
class BaseHelper(object):

View File

@ -114,9 +114,6 @@ class TestExceptionHelper(base.TestCase):
429: webob.exc.HTTPTooManyRequests,
501: webob.exc.HTTPNotImplemented,
503: webob.exc.HTTPServiceUnavailable,
# Any other thing should be a 500
500: webob.exc.HTTPInternalServerError,
507: webob.exc.HTTPInternalServerError,
}
for code, exception in six.iteritems(code_and_exception):
@ -126,6 +123,23 @@ class TestExceptionHelper(base.TestCase):
self.assertIsInstance(ret, exception)
self.assertEqual(fault["computeFault"]["message"], ret.explanation)
def test_unexpected_exception(self):
code_and_exception = {
500: webob.exc.HTTPInternalServerError,
# Any other thing should be a 500
507: webob.exc.HTTPInternalServerError,
}
message = ("Unexpected API Error. Please report this at "
"http://bugs.launchpad.net/ooi/ and attach the "
"ooi API log if possible.")
for code, exception in six.iteritems(code_and_exception):
fault = self.get_fault(code)
resp = fakes.create_fake_json_resp(fault, code)
ret = helpers.exception_from_response(resp)
self.assertIsInstance(ret, exception)
self.assertEqual(message, ret.explanation)
def test_error_handling_exception(self):
fault = {}
resp = fakes.create_fake_json_resp(fault, 404)