Merge "Add microversion headers to root ('/') endpoint"

This commit is contained in:
Zuul 2024-09-18 16:59:19 +00:00 committed by Gerrit Code Review
commit 4ca6a3b573
4 changed files with 30 additions and 4 deletions

View File

@ -38,6 +38,7 @@ class RootController(object):
@method.expose() @method.expose()
def index(self, *args): def index(self, *args):
V1.add_version_attributes()
if args: if args:
pecan.abort(404) pecan.abort(404)
return root() return root()
@ -49,6 +50,7 @@ class RootController(object):
It redirects the request to the default version of the ironic API It redirects the request to the default version of the ironic API
if the version number is not specified in the url. if the version number is not specified in the url.
""" """
V1.add_version_attributes()
# support paths which are missing the first version element # support paths which are missing the first version element
if primary_key and primary_key != version.ID_VERSION1: if primary_key and primary_key != version.ID_VERSION1:

View File

@ -141,8 +141,7 @@ class Controller(object):
# NOTE: The reason why v1() it's being called for every # NOTE: The reason why v1() it's being called for every
# request is because we need to get the host url from # request is because we need to get the host url from
# the request object to make the links. # the request object to make the links.
self._add_version_attributes() if api.request.method not in ('GET', 'HEAD'):
if api.request.method != "GET":
pecan.abort(http_client.METHOD_NOT_ALLOWED) pecan.abort(http_client.METHOD_NOT_ALLOWED)
return v1() return v1()
@ -169,7 +168,7 @@ class Controller(object):
'max': versions.max_version_string()}, 'max': versions.max_version_string()},
headers=headers) headers=headers)
def _add_version_attributes(self): def add_version_attributes(self):
v = base.Version(api.request.headers, versions.min_version_string(), v = base.Version(api.request.headers, versions.min_version_string(),
versions.max_version_string()) versions.max_version_string())
@ -186,7 +185,6 @@ class Controller(object):
@pecan.expose() @pecan.expose()
def _lookup(self, primary_key, *remainder): def _lookup(self, primary_key, *remainder):
self._add_version_attributes()
controller = self._subcontroller_map.get(primary_key) controller = self._subcontroller_map.get(primary_key)
if not controller: if not controller:

View File

@ -29,6 +29,28 @@ class TestV1Routing(api_base.BaseApiTest):
mock.ANY, mock.ANY,
mock.ANY) mock.ANY)
def test_microversion_headers(self):
# Check root endpoint
response = self.app.head('/')
self.assertEqual(200, response.status_int)
self.assertIn('X-OpenStack-Ironic-API-Minimum-Version',
response.headers)
self.assertIn('X-OpenStack-Ironic-API-Maximum-Version',
response.headers)
self._check_version.reset_mock()
# Check v1 endpoint
response = self.app.head('/v1')
self.assertEqual(200, response.status_int)
self.assertIn('X-OpenStack-Ironic-API-Minimum-Version',
response.headers)
self.assertIn('X-OpenStack-Ironic-API-Maximum-Version',
response.headers)
# -check_version should be called only once
self.assertEqual(1, self._check_version.call_count)
def test_min_version(self): def test_min_version(self):
response = self.get_json( response = self.get_json(
'/', '/',

View File

@ -0,0 +1,4 @@
---
fixes:
- |
Adds microversion headers to the root ('/') endpoint.