summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMonty Taylor <mordred@inaugust.com>2017-10-18 14:20:55 +0200
committerMonty Taylor <mordred@inaugust.com>2017-10-18 15:49:23 +0200
commit3e66722b292a4e8a81cee057d2259e3aa5916909 (patch)
treeede7f890b2270026eebb3fe6e10057faf9832976
parent15834d7620498bff8561fc423acef8192d729b8f (diff)
downloados-client-config-3e66722b292a4e8a81cee057d2259e3aa5916909.tar.gz
Update make_rest_client to work with version discovery
Using make_rest_client on clouds that put unversioned endpoints in the catalog results in incorrectly set up adapters. Add the plumbing to get_session_client to pass version args to keystoneauth. Then use that from make_rest_client. Change-Id: I69ad746f672ef0b12680e9db3c7b0c691c9f87e4
-rw-r--r--os_client_config/__init__.py4
-rw-r--r--os_client_config/cloud_config.py27
-rw-r--r--releasenotes/notes/make-rest-client-version-discovery-84125700f159491a.yaml6
3 files changed, 34 insertions, 3 deletions
diff --git a/os_client_config/__init__.py b/os_client_config/__init__.py
index 4246525..f5976b4 100644
--- a/os_client_config/__init__.py
+++ b/os_client_config/__init__.py
@@ -45,7 +45,7 @@ def get_config(
def make_rest_client(
service_key, options=None,
- app_name=None, app_version=None,
+ app_name=None, app_version=None, version=None,
**kwargs):
"""Simple wrapper function. It has almost no features.
@@ -63,7 +63,7 @@ def make_rest_client(
service_key=service_key, options=options,
app_name=app_name, app_version=app_version,
**kwargs)
- return cloud.get_session_client(service_key)
+ return cloud.get_session_client(service_key, version=version)
# Backwards compat - simple_client was a terrible name
simple_client = make_rest_client
# Backwards compat - session_client was a terrible name
diff --git a/os_client_config/cloud_config.py b/os_client_config/cloud_config.py
index d8b1e26..2e97629 100644
--- a/os_client_config/cloud_config.py
+++ b/os_client_config/cloud_config.py
@@ -235,7 +235,27 @@ class CloudConfig(object):
"""Helper method to grab the service catalog."""
return self._auth.get_access(self.get_session()).service_catalog
- def get_session_client(self, service_key):
+ def _get_version_args(self, service_key, version):
+ """Translate OCC version args to those needed by ksa adapter.
+
+ If no version is requested explicitly and we have a configured version,
+ set the version parameter and let ksa deal with expanding that to
+ min=ver.0, max=ver.latest.
+
+ If version is set, pass it through.
+
+ If version is not set and we don't have a configured version, default
+ to latest.
+ """
+ if version == 'latest':
+ return None, None, 'latest'
+ if not version:
+ version = self.get_api_version(service_key)
+ if not version:
+ return None, None, 'latest'
+ return version, None, None
+
+ def get_session_client(self, service_key, version=None):
"""Return a prepped requests adapter for a given service.
This is useful for making direct requests calls against a
@@ -249,12 +269,17 @@ class CloudConfig(object):
and it will work like you think.
"""
+ (version, min_version, max_version) = self._get_version_args(
+ service_key, version)
return adapter.Adapter(
session=self.get_session(),
service_type=self.get_service_type(service_key),
service_name=self.get_service_name(service_key),
interface=self.get_interface(service_key),
+ version=version,
+ min_version=min_version,
+ max_version=max_version,
region_name=self.region)
def _get_highest_endpoint(self, service_types, kwargs):
diff --git a/releasenotes/notes/make-rest-client-version-discovery-84125700f159491a.yaml b/releasenotes/notes/make-rest-client-version-discovery-84125700f159491a.yaml
new file mode 100644
index 0000000..7326978
--- /dev/null
+++ b/releasenotes/notes/make-rest-client-version-discovery-84125700f159491a.yaml
@@ -0,0 +1,6 @@
+---
+features:
+ - Add version argument to make_rest_client and plumb
+ version discovery through get_session_client so that
+ versioned endpoints are properly found if unversioned
+ are in the catalog.