Expose status codes of related errors in ManagerError
Change-Id: I5bad12d82802cc2970b84bc769c89d948c48a791
This commit is contained in:
@@ -259,7 +259,8 @@ class NsxV3RESTClientTestCase(nsxlib_testcase.NsxClientTestCase):
|
|||||||
'error_message': 'bad',
|
'error_message': 'bad',
|
||||||
'related_errors': [{
|
'related_errors': [{
|
||||||
'error_message': 'bla',
|
'error_message': 'bla',
|
||||||
'error_code': 'code'}]})
|
'error_code': 'code',
|
||||||
|
'httpStatus': 'BAD_REQUEST'}]})
|
||||||
response = mocks.MockRequestsResponse(
|
response = mocks.MockRequestsResponse(
|
||||||
status_code, content)
|
status_code, content)
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ def get_http_error_details(response):
|
|||||||
msg = response.json() if response.content else ''
|
msg = response.json() if response.content else ''
|
||||||
error_code = None
|
error_code = None
|
||||||
related_error_codes = []
|
related_error_codes = []
|
||||||
|
related_status_codes = []
|
||||||
|
|
||||||
if isinstance(msg, dict) and 'error_message' in msg:
|
if isinstance(msg, dict) and 'error_message' in msg:
|
||||||
error_code = msg.get('error_code')
|
error_code = msg.get('error_code')
|
||||||
@@ -42,6 +43,10 @@ def get_http_error_details(response):
|
|||||||
related_error_codes = [str(error['error_code']) for error in
|
related_error_codes = [str(error['error_code']) for error in
|
||||||
msg.get('related_errors', []) if
|
msg.get('related_errors', []) if
|
||||||
error.get('error_code')]
|
error.get('error_code')]
|
||||||
|
related_status_codes = [getattr(requests.codes, error['httpStatus'])
|
||||||
|
for error in msg.get('related_errors', []) if
|
||||||
|
error.get('httpStatus')]
|
||||||
|
|
||||||
msg = msg['error_message']
|
msg = msg['error_message']
|
||||||
if related_errors:
|
if related_errors:
|
||||||
msg += " relatedErrors: %s" % ' '.join(related_errors)
|
msg += " relatedErrors: %s" % ' '.join(related_errors)
|
||||||
@@ -49,6 +54,7 @@ def get_http_error_details(response):
|
|||||||
return {'status_code': response.status_code,
|
return {'status_code': response.status_code,
|
||||||
'error_code': error_code,
|
'error_code': error_code,
|
||||||
'related_error_codes': related_error_codes,
|
'related_error_codes': related_error_codes,
|
||||||
|
'related_status_codes': related_status_codes,
|
||||||
'details': msg}
|
'details': msg}
|
||||||
|
|
||||||
|
|
||||||
@@ -193,12 +199,14 @@ class RESTClient(object):
|
|||||||
return self._rest_call(url, method='PATCH', body=body, headers=headers)
|
return self._rest_call(url, method='PATCH', body=body, headers=headers)
|
||||||
|
|
||||||
def _raise_error(self, operation, status_code, details,
|
def _raise_error(self, operation, status_code, details,
|
||||||
error_code=None, related_error_codes=None):
|
error_code=None, related_error_codes=None,
|
||||||
|
related_status_codes=None):
|
||||||
error = http_error_to_exception(status_code, error_code)
|
error = http_error_to_exception(status_code, error_code)
|
||||||
raise error(manager='', operation=operation, details=details,
|
raise error(manager='', operation=operation, details=details,
|
||||||
error_code=error_code,
|
error_code=error_code,
|
||||||
related_error_codes=related_error_codes,
|
related_error_codes=related_error_codes,
|
||||||
status_code=status_code)
|
status_code=status_code,
|
||||||
|
related_status_codes=related_status_codes)
|
||||||
|
|
||||||
def _validate_result(self, result, expected, operation, silent=False):
|
def _validate_result(self, result, expected, operation, silent=False):
|
||||||
if result.status_code not in expected:
|
if result.status_code not in expected:
|
||||||
@@ -350,7 +358,8 @@ class NSX3Client(JSONRESTClient):
|
|||||||
client_obj=client_obj)
|
client_obj=client_obj)
|
||||||
|
|
||||||
def _raise_error(self, operation, status_code, details,
|
def _raise_error(self, operation, status_code, details,
|
||||||
error_code=None, related_error_codes=None):
|
error_code=None, related_error_codes=None,
|
||||||
|
related_status_codes=None):
|
||||||
"""Override the Rest client errors to add the manager IPs"""
|
"""Override the Rest client errors to add the manager IPs"""
|
||||||
error = http_error_to_exception(status_code, error_code)
|
error = http_error_to_exception(status_code, error_code)
|
||||||
raise error(manager=self.nsx_api_managers,
|
raise error(manager=self.nsx_api_managers,
|
||||||
@@ -358,6 +367,7 @@ class NSX3Client(JSONRESTClient):
|
|||||||
details=details,
|
details=details,
|
||||||
error_code=error_code,
|
error_code=error_code,
|
||||||
related_error_codes=related_error_codes,
|
related_error_codes=related_error_codes,
|
||||||
|
related_status_codes=related_status_codes,
|
||||||
status_code=status_code)
|
status_code=status_code)
|
||||||
|
|
||||||
def _rest_call(self, url, **kwargs):
|
def _rest_call(self, url, **kwargs):
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ class ManagerError(NsxLibException):
|
|||||||
message = _("Unexpected error from backend manager (%(manager)s) "
|
message = _("Unexpected error from backend manager (%(manager)s) "
|
||||||
"for %(operation)s%(details)s")
|
"for %(operation)s%(details)s")
|
||||||
related_error_codes = []
|
related_error_codes = []
|
||||||
|
related_status_codes = []
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
details = kwargs.get('details', '')
|
details = kwargs.get('details', '')
|
||||||
@@ -82,6 +83,7 @@ class ManagerError(NsxLibException):
|
|||||||
self.error_code = kwargs.get('error_code')
|
self.error_code = kwargs.get('error_code')
|
||||||
self.related_error_codes = kwargs.get('related_error_codes', [])
|
self.related_error_codes = kwargs.get('related_error_codes', [])
|
||||||
self.status_code = kwargs.get('status_code')
|
self.status_code = kwargs.get('status_code')
|
||||||
|
self.related_status_codes = kwargs.get('related_status_codes', [])
|
||||||
|
|
||||||
|
|
||||||
class ResourceNotFound(ManagerError):
|
class ResourceNotFound(ManagerError):
|
||||||
|
|||||||
Reference in New Issue
Block a user