Include error message from server if one exists
Nova includes bodies in error responses that look like this:
{
"badRequest": {
"message": "Invalid input for field/attribute fixed_address.",
"code": 400
}
}
I recently had to look at HTTP debug logs to figure out a bug. Let's
include that data in our exceptions already.
Change-Id: I4b4b4702d772739b8f930ff6a3c1ad83987fed17
This commit is contained in:
44
shade/exc.py
44
shade/exc.py
@@ -96,27 +96,33 @@ def raise_from_response(response, error_message=None):
|
|||||||
elif 500 <= response.status_code < 600:
|
elif 500 <= response.status_code < 600:
|
||||||
source = "Server"
|
source = "Server"
|
||||||
else:
|
else:
|
||||||
source = None
|
return
|
||||||
|
|
||||||
if response.reason:
|
remote_error = "Error for url: {url}".format(url=response.url)
|
||||||
remote_error = "Error: {reason} for {url}".format(
|
try:
|
||||||
reason=response.reason,
|
details = response.json()
|
||||||
url=response.url)
|
# Nova returns documents that look like
|
||||||
|
# {statusname: 'message': message, 'code': code}
|
||||||
|
if len(details.keys()) == 1:
|
||||||
|
detail_key = details.keys()[0]
|
||||||
|
detail_message = details[detail_key].get('message')
|
||||||
|
if detail_message:
|
||||||
|
remote_error += " {message}".format(message=detail_message)
|
||||||
|
except ValueError:
|
||||||
|
if response.reason:
|
||||||
|
remote_error += " {reason}".format(reason=response.reason)
|
||||||
|
|
||||||
|
if error_message:
|
||||||
|
msg = '{error_message}. ({code}) {source} {remote_error}'.format(
|
||||||
|
error_message=error_message,
|
||||||
|
source=source,
|
||||||
|
code=response.status_code,
|
||||||
|
remote_error=remote_error)
|
||||||
else:
|
else:
|
||||||
remote_error = "Error for url: {url}".format(url=response.url)
|
msg = '({code}) {source} {remote_error}'.format(
|
||||||
|
code=response.status_code,
|
||||||
if source:
|
source=source,
|
||||||
if error_message:
|
remote_error=remote_error)
|
||||||
msg = '{error_message}. ({code}) {source} {remote_error}'.format(
|
|
||||||
error_message=error_message,
|
|
||||||
source=source,
|
|
||||||
code=response.status_code,
|
|
||||||
remote_error=remote_error)
|
|
||||||
else:
|
|
||||||
msg = '({code}) {source} {remote_error}'.format(
|
|
||||||
code=response.status_code,
|
|
||||||
source=source,
|
|
||||||
remote_error=remote_error)
|
|
||||||
|
|
||||||
# Special case 404 since we raised a specific one for neutron exceptions
|
# Special case 404 since we raised a specific one for neutron exceptions
|
||||||
# before
|
# before
|
||||||
|
|||||||
Reference in New Issue
Block a user