Merge "Add support for versionless endpoints"
This commit is contained in:
@@ -25,7 +25,7 @@ from distutils.version import StrictVersion
|
|||||||
from requests.exceptions import RequestException, SSLError
|
from requests.exceptions import RequestException, SSLError
|
||||||
from six.moves import http_client
|
from six.moves import http_client
|
||||||
from six.moves.urllib.parse import quote as _quote, unquote
|
from six.moves.urllib.parse import quote as _quote, unquote
|
||||||
from six.moves.urllib.parse import urlparse, urlunparse
|
from six.moves.urllib.parse import urljoin, urlparse, urlunparse
|
||||||
from time import sleep, time
|
from time import sleep, time
|
||||||
import six
|
import six
|
||||||
|
|
||||||
@@ -550,9 +550,22 @@ def get_auth_keystone(auth_url, user, key, os_options, **kwargs):
|
|||||||
|
|
||||||
insecure = kwargs.get('insecure', False)
|
insecure = kwargs.get('insecure', False)
|
||||||
timeout = kwargs.get('timeout', None)
|
timeout = kwargs.get('timeout', None)
|
||||||
auth_version = kwargs.get('auth_version', '2.0')
|
auth_version = kwargs.get('auth_version', None)
|
||||||
debug = logger.isEnabledFor(logging.DEBUG)
|
debug = logger.isEnabledFor(logging.DEBUG)
|
||||||
|
|
||||||
|
# Add the version suffix in case of versionless Keystone endpoints. If
|
||||||
|
# auth_version is also unset it is likely that it is v3
|
||||||
|
if len(urlparse(auth_url).path) <= 1:
|
||||||
|
if auth_version and auth_version in AUTH_VERSIONS_V2:
|
||||||
|
auth_url = urljoin(auth_url, "v2.0")
|
||||||
|
else:
|
||||||
|
auth_url = urljoin(auth_url, "v3")
|
||||||
|
auth_version = '3'
|
||||||
|
logger.debug("Versionless auth_url - using %s as endpoint" % auth_url)
|
||||||
|
|
||||||
|
# Legacy default if not set
|
||||||
|
if auth_version is None:
|
||||||
|
auth_version = 'v2.0'
|
||||||
ksclient, exceptions = _import_keystone_client(auth_version)
|
ksclient, exceptions = _import_keystone_client(auth_version)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@@ -575,6 +575,26 @@ class TestGetAuth(MockHttpTest):
|
|||||||
self.assertTrue(url.startswith("http"))
|
self.assertTrue(url.startswith("http"))
|
||||||
self.assertTrue(token)
|
self.assertTrue(token)
|
||||||
|
|
||||||
|
def test_get_auth_keystone_versionless(self):
|
||||||
|
fake_ks = FakeKeystone(endpoint='http://some_url', token='secret')
|
||||||
|
|
||||||
|
with mock.patch('swiftclient.client._import_keystone_client',
|
||||||
|
_make_fake_import_keystone_client(fake_ks)):
|
||||||
|
c.get_auth_keystone('http://authurl', 'user', 'key', {})
|
||||||
|
self.assertEqual(1, len(fake_ks.calls))
|
||||||
|
self.assertEqual('http://authurl/v3', fake_ks.calls[0].get('auth_url'))
|
||||||
|
|
||||||
|
def test_get_auth_keystone_versionless_auth_version_set(self):
|
||||||
|
fake_ks = FakeKeystone(endpoint='http://some_url', token='secret')
|
||||||
|
|
||||||
|
with mock.patch('swiftclient.client._import_keystone_client',
|
||||||
|
_make_fake_import_keystone_client(fake_ks)):
|
||||||
|
c.get_auth_keystone('http://auth_url', 'user', 'key',
|
||||||
|
{}, auth_version='2.0')
|
||||||
|
self.assertEqual(1, len(fake_ks.calls))
|
||||||
|
self.assertEqual('http://auth_url/v2.0',
|
||||||
|
fake_ks.calls[0].get('auth_url'))
|
||||||
|
|
||||||
def test_auth_with_session(self):
|
def test_auth_with_session(self):
|
||||||
mock_session = mock.MagicMock()
|
mock_session = mock.MagicMock()
|
||||||
mock_session.get_endpoint.return_value = 'http://storagehost/v1/acct'
|
mock_session.get_endpoint.return_value = 'http://storagehost/v1/acct'
|
||||||
|
Reference in New Issue
Block a user