diff --git a/openstack/config/cloud_region.py b/openstack/config/cloud_region.py index 7c2541caf..9fa049ab4 100644 --- a/openstack/config/cloud_region.py +++ b/openstack/config/cloud_region.py @@ -23,6 +23,7 @@ from six.moves import urllib import openstack from openstack import _log +from openstack.config import defaults as config_defaults from openstack.config import exceptions @@ -52,8 +53,10 @@ def from_session(session, name=None, config=None, **kwargs): # If someone is constructing one of these from a Session, then they are # not using a named config. Use the hostname of their auth_url instead. name = name or urllib.parse.urlparse(session.auth.auth_url).hostname - config = config or {} - return CloudRegion(name=name, session=session, config=config, **kwargs) + config_dict = config_defaults.get_defaults() + config_dict.update(config or {}) + return CloudRegion( + name=name, session=session, config=config_dict, **kwargs) class CloudRegion(object): diff --git a/openstack/connection.py b/openstack/connection.py index 37bb948a6..16e857539 100644 --- a/openstack/connection.py +++ b/openstack/connection.py @@ -82,6 +82,7 @@ from six.moves import urllib from openstack import _log import openstack.config from openstack.config import cloud_region +from openstack.config import defaults as config_defaults from openstack import exceptions from openstack import service_description from openstack import task_manager @@ -188,10 +189,14 @@ class Connection(object): self.config = openstack_config.get_one( cloud=cloud, validate=session is None, **kwargs) - self.task_manager = task_manager.TaskManager( - name=':'.join([ + if self.config.name: + tm_name = ':'.join([ self.config.name, - self.config.region_name or 'unknown'])) + self.config.region_name or 'unknown']) + else: + tm_name = self.config.region_name or 'unknown' + + self.task_manager = task_manager.TaskManager(name=tm_name) if session: # TODO(mordred) Expose constructor option for this in OCC @@ -228,9 +233,12 @@ class Connection(object): key = cloud_region._make_key('api_version', service_type) kwargs[key] = service.version + config_kwargs = config_defaults.get_defaults() + config_kwargs.update(kwargs) config = cloud_region.CloudRegion( - name=name, region_name=region_name, config=kwargs) + name=name, region_name=region_name, config=config_kwargs) config._auth = authenticator + return config def add_service(self, service): """Add a service to the Connection. diff --git a/openstack/tests/unit/test_connection.py b/openstack/tests/unit/test_connection.py index 11887976b..d43c0d895 100644 --- a/openstack/tests/unit/test_connection.py +++ b/openstack/tests/unit/test_connection.py @@ -18,6 +18,7 @@ import mock from openstack import connection import openstack.config +from openstack import profile from openstack.tests.unit import base @@ -174,6 +175,21 @@ class TestConnection(base.RequestsMockTestCase): sot = connection.from_config(cloud="cacert") self.assertEqual(CONFIG_CACERT, sot.session.verify) + def test_from_profile(self): + """Copied from openstackclient/network/client.py make_client.""" + API_NAME = "network" + instance = self.cloud_config + + prof = profile.Profile() + prof.set_region(API_NAME, instance.region_name) + prof.set_version(API_NAME, instance.get_api_version(API_NAME)) + prof.set_interface(API_NAME, instance.get_interface(API_NAME)) + connection.Connection( + authenticator=instance.get_session().auth, + verify=instance.get_session().verify, + cert=instance.get_session().cert, + profile=prof) + class TestAuthorize(base.RequestsMockTestCase):