Use get_session_client in Connection

The openstack.config CloudRegion object knows how to make adapters, but
we make them by hand in Connection. Add a constructor parameter and
shift to using get_session_client from CloudRegion to make the proxy
objects instead of duplicating the call. This should help us get version
discovery plugged in properly.

Change-Id: I486d1fc82ba9a1f1aafaf83e9a6ed8f01244ede6
This commit is contained in:
Monty Taylor 2018-02-05 16:56:15 -06:00
parent ebe5fde830
commit 821af87bb8
No known key found for this signature in database
GPG Key ID: 7BAE94BC7141A594
2 changed files with 12 additions and 11 deletions

View File

@ -285,11 +285,15 @@ class CloudRegion(object):
return None, None, 'latest'
if not version:
version = self.get_api_version(service_key)
if not version:
# Octavia doens't have a version discovery document. Hard-code an
# exception to this logic for now.
if not version and service_key not in ('load-balancer',):
return None, None, 'latest'
return version, None, None
def get_session_client(self, service_key, version=None):
def get_session_client(
self, service_key, version=None, constructor=adapter.Adapter,
**kwargs):
"""Return a prepped requests adapter for a given service.
This is useful for making direct requests calls against a
@ -306,7 +310,7 @@ class CloudRegion(object):
(version, min_version, max_version) = self._get_version_args(
service_key, version)
return adapter.Adapter(
return constructor(
session=self.get_session(),
service_type=self.get_service_type(service_key),
service_name=self.get_service_name(service_key),
@ -314,7 +318,8 @@ class CloudRegion(object):
region_name=self.region_name,
version=version,
min_version=min_version,
max_version=max_version)
max_version=max_version,
**kwargs)
def _get_highest_endpoint(self, service_types, kwargs):
session = self.get_session()

View File

@ -88,15 +88,11 @@ class ServiceDescription(object):
if self.service_type not in instance._proxies:
config = instance.config
proxy_class = self.get_proxy_class(config)
instance._proxies[self.service_type] = proxy_class(
session=instance.config.get_session(),
instance._proxies[self.service_type] = config.get_session_client(
self.service_type,
constructor=proxy_class,
task_manager=instance.task_manager,
allow_version_hack=True,
service_type=config.get_service_type(self.service_type),
service_name=config.get_service_name(self.service_type),
interface=config.get_interface(self.service_type),
region_name=config.region_name,
version=config.get_api_version(self.service_type)
)
return instance._proxies[self.service_type]