Specify manila microversion header

Manila API honors a "X-OpenStack-Manila-API-Version"
header to specify microversions.

It may support the OpenStack-API-Version header
in a future release, however, we'll need to maintain
backwards compatibility with the existing API.

Change-Id: Ia2e62d3a11a08adeb6d488b7c9b365f7ff2be3c8
This commit is contained in:
Goutham Pacha Ravi 2021-02-03 22:16:03 -08:00
parent 6a662719ce
commit 112bcae1fb
2 changed files with 21 additions and 0 deletions

View File

@ -83,6 +83,8 @@ def _mv_legacy_headers_for_service(mv_service_type):
headers.append("X-OpenStack-Nova-API-Version") headers.append("X-OpenStack-Nova-API-Version")
elif mv_service_type == "baremetal": elif mv_service_type == "baremetal":
headers.append("X-OpenStack-Ironic-API-Version") headers.append("X-OpenStack-Ironic-API-Version")
elif mv_service_type in ["sharev2", "shared-file-system"]:
headers.append("X-OpenStack-Manila-API-Version")
return headers return headers
@ -614,6 +616,14 @@ class Session(object):
if (service_type.startswith('volume') or if (service_type.startswith('volume') or
service_type == 'block-storage'): service_type == 'block-storage'):
service_type = 'volume' service_type = 'volume'
elif service_type.startswith('share'):
# NOTE(gouthamr) manila doesn't honor the "OpenStack-API-Version"
# header yet, but sending it does no harm - when the service
# honors this header, it'll use the standardized name in the
# service-types-authority and not the legacy name in the cloud's
# service catalog
service_type = 'shared-file-system'
headers.setdefault('OpenStack-API-Version', headers.setdefault('OpenStack-API-Version',
'{service_type} {microversion}'.format( '{service_type} {microversion}'.format(
service_type=service_type, service_type=service_type,

View File

@ -164,6 +164,17 @@ class SessionTests(utils.TestCase):
self.assertEqual(headers['OpenStack-API-Version'], 'volume 2.30') self.assertEqual(headers['OpenStack-API-Version'], 'volume 2.30')
self.assertEqual(len(headers.keys()), 1) self.assertEqual(len(headers.keys()), 1)
# shared file system service-type - shared-file-system microversion
# (with service type aliases)
for service_type in ['sharev2', 'shared-file-system']:
headers = {}
client_session.Session._set_microversion_headers(
headers, (2, 30), None, {'service_type': service_type})
self.assertEqual(headers['X-OpenStack-Manila-API-Version'], '2.30')
self.assertEqual(headers['OpenStack-API-Version'],
'shared-file-system 2.30')
self.assertEqual(len(headers.keys()), 2)
# Headers already exist - no change # Headers already exist - no change
headers = { headers = {
'OpenStack-API-Version': 'compute 2.30', 'OpenStack-API-Version': 'compute 2.30',