Merge "Add custom CA support for get_server_version"

This commit is contained in:
Zuul
2019-09-05 14:14:23 +00:00
committed by Gerrit Code Review
2 changed files with 50 additions and 4 deletions

View File

@@ -72,10 +72,14 @@ for svc in ('volume', 'volumev2', 'volumev3'):
discover.add_catalog_discover_hack(svc, re.compile(r'/v[12]/\w+/?$'), '/') discover.add_catalog_discover_hack(svc, re.compile(r'/v[12]/\w+/?$'), '/')
def get_server_version(url): def get_server_version(url, insecure=False, cacert=None):
"""Queries the server via the naked endpoint and gets version info. """Queries the server via the naked endpoint and gets version info.
:param url: url of the cinder endpoint :param url: url of the cinder endpoint
:param insecure: Explicitly allow client to perform "insecure" TLS
(https) requests
:param cacert: Specify a CA bundle file to use in verifying a TLS
(https) server certificate
:returns: APIVersion object for min and max version supported by :returns: APIVersion object for min and max version supported by
the server the server
""" """
@@ -106,7 +110,14 @@ def get_server_version(url):
# leave as is without cropping. # leave as is without cropping.
version_url = url version_url = url
response = requests.get(version_url) if insecure:
verify_cert = False
else:
if cacert:
verify_cert = cacert
else:
verify_cert = True
response = requests.get(version_url, verify=verify_cert)
data = json.loads(response.text) data = json.loads(response.text)
versions = data['versions'] versions = data['versions']
for version in versions: for version in versions:
@@ -121,9 +132,9 @@ def get_server_version(url):
api_versions.APIVersion(current_version)) api_versions.APIVersion(current_version))
def get_highest_client_server_version(url): def get_highest_client_server_version(url, insecure=False, cacert=None):
"""Returns highest supported version by client and server as a string.""" """Returns highest supported version by client and server as a string."""
min_server, max_server = get_server_version(url) min_server, max_server = get_server_version(url, insecure, cacert)
max_client = api_versions.APIVersion(api_versions.MAX_VERSION) max_client = api_versions.APIVersion(api_versions.MAX_VERSION)
return min(max_server, max_client).get_string() return min(max_server, max_client).get_string()

View File

@@ -360,6 +360,41 @@ class GetAPIVersionTestCase(utils.TestCase):
self.assertEqual(min_version, api_versions.APIVersion('3.0')) self.assertEqual(min_version, api_versions.APIVersion('3.0'))
self.assertEqual(max_version, api_versions.APIVersion('3.16')) self.assertEqual(max_version, api_versions.APIVersion('3.16'))
@mock.patch('cinderclient.client.requests.get')
def test_get_server_version_insecure(self, mock_request):
mock_response = utils.TestResponse({
"status_code": 200,
"text": json.dumps(fakes.fake_request_get_no_v3())
})
mock_request.return_value = mock_response
url = (
"https://192.168.122.127:8776/v3/e5526285ebd741b1819393f772f11fc3")
expected_url = "https://192.168.122.127:8776/"
cinderclient.client.get_server_version(url, True)
mock_request.assert_called_once_with(expected_url, verify=False)
@mock.patch('cinderclient.client.requests.get')
def test_get_server_version_cacert(self, mock_request):
mock_response = utils.TestResponse({
"status_code": 200,
"text": json.dumps(fakes.fake_request_get_no_v3())
})
mock_request.return_value = mock_response
url = (
"https://192.168.122.127:8776/v3/e5526285ebd741b1819393f772f11fc3")
expected_url = "https://192.168.122.127:8776/"
cacert = '/path/to/cert'
cinderclient.client.get_server_version(url, cacert=cacert)
mock_request.assert_called_once_with(expected_url, verify=cacert)
@mock.patch('cinderclient.client.requests.get') @mock.patch('cinderclient.client.requests.get')
@ddt.data('3.12', '3.40') @ddt.data('3.12', '3.40')
def test_get_highest_client_server_version(self, version, mock_request): def test_get_highest_client_server_version(self, version, mock_request):