Merge "Make sure we use config defaults in profile compat code"

This commit is contained in:
Zuul 2018-01-19 16:40:23 +00:00 committed by Gerrit Code Review
commit 93221709fe
3 changed files with 33 additions and 6 deletions

View File

@ -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):

View File

@ -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.

View File

@ -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):