Update microversion header to include service type magnum
This change updates the version header to meet the microversion guildlines. See link in bug for api-wg guidelines. Adds "magnum" to the version header as the service type. Change-Id: Ibcb1f7b20847198c15612e8bd6ba30279bec1d04 Closes-Bug: #1569776
This commit is contained in:
parent
220e74da1f
commit
2b3c4a0fe7
|
@ -53,15 +53,17 @@ class APIBase(wtypes.Base):
|
|||
class Version(object):
|
||||
"""API Version object."""
|
||||
|
||||
string = 'X-OpenStack-Magnum-API-Version'
|
||||
string = 'X-OpenStack-API-Version'
|
||||
"""HTTP Header string carrying the requested version"""
|
||||
|
||||
min_string = 'X-OpenStack-Magnum-API-Minimum-Version'
|
||||
min_string = 'X-OpenStack-API-Minimum-Version'
|
||||
"""HTTP response header"""
|
||||
|
||||
max_string = 'X-OpenStack-Magnum-API-Maximum-Version'
|
||||
max_string = 'X-OpenStack-API-Maximum-Version'
|
||||
"""HTTP response header"""
|
||||
|
||||
service_string = 'magnum'
|
||||
|
||||
def __init__(self, headers, default_version, latest_version):
|
||||
"""Create an API Version object from the supplied headers.
|
||||
|
||||
|
@ -87,15 +89,23 @@ class Version(object):
|
|||
:returns: a tuple of (major, minor) version numbers
|
||||
:raises: webob.HTTPNotAcceptable
|
||||
"""
|
||||
version_str = headers.get(Version.string, default_version)
|
||||
|
||||
if version_str.lower() == 'latest':
|
||||
parse_str = latest_version
|
||||
else:
|
||||
parse_str = version_str
|
||||
version_hdr = headers.get(Version.string, default_version)
|
||||
|
||||
try:
|
||||
version = tuple(int(i) for i in parse_str.split('.'))
|
||||
version_service, version_str = version_hdr.split()
|
||||
except ValueError:
|
||||
raise exc.HTTPNotAcceptable(_(
|
||||
"Invalid service type for %s header") % Version.string)
|
||||
|
||||
if version_str.lower() == 'latest':
|
||||
version_service, version_str = latest_version.split()
|
||||
|
||||
if version_service != Version.service_string:
|
||||
raise exc.HTTPNotAcceptable(_(
|
||||
"Invalid service type for %s header") % Version.string)
|
||||
try:
|
||||
version = tuple(int(i) for i in version_str.split('.'))
|
||||
except ValueError:
|
||||
version = ()
|
||||
|
||||
|
|
|
@ -48,14 +48,15 @@ BASE_VERSION = 1
|
|||
#
|
||||
|
||||
# v1.1: API at the point in time when microversioning support was added
|
||||
MIN_VER_STR = '1.1'
|
||||
MIN_VER_STR = 'magnum 1.1'
|
||||
|
||||
# v1.1: Add API changelog here
|
||||
MAX_VER_STR = '1.1'
|
||||
MAX_VER_STR = 'magnum 1.1'
|
||||
|
||||
|
||||
MIN_VER = controllers_base.Version(
|
||||
{controllers_base.Version.string: MIN_VER_STR}, MIN_VER_STR, MAX_VER_STR)
|
||||
{controllers_base.Version.string: MIN_VER_STR},
|
||||
MIN_VER_STR, MAX_VER_STR)
|
||||
MAX_VER = controllers_base.Version(
|
||||
{controllers_base.Version.string: MAX_VER_STR},
|
||||
MIN_VER_STR, MAX_VER_STR)
|
||||
|
|
|
@ -25,7 +25,7 @@ fakeAuthTokenHeaders = {'X-User-Id': u'773a902f022949619b5c2f32cd89d419',
|
|||
'X-User-Domain-Name': 'domain',
|
||||
'X-Project-Domain-Id': 'project_domain_id',
|
||||
'X-User-Domain-Id': 'user_domain_id',
|
||||
'X-OpenStack-Magnum-API-Version': '1.0'
|
||||
'X-OpenStack-API-Version': 'magnum 1.0'
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -21,8 +21,10 @@ class TestVersion(test_base.TestCase):
|
|||
|
||||
def setUp(self):
|
||||
super(TestVersion, self).setUp()
|
||||
self.a = base.Version({base.Version.string: "2.0"}, "2.0", "2.1")
|
||||
self.b = base.Version({base.Version.string: "2.0"}, "2.0", "2.1")
|
||||
self.a = base.Version(
|
||||
{base.Version.string: "magnum 2.0"}, "magnum 2.0", "magnum 2.1")
|
||||
self.b = base.Version(
|
||||
{base.Version.string: "magnum 2.0"}, "magnum 2.0", "magnum 2.1")
|
||||
|
||||
def test__lt__with_higher_major_version(self):
|
||||
self.a.major = 2
|
||||
|
@ -103,30 +105,44 @@ class TestVersion(test_base.TestCase):
|
|||
|
||||
def test_parse_headers_ok(self):
|
||||
version = base.Version.parse_headers(
|
||||
{base.Version.string: '123.456'}, mock.ANY, mock.ANY)
|
||||
{base.Version.string: 'magnum 123.456'}, mock.ANY, mock.ANY)
|
||||
self.assertEqual((123, 456), version)
|
||||
|
||||
def test_parse_headers_latest(self):
|
||||
for s in ['latest', 'LATEST']:
|
||||
for s in ['magnum latest', 'magnum LATEST']:
|
||||
version = base.Version.parse_headers(
|
||||
{base.Version.string: s}, mock.ANY, '1.9')
|
||||
{base.Version.string: s}, mock.ANY, 'magnum 1.9')
|
||||
self.assertEqual((1, 9), version)
|
||||
|
||||
def test_parse_headers_bad_length(self):
|
||||
self.assertRaises(
|
||||
exc.HTTPNotAcceptable,
|
||||
base.Version.parse_headers,
|
||||
{base.Version.string: '1'},
|
||||
{base.Version.string: 'magnum 1'},
|
||||
mock.ANY,
|
||||
mock.ANY)
|
||||
self.assertRaises(
|
||||
exc.HTTPNotAcceptable,
|
||||
base.Version.parse_headers,
|
||||
{base.Version.string: '1.2.3'},
|
||||
{base.Version.string: 'magnum 1.2.3'},
|
||||
mock.ANY,
|
||||
mock.ANY)
|
||||
|
||||
def test_parse_no_header(self):
|
||||
# this asserts that the minimum version string of "1.1" is applied
|
||||
version = base.Version.parse_headers({}, '1.1', '1.5')
|
||||
# this asserts that the minimum version string is applied
|
||||
version = base.Version.parse_headers({}, 'magnum 1.1', 'magnum 1.5')
|
||||
self.assertEqual((1, 1), version)
|
||||
|
||||
def test_parse_incorrect_service_type(self):
|
||||
self.assertRaises(
|
||||
exc.HTTPNotAcceptable,
|
||||
base.Version.parse_headers,
|
||||
{base.Version.string: '1.1'},
|
||||
'magnum 1.1',
|
||||
'magnum 1.1')
|
||||
self.assertRaises(
|
||||
exc.HTTPNotAcceptable,
|
||||
base.Version.parse_headers,
|
||||
{base.Version.string: 'nova 1.1'},
|
||||
'magnum 1.1',
|
||||
'magnum 1.1')
|
||||
|
|
Loading…
Reference in New Issue