[keystone][placement][neutron][api-sig] http404 to NotFound, or how should a http json error body look like?

Lajos Katona lajos.katona at ericsson.com
Fri May 17 10:48:32 UTC 2019


Hi,

Recently I planned to add tests to the neutron feature routed provider 
networks, which actually uses placement API to make possible the 
scheduling based on neutron segment information.
I realized that the feature last worked on Queens. We can discuss 
separately the lack of test coverage, and similar things, but I would 
like to narrow or view now.
The neutron bug report, with some background information: 
https://bugs.launchpad.net/neutron/+bug/1828543

After some debugging I realized that the problem comes from the fact 
that at a point neutron uses the information received in http404, like this:
try:
     return self._get(url).json()
except keystoneauth1.exceptions.NotFound as e:
     if 'foo' in e.details:
         do_something()
see: 
https://opendev.org/openstack/neutron-lib/src/branch/master/neutron_lib/placement/client.py#L405-L406

keystoneauth1 expects the http body in case of for example http404 to be 
something like this (python dict comes now):
body= {'error': {'message': 'Foooooo', 'details': 'Baaaaar'}}
see: 
https://opendev.org/openstack/keystoneauth/src/branch/master/keystoneauth1/exceptions/http.py#L406-L415

But placement started to adopt one suggestion from the API-SIG:
http://specs.openstack.org/openstack/api-wg/guidelines/errors.html,

and that is something like this (again python):
body={'errors': [{'status': 404, 'title': 'Not Found', 'detail': 'The 
resource could not be found.... ', 'request_id': '...'}]}

Shall I ask for help how I should make this bug in neutron fixed?
As a quick and dirty solution in neutron I can use the response from the 
exception, but I feel that there should be a better way to fix this:-)

Thanks in advance for the help

Regards
LAjos




More information about the openstack-discuss mailing list