Expose placement exception code to end users

Attempting to create an existing host already in DB resulted in a 409
Conflict response status code in the Rocky release. However, on the
current master, using the placement API support has changed it to return
a 500 Internal Server Error.

This patch changes it back to 409 by bubbling up the exception code
occured in the placement resource provider creation.

Change-Id: I5c02a8fe9a83adf83358062fcc5470e38e643550
Closes-Bug: #1812642
This commit is contained in:
Tetsuro Nakamura 2019-01-22 20:39:53 +00:00 committed by Pierre Riteau
parent 8192ac8f06
commit 2bd5b65118
3 changed files with 19 additions and 0 deletions

View File

@ -26,6 +26,7 @@ from blazar.db import exceptions as db_exceptions
from blazar import exceptions as ex
from blazar.i18n import _
from blazar.manager import exceptions as manager_exceptions
from blazar.utils.openstack import exceptions as opst_exceptions
LOG = logging.getLogger(__name__)
@ -88,6 +89,8 @@ class Rest(flask.Blueprint):
# Get the exception from manager and common exceptions
cls = getattr(manager_exceptions, e.exc_type,
getattr(ex, e.exc_type, None))
cls = cls or getattr(opst_exceptions, e.exc_type,
getattr(ex, e.exc_type, None))
if cls is not None:
return render_error_message(cls.code, e.value,
cls.code)

View File

@ -23,6 +23,11 @@ class ResourceProviderCreationFailed(exceptions.BlazarException):
msg_fmt = _("Failed to create resource provider %(name)s")
class ResourceProviderCreationConflict(exceptions.BlazarException):
code = 409
msg_fmt = _("Conflict on creating resource provider %(name)s ")
class ResourceProviderDeletionFailed(exceptions.BlazarException):
msg_fmt = _("Failed to delete resource provider %(uuid)s")

View File

@ -148,6 +148,17 @@ class BlazarPlacementClient(object):
LOG.info(msg, args)
return resp.json()
if resp.status_code == 409:
msg = ("Conflict on creating resource provider %(name)s in "
"placement API. Got %(status_code)d: %(err_text)s.")
args = {
'name': rp_name,
'status_code': resp.status_code,
'err_text': resp.text,
}
LOG.error(msg, args)
raise exceptions.ResourceProviderCreationConflict(name=rp_name)
msg = ("Failed to create resource provider record in placement API "
"for resource provider %(name)s. "
"Got %(status_code)d: %(err_text)s.")