diff options
author | Christian Schwede <cschwede@redhat.com> | 2017-06-13 10:51:33 +0200 |
---|---|---|
committer | Christian Schwede <cschwede@redhat.com> | 2017-09-19 07:38:30 +0000 |
commit | ba6abe9b20923390383050c025c56f86088bc416 (patch) | |
tree | 8492fb014637584c80864779cd3d07611db1db1b /swiftclient | |
parent | 9a60bc1307f47682d45af2b96936eb7dcd77aa98 (diff) | |
download | python-swiftclient-ba6abe9b20923390383050c025c56f86088bc416.tar.gz |
Add support for versionless endpoints
Newer deployments are using versionless Keystone endpoints, and most
OpenStack clients already support this.
This patch enables this for Swift: if an auth_url without any path
component is found, it assumes a versionless endpoint will be used.
In this case the v3 suffix will be appended to the path if none
auth_version is set, and v2.0 is appended if auth_version requires v2.
Closes-Bug: 1554885
Related-Bug: 1691106
Change-Id: If7ecb67776cb77828f93ad8278cc5040015216b7
(cherry picked from commit 2ff3102cf779a507af8fa39296154a17a60f540a)
Diffstat (limited to 'swiftclient')
-rw-r--r-- | swiftclient/client.py | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/swiftclient/client.py b/swiftclient/client.py index 80bc4a3..7db75f0 100644 --- a/swiftclient/client.py +++ b/swiftclient/client.py @@ -25,7 +25,7 @@ from distutils.version import StrictVersion from requests.exceptions import RequestException, SSLError from six.moves import http_client 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 import six @@ -550,9 +550,22 @@ def get_auth_keystone(auth_url, user, key, os_options, **kwargs): insecure = kwargs.get('insecure', False) 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) + # 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) try: |