diff --git a/glanceclient/common/utils.py b/glanceclient/common/utils.py index 42e4553..55fdd1d 100644 --- a/glanceclient/common/utils.py +++ b/glanceclient/common/utils.py @@ -20,6 +20,7 @@ import hashlib import json import os import re +import six.moves.urllib.parse as urlparse import sys import threading import uuid @@ -396,11 +397,13 @@ def strip_version(endpoint): version = None # Get rid of trailing '/' if present endpoint = endpoint.rstrip('/') - url_bits = endpoint.split('/') + url_parts = urlparse.urlparse(endpoint) + (scheme, netloc, path, __, __, __) = url_parts + path = path.lstrip('/') # regex to match 'v1' or 'v2.0' etc - if re.match('v\d+\.?\d*', url_bits[-1]): - version = float(url_bits[-1].lstrip('v')) - endpoint = '/'.join(url_bits[:-1]) + if re.match('v\d+\.?\d*', path): + version = float(path.lstrip('v')) + endpoint = scheme + '://' + netloc return endpoint, version diff --git a/glanceclient/tests/unit/test_client.py b/glanceclient/tests/unit/test_client.py index fea7949..42e0067 100644 --- a/glanceclient/tests/unit/test_client.py +++ b/glanceclient/tests/unit/test_client.py @@ -44,3 +44,23 @@ class ClientTest(testtools.TestCase): gc = client.Client(2.2, "http://example.com/v2.1") self.assertEqual("http://example.com", gc.http_client.endpoint) self.assertIsInstance(gc, v2.client.Client) + + def test_endpoint_with_version_hostname(self): + gc = client.Client(2, "http://v1.example.com") + self.assertEqual("http://v1.example.com", gc.http_client.endpoint) + self.assertIsInstance(gc, v2.client.Client) + + def test_versioned_endpoint_with_version_hostname_v2(self): + gc = client.Client(endpoint="http://v1.example.com/v2") + self.assertEqual("http://v1.example.com", gc.http_client.endpoint) + self.assertIsInstance(gc, v2.client.Client) + + def test_versioned_endpoint_with_version_hostname_v1(self): + gc = client.Client(endpoint="http://v2.example.com/v1") + self.assertEqual("http://v2.example.com", gc.http_client.endpoint) + self.assertIsInstance(gc, v1.client.Client) + + def test_versioned_endpoint_with_minor_revision_and_version_hostname(self): + gc = client.Client(endpoint="http://v1.example.com/v2.1") + self.assertEqual("http://v1.example.com", gc.http_client.endpoint) + self.assertIsInstance(gc, v2.client.Client)