diff --git a/openstack/config/cloud_region.py b/openstack/config/cloud_region.py index 84690aca0..8fce44ccc 100644 --- a/openstack/config/cloud_region.py +++ b/openstack/config/cloud_region.py @@ -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() diff --git a/openstack/service_description.py b/openstack/service_description.py index 7526c5c4e..245d7145f 100644 --- a/openstack/service_description.py +++ b/openstack/service_description.py @@ -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]