Placement api: set custom json_error_formatter in aggregate and usage

Change decorator for resource based actions in aggreagate and usage
handlers to wsgi_wrapper.PlacementWsgify

This is a newly introduced wrapper class around webob.dec.wsgify
to set json formatter in case of webob exceptions.

Change-Id: I44ab22befad347b23ddb8d93d840ba594b988ce3
Partial-Bug: #1635182
This commit is contained in:
Pushkar Umaranikar 2017-02-13 18:34:10 +00:00
parent 9a44d56f65
commit 9923c1570b
5 changed files with 30 additions and 6 deletions

View File

@ -13,10 +13,10 @@
from oslo_serialization import jsonutils
from oslo_utils import encodeutils
import webob
from nova.api.openstack.placement import microversion
from nova.api.openstack.placement import util
from nova.api.openstack.placement import wsgi_wrapper
from nova import objects
@ -42,7 +42,7 @@ def _serialize_aggregates(aggregate_uuids):
return {'aggregates': aggregate_uuids}
@webob.dec.wsgify
@wsgi_wrapper.PlacementWsgify
@util.check_accept('application/json')
def get_aggregates(req):
"""GET a list of aggregates associated with a resource provider.
@ -62,7 +62,7 @@ def get_aggregates(req):
return _send_aggregates(req.response, aggregate_uuids)
@webob.dec.wsgify
@wsgi_wrapper.PlacementWsgify
@util.require_content('application/json')
def set_aggregates(req):
microversion.raise_404_if_not_version(req, (1, 1))

View File

@ -16,6 +16,7 @@ from oslo_utils import encodeutils
import webob
from nova.api.openstack.placement import util
from nova.api.openstack.placement import wsgi_wrapper
from nova import exception
from nova.i18n import _
from nova import objects
@ -28,7 +29,7 @@ def _serialize_usages(resource_provider, usage):
'usages': usage_dict}
@webob.dec.wsgify
@wsgi_wrapper.PlacementWsgify
@util.check_accept('application/json')
def list_usages(req):
"""GET a dictionary of resource provider usage by resource class.
@ -52,8 +53,7 @@ def list_usages(req):
except exception.NotFound as exc:
raise webob.exc.HTTPNotFound(
_("No resource provider with uuid %(uuid)s found: %(error)s") %
{'uuid': uuid, 'error': exc},
json_formatter=util.json_error_formatter)
{'uuid': uuid, 'error': exc})
usage = objects.UsageList.get_all_by_resource_provider_uuid(
context, uuid)

View File

@ -5,6 +5,7 @@ fixtures:
defaults:
request_headers:
x-auth-token: admin
accept: application/json
content-type: application/json
openstack-api-version: placement latest
@ -16,11 +17,15 @@ tests:
- name: get aggregates for bad resource provider
GET: /resource_providers/6984bb2d-830d-4c8d-ac64-c5a8103664be/aggregates
status: 404
response_json_paths:
$.errors[0].title: Not Found
- name: put aggregates for bad resource provider
PUT: /resource_providers/6984bb2d-830d-4c8d-ac64-c5a8103664be/aggregates
data: []
status: 404
response_json_paths:
$.errors[0].title: Not Found
- name: post new resource provider
POST: /resource_providers
@ -41,12 +46,16 @@ tests:
request_headers:
openstack-api-version: placement 1.0
status: 404
response_json_paths:
$.errors[0].title: Not Found
- name: aggregates 404 for out of date microversion put
PUT: /resource_providers/$ENVIRON['RP_UUID']/aggregates
request_headers:
openstack-api-version: placement 1.0
status: 404
response_json_paths:
$.errors[0].title: Not Found
- name: put some aggregates
PUT: $LAST_URL
@ -83,6 +92,8 @@ tests:
status: 400
response_strings:
- Malformed JSON
response_json_paths:
$.errors[0].title: Bad Request
- name: put invalid json not array
PUT: $LAST_URL
@ -93,6 +104,8 @@ tests:
status: 400
response_strings:
- JSON does not validate
response_json_paths:
$.errors[0].title: Bad Request
- name: put invalid json not uuids
PUT: $LAST_URL
@ -102,3 +115,5 @@ tests:
status: 400
response_strings:
- JSON does not validate
response_json_paths:
$.errors[0].title: Bad Request

View File

@ -52,6 +52,8 @@ tests:
status: 400
response_strings:
- 'Invalid uuid value: not a uuid'
response_json_paths:
$.errors[0].title: Bad Request
- name: associate an aggregate with rp2
PUT: /resource_providers/5202c48f-c960-4eec-bde3-89c4f22a17b9/aggregates
@ -98,9 +100,13 @@ tests:
status: 400
response_strings:
- 'Invalid query string parameters'
response_json_paths:
$.errors[0].title: Bad Request
- name: error on bogus query parameter
GET: '/resource_providers?assoc_with_aggregate=in:83a3d69d-8920-48e2-8914-cadfd8fa2f91,99652f11-9f77-46b9-80b7-4b1989be9f8c'
status: 400
response_strings:
- 'Invalid query string parameters'
response_json_paths:
$.errors[0].title: Bad Request

View File

@ -5,6 +5,7 @@ fixtures:
defaults:
request_headers:
accept: application/json
x-auth-token: admin
tests:
@ -14,6 +15,8 @@ tests:
status: 404
response_strings:
- No resource provider with uuid fae14fa3-4b43-498c-a33c-4a1d00edb577 found
response_json_paths:
$.errors[0].title: Not Found
- name: create provider
POST: /resource_providers