Change microversion header name
Ironic has already implemented its own microversion mechanism, and the header name is X-Ironic-API-Version, not X-Baremetal-API-Version. Because Ida9f60d8cbd0dcf48669b82e619fc4016ee0bcb7 removed program terminology from the governance repo. The microversions of Nova is not used yet. And for consistency of whole OpenStack projects, this patch changes microversion header names on Nova side. Partially implements blueprint api-microversions Change-Id: I3ea2b2982c5f792c82832d772ae951b157da8b39 Depends-on: I1b43e2662107ad81e57b96f0c9430c61b795fdea
This commit is contained in:
@@ -9,7 +9,7 @@ to the API while preserving backward compatibility. The basic idea is
|
||||
that a user has to explicitly ask for their request to be treated with
|
||||
a particular version of the API. So breaking changes can be added to
|
||||
the API without breaking users who don't specifically ask for it. This
|
||||
is done with an HTTP header ``X-OpenStack-Compute-API-Version`` which
|
||||
is done with an HTTP header ``X-OpenStack-Nova-API-Version`` which
|
||||
is a monotonically increasing semantic version number starting from
|
||||
``2.1``.
|
||||
|
||||
@@ -43,7 +43,7 @@ In the controller class::
|
||||
....
|
||||
|
||||
This method would only be available if the caller had specified an
|
||||
``X-OpenStack-Compute-API-Version`` of >= ``2.4``. If they had specified a
|
||||
``X-OpenStack-Nova-API-Version`` of >= ``2.4``. If they had specified a
|
||||
lower version (or not specified it and received the default of ``2.1``)
|
||||
the server would respond with ``HTTP/404``.
|
||||
|
||||
@@ -57,7 +57,7 @@ In the controller class::
|
||||
....
|
||||
|
||||
This method would only be available if the caller had specified an
|
||||
``X-OpenStack-Compute-API-Version`` of <= ``2.4``. If ``2.5`` or later
|
||||
``X-OpenStack-Nova-API-Version`` of <= ``2.4``. If ``2.5`` or later
|
||||
is specified the server will respond with ``HTTP/404``.
|
||||
|
||||
Changing a method's behaviour
|
||||
@@ -140,11 +140,11 @@ Testing Microversioned API Methods
|
||||
----------------------------------
|
||||
|
||||
Testing a microversioned API method is very similar to a normal controller
|
||||
method test, you just need to add the ``X-OpenStack-Compute-API-Version``
|
||||
method test, you just need to add the ``X-OpenStack-Nova-API-Version``
|
||||
header, for example::
|
||||
|
||||
req = fakes.HTTPRequest.blank('/testable/url/endpoint')
|
||||
req.headers = {'X-OpenStack-Compute-API-Version': '2.2'}
|
||||
req.headers = {'X-OpenStack-Nova-API-Version': '2.2'}
|
||||
req.api_version_request = api_version.APIVersionRequest('2.6')
|
||||
|
||||
controller = controller.TestableController()
|
||||
|
||||
@@ -14,7 +14,7 @@ user documentation.
|
||||
|
||||
A user can specify a header in the API request:
|
||||
|
||||
X-OpenStack-Compute-API-Version: <version>
|
||||
X-OpenStack-Nova-API-Version: <version>
|
||||
|
||||
where <version> is any valid api version for this API.
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ VER_METHOD_ATTR = 'versioned_methods'
|
||||
|
||||
# Name of header used by clients to request a specific version
|
||||
# of the REST API
|
||||
API_VERSION_REQUEST_HEADER = 'X-OpenStack-Compute-API-Version'
|
||||
API_VERSION_REQUEST_HEADER = 'X-OpenStack-Nova-API-Version'
|
||||
|
||||
|
||||
def get_supported_content_types():
|
||||
|
||||
@@ -284,7 +284,7 @@ class ApiSampleTestBase(integrated_helpers._IntegratedTestBase):
|
||||
headers['Content-Type'] = 'application/' + self.ctype
|
||||
headers['Accept'] = 'application/' + self.ctype
|
||||
if api_version:
|
||||
headers['X-OpenStack-Compute-API-Version'] = api_version
|
||||
headers['X-OpenStack-Nova-API-Version'] = api_version
|
||||
return self.api.api_request(url, body=body, method=method,
|
||||
headers=headers, strip_version=strip_version)
|
||||
|
||||
|
||||
@@ -25,6 +25,8 @@ CONF = cfg.CONF
|
||||
|
||||
class MicroversionsTest(test.NoDBTestCase):
|
||||
|
||||
header_name = 'X-OpenStack-Nova-API-Version'
|
||||
|
||||
@mock.patch("nova.api.openstack.APIRouterV21.api_extension_namespace",
|
||||
return_value='nova.api.v3.test_extensions')
|
||||
def test_microversions_no_header(self, mock_namespace):
|
||||
@@ -44,9 +46,8 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
self.assertEqual(200, res.status_int)
|
||||
resp_json = jsonutils.loads(res.body)
|
||||
self.assertEqual('val', resp_json['param'])
|
||||
self.assertEqual("2.1", res.headers['X-OpenStack-Compute-API-Version'])
|
||||
self.assertEqual("X-OpenStack-Compute-API-Version",
|
||||
res.headers['Vary'])
|
||||
self.assertEqual("2.1", res.headers[self.header_name])
|
||||
self.assertEqual(self.header_name, res.headers['Vary'])
|
||||
|
||||
@mock.patch("nova.api.openstack.api_version_request.max_api_version")
|
||||
@mock.patch("nova.api.openstack.APIRouterV21.api_extension_namespace",
|
||||
@@ -57,14 +58,13 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
|
||||
app = fakes.wsgi_app_v21(init_only='test-microversions')
|
||||
req = fakes.HTTPRequest.blank('/v2/fake/microversions')
|
||||
req.headers = {'X-OpenStack-Compute-API-Version': '2.3'}
|
||||
req.headers = {self.header_name: '2.3'}
|
||||
res = req.get_response(app)
|
||||
self.assertEqual(200, res.status_int)
|
||||
resp_json = jsonutils.loads(res.body)
|
||||
self.assertEqual('val2', resp_json['param'])
|
||||
self.assertEqual("2.3", res.headers['X-OpenStack-Compute-API-Version'])
|
||||
self.assertEqual("X-OpenStack-Compute-API-Version",
|
||||
res.headers['Vary'])
|
||||
self.assertEqual("2.3", res.headers[self.header_name])
|
||||
self.assertEqual(self.header_name, res.headers['Vary'])
|
||||
|
||||
@mock.patch("nova.api.openstack.api_version_request.max_api_version")
|
||||
@mock.patch("nova.api.openstack.APIRouterV21.api_extension_namespace",
|
||||
@@ -75,12 +75,11 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
|
||||
app = fakes.wsgi_app_v21(init_only='test-microversions')
|
||||
req = fakes.HTTPRequest.blank('/v2/fake/microversions')
|
||||
req.headers = {'X-OpenStack-Compute-API-Version': '3.0'}
|
||||
req.headers = {self.header_name: '3.0'}
|
||||
res = req.get_response(app)
|
||||
self.assertEqual(400, res.status_int)
|
||||
self.assertEqual("3.0", res.headers['X-OpenStack-Compute-API-Version'])
|
||||
self.assertEqual("X-OpenStack-Compute-API-Version",
|
||||
res.headers['Vary'])
|
||||
self.assertEqual("3.0", res.headers[self.header_name])
|
||||
self.assertEqual(self.header_name, res.headers['Vary'])
|
||||
|
||||
@mock.patch("nova.api.openstack.api_version_request.max_api_version")
|
||||
@mock.patch("nova.api.openstack.APIRouterV21.api_extension_namespace",
|
||||
@@ -91,7 +90,7 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
|
||||
app = fakes.wsgi_app_v21(init_only='test-microversions')
|
||||
req = fakes.HTTPRequest.blank(url)
|
||||
req.headers = {'X-OpenStack-Compute-API-Version': req_version}
|
||||
req.headers = {self.header_name: req_version}
|
||||
res = req.get_response(app)
|
||||
self.assertEqual(200, res.status_int)
|
||||
resp_json = jsonutils.loads(res.body)
|
||||
@@ -117,7 +116,7 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
|
||||
app = fakes.wsgi_app_v21(init_only='test-microversions')
|
||||
req = fakes.HTTPRequest.blank('/v2/fake/microversions2')
|
||||
req.headers = {'X-OpenStack-Compute-API-Version': '3.0'}
|
||||
req.headers = {self.header_name: '3.0'}
|
||||
res = req.get_response(app)
|
||||
self.assertEqual(202, res.status_int)
|
||||
resp_json = jsonutils.loads(res.body)
|
||||
@@ -132,7 +131,7 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
|
||||
app = fakes.wsgi_app_v21(init_only='test-microversions')
|
||||
req = fakes.HTTPRequest.blank('/v2/fake/microversions2')
|
||||
req.headers = {'X-OpenStack-Compute-API-Version': '3.2'}
|
||||
req.headers = {self.header_name: '3.2'}
|
||||
res = req.get_response(app)
|
||||
self.assertEqual(404, res.status_int)
|
||||
|
||||
@@ -141,7 +140,7 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
def test_microversions2_version_too_low(self, mock_namespace):
|
||||
app = fakes.wsgi_app_v21(init_only='test-microversions')
|
||||
req = fakes.HTTPRequest.blank('/v2/fake/microversions2')
|
||||
req.headers = {'X-OpenStack-Compute-API-Version': '2.1'}
|
||||
req.headers = {self.header_name: '2.1'}
|
||||
res = req.get_response(app)
|
||||
self.assertEqual(404, res.status_int)
|
||||
|
||||
@@ -154,7 +153,7 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
|
||||
app = fakes.wsgi_app_v21(init_only='test-microversions')
|
||||
req = fakes.HTTPRequest.blank('/v2/fake/microversions2')
|
||||
req.headers = {'X-OpenStack-Compute-API-Version': '3.7'}
|
||||
req.headers = {self.header_name: '3.7'}
|
||||
res = req.get_response(app)
|
||||
self.assertEqual(406, res.status_int)
|
||||
res_json = jsonutils.loads(res.body)
|
||||
@@ -171,7 +170,7 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
app = fakes.wsgi_app_v21(init_only='test-microversions')
|
||||
req = fakes.HTTPRequest.blank('/v2/fake/microversions3')
|
||||
req.method = 'POST'
|
||||
req.headers = {'X-OpenStack-Compute-API-Version': '2.2'}
|
||||
req.headers = {self.header_name: '2.2'}
|
||||
req.environ['CONTENT_TYPE'] = "application/json"
|
||||
req.body = jsonutils.dumps({'dummy': {'val': 'foo'}})
|
||||
|
||||
@@ -179,9 +178,8 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
self.assertEqual(200, res.status_int)
|
||||
resp_json = jsonutils.loads(res.body)
|
||||
self.assertEqual('create_val1', resp_json['param'])
|
||||
self.assertEqual("2.2", res.headers['X-OpenStack-Compute-API-Version'])
|
||||
self.assertEqual("X-OpenStack-Compute-API-Version",
|
||||
res.headers['Vary'])
|
||||
self.assertEqual("2.2", res.headers[self.header_name])
|
||||
self.assertEqual(self.header_name, res.headers['Vary'])
|
||||
|
||||
@mock.patch("nova.api.openstack.api_version_request.max_api_version")
|
||||
@mock.patch("nova.api.openstack.APIRouterV21.api_extension_namespace",
|
||||
@@ -192,7 +190,7 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
app = fakes.wsgi_app_v21(init_only='test-microversions')
|
||||
req = fakes.HTTPRequest.blank('/v2/fake/microversions3')
|
||||
req.method = 'POST'
|
||||
req.headers = {'X-OpenStack-Compute-API-Version': '2.2'}
|
||||
req.headers = {self.header_name: '2.2'}
|
||||
req.environ['CONTENT_TYPE'] = "application/json"
|
||||
req.body = jsonutils.dumps({'dummy': {'invalid_param': 'foo'}})
|
||||
|
||||
@@ -212,7 +210,7 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
app = fakes.wsgi_app_v21(init_only='test-microversions')
|
||||
req = fakes.HTTPRequest.blank('/v2/fake/microversions3/1')
|
||||
req.method = 'PUT'
|
||||
req.headers = {'X-OpenStack-Compute-API-Version': '2.2'}
|
||||
req.headers = {self.header_name: '2.2'}
|
||||
req.body = jsonutils.dumps({'dummy': {'inv_val': 'foo'}})
|
||||
req.environ['CONTENT_TYPE'] = "application/json"
|
||||
|
||||
@@ -220,7 +218,7 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
self.assertEqual(200, res.status_int)
|
||||
resp_json = jsonutils.loads(res.body)
|
||||
self.assertEqual('update_val1', resp_json['param'])
|
||||
self.assertEqual("2.2", res.headers['X-OpenStack-Compute-API-Version'])
|
||||
self.assertEqual("2.2", res.headers[self.header_name])
|
||||
|
||||
@mock.patch("nova.api.openstack.api_version_request.max_api_version")
|
||||
@mock.patch("nova.api.openstack.APIRouterV21.api_extension_namespace",
|
||||
@@ -231,7 +229,7 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
|
||||
app = fakes.wsgi_app_v21(init_only='test-microversions')
|
||||
req = fakes.HTTPRequest.blank('/v2/fake/microversions3/1')
|
||||
req.headers = {'X-OpenStack-Compute-API-Version': '2.10'}
|
||||
req.headers = {self.header_name: '2.10'}
|
||||
req.environ['CONTENT_TYPE'] = "application/json"
|
||||
req.method = 'PUT'
|
||||
req.body = jsonutils.dumps({'dummy': {'val2': 'foo'}})
|
||||
@@ -240,8 +238,7 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
self.assertEqual(200, res.status_int)
|
||||
resp_json = jsonutils.loads(res.body)
|
||||
self.assertEqual('update_val1', resp_json['param'])
|
||||
self.assertEqual("2.10",
|
||||
res.headers['X-OpenStack-Compute-API-Version'])
|
||||
self.assertEqual("2.10", res.headers[self.header_name])
|
||||
|
||||
@mock.patch("nova.api.openstack.api_version_request.max_api_version")
|
||||
@mock.patch("nova.api.openstack.APIRouterV21.api_extension_namespace",
|
||||
@@ -252,7 +249,7 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
mock_maxver.return_value = api_version.APIVersionRequest("2.2")
|
||||
app = fakes.wsgi_app_v21(init_only='test-microversions')
|
||||
req = fakes.HTTPRequest.blank('/v2/fake/microversions4')
|
||||
req.headers = {'X-OpenStack-Compute-API-Version': version}
|
||||
req.headers = {self.header_name: version}
|
||||
req.environ['CONTENT_TYPE'] = "application/json"
|
||||
req.method = 'POST'
|
||||
|
||||
@@ -260,8 +257,7 @@ class MicroversionsTest(test.NoDBTestCase):
|
||||
self.assertEqual(200, res.status_int)
|
||||
resp_json = jsonutils.loads(res.body)
|
||||
self.assertEqual(expected_resp, resp_json['param'])
|
||||
self.assertEqual(version,
|
||||
res.headers['X-OpenStack-Compute-API-Version'])
|
||||
self.assertEqual(version, res.headers[self.header_name])
|
||||
|
||||
def test_microversions_inner_function_v22(self):
|
||||
self._test_microversions_inner_function('2.2', 'controller4_val2')
|
||||
|
||||
@@ -159,7 +159,7 @@ class RequestTest(test.NoDBTestCase):
|
||||
mock_maxver.return_value = api_version.APIVersionRequest("2.14")
|
||||
|
||||
request = wsgi.Request.blank('/')
|
||||
request.headers = {'X-OpenStack-Compute-API-Version': '2.14'}
|
||||
request.headers = {'X-OpenStack-Nova-API-Version': '2.14'}
|
||||
request.set_api_version_request()
|
||||
self.assertEqual(api_version.APIVersionRequest("2.14"),
|
||||
request.api_version_request)
|
||||
@@ -169,14 +169,14 @@ class RequestTest(test.NoDBTestCase):
|
||||
mock_maxver.return_value = api_version.APIVersionRequest("3.5")
|
||||
|
||||
request = wsgi.Request.blank('/')
|
||||
request.headers = {'X-OpenStack-Compute-API-Version': 'latest'}
|
||||
request.headers = {'X-OpenStack-Nova-API-Version': 'latest'}
|
||||
request.set_api_version_request()
|
||||
self.assertEqual(api_version.APIVersionRequest("3.5"),
|
||||
request.api_version_request)
|
||||
|
||||
def test_api_version_request_header_invalid(self):
|
||||
request = wsgi.Request.blank('/')
|
||||
request.headers = {'X-OpenStack-Compute-API-Version': '2.1.3'}
|
||||
request.headers = {'X-OpenStack-Nova-API-Version': '2.1.3'}
|
||||
|
||||
self.assertRaises(exception.InvalidAPIVersionString,
|
||||
request.set_api_version_request)
|
||||
@@ -313,7 +313,7 @@ class ResourceTest(test.NoDBTestCase):
|
||||
|
||||
app = fakes.TestRouterV21(Controller())
|
||||
req = webob.Request.blank('/tests')
|
||||
req.headers = {'X-OpenStack-Compute-API-Version': version}
|
||||
req.headers = {'X-OpenStack-Nova-API-Version': version}
|
||||
response = req.get_response(app)
|
||||
self.assertEqual(response.body, 'success')
|
||||
self.assertEqual(response.status_int, 200)
|
||||
@@ -327,7 +327,7 @@ class ResourceTest(test.NoDBTestCase):
|
||||
|
||||
app = fakes.TestRouterV21(Controller())
|
||||
req = webob.Request.blank('/tests')
|
||||
req.headers = {'X-OpenStack-Compute-API-Version': invalid_version}
|
||||
req.headers = {'X-OpenStack-Nova-API-Version': invalid_version}
|
||||
response = req.get_response(app)
|
||||
self.assertEqual(400, response.status_int)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user