summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscottda <scott.dangelo@ibm.com>2017-01-26 09:48:22 -0700
committerscottda <scott.dangelo@ibm.com>2017-01-31 09:29:17 -0700
commitd10b467af4e2aabbd7935ebbe0eeacce2ce533e3 (patch)
tree181671133d88a10068a3eaec70e4f495fb8e2fea
parent4395dbdda6415b337a41afe5f289281a13465c5d (diff)
downloadpython-cinderclient-d10b467af4e2aabbd7935ebbe0eeacce2ce533e3.tar.gz
static method to get_highest_client_server_version
This method takes a url for the cinder server endpoint and queries the server for version info. It then returns the min of the server's highest supported version and the cinderclients MAX_VERSION. Change-Id: Ifb3478f1dba660a5d75d243dc2aaf6b421940752
-rw-r--r--cinderclient/client.py7
-rw-r--r--cinderclient/tests/unit/test_client.py19
2 files changed, 26 insertions, 0 deletions
diff --git a/cinderclient/client.py b/cinderclient/client.py
index 298ec94..f6513b6 100644
--- a/cinderclient/client.py
+++ b/cinderclient/client.py
@@ -97,6 +97,13 @@ def get_server_version(url):
return api_versions.APIVersion("2.0"), api_versions.APIVersion("2.0")
+def get_highest_client_server_version(url):
+ min_server, max_server = get_server_version(url)
+ max_server_version = api_versions.APIVersion.get_string(max_server)
+
+ return min(float(max_server_version), float(api_versions.MAX_VERSION))
+
+
def get_volume_api_from_url(url):
scheme, netloc, path, query, frag = urlparse.urlsplit(url)
components = path.split("/")
diff --git a/cinderclient/tests/unit/test_client.py b/cinderclient/tests/unit/test_client.py
index 7a6588c..0ca0f19 100644
--- a/cinderclient/tests/unit/test_client.py
+++ b/cinderclient/tests/unit/test_client.py
@@ -332,3 +332,22 @@ class GetAPIVersionTestCase(utils.TestCase):
min_version, max_version = cinderclient.client.get_server_version(url)
self.assertEqual(min_version, api_versions.APIVersion('3.0'))
self.assertEqual(max_version, api_versions.APIVersion('3.16'))
+
+ @mock.patch('cinderclient.client.requests.get')
+ def test_get_highest_client_server_version(self, mock_request):
+
+ mock_response = utils.TestResponse({
+ "status_code": 200,
+ "text": json.dumps(fakes.fake_request_get())
+ })
+
+ mock_request.return_value = mock_response
+
+ url = "http://192.168.122.127:8776/v3/e5526285ebd741b1819393f772f11fc3"
+
+ highest = cinderclient.client.get_highest_client_server_version(url)
+ current_client_MAX_VERSION = float(api_versions.MAX_VERSION)
+ if current_client_MAX_VERSION > 3.16:
+ self.assertEqual(3.16, highest)
+ else:
+ self.assertEqual(current_client_MAX_VERSION, highest)