From 64d56d7d3f4279f3b0ebd8904bfe878b20e2b513 Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Sat, 27 Jan 2018 12:28:44 -0600 Subject: [PATCH] Move profile helper method to openstack.profile We have a helper method for creating a Connection from a Profile to help with the transition. Move it to openstack/profile.py so that it is contained with the class it's associated with. Change-Id: I20ad8d96bd13a09afaee4401d71de7dba203682e --- openstack/connection.py | 47 ++++++++---------------------------- openstack/profile.py | 33 +++++++++++++++++++++++++ openstack/tests/unit/base.py | 2 +- 3 files changed, 44 insertions(+), 38 deletions(-) diff --git a/openstack/connection.py b/openstack/connection.py index e35460d6a..e032f18b2 100644 --- a/openstack/connection.py +++ b/openstack/connection.py @@ -74,18 +74,20 @@ try to find it and if that fails, you would create it:: network = conn.network.create_network({"name": "zuul"}) """ +__all__ = [ + 'from_config', + 'Connection', +] + import warnings import keystoneauth1.exceptions import os_service_types import requestsexceptions import six -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 config as _config from openstack import exceptions from openstack import service_description from openstack import task_manager @@ -120,7 +122,7 @@ def from_config(cloud=None, config=None, options=None, **kwargs): cloud = cloud or kwargs.get('cloud_name') config = config or kwargs.get('cloud_config') if config is None: - config = openstack.config.OpenStackConfig().get_one( + config = _config.OpenStackConfig().get_one( cloud=cloud, argparse=options) return Connection(config=config) @@ -186,12 +188,13 @@ class Connection(object): if not self.config: if profile: + import openstack.profile # TODO(shade) Remove this once we've shifted # python-openstackclient to not use the profile interface. - self.config = self._get_config_from_profile( + self.config = openstack.profile._get_config_from_profile( profile, authenticator, **kwargs) else: - openstack_config = openstack.config.OpenStackConfig( + openstack_config = _config.OpenStackConfig( app_name=app_name, app_version=app_version, load_yaml_config=profile is None) self.config = openstack_config.get_one( @@ -218,36 +221,6 @@ class Connection(object): service_description.OpenStackServiceDescription( service, self.config)) - def _get_config_from_profile(self, profile, authenticator, **kwargs): - """Get openstack.config objects from legacy profile.""" - # TODO(shade) Remove this once we've shifted python-openstackclient - # to not use the profile interface. - - # We don't have a cloud name. Make one up from the auth_url hostname - # so that log messages work. - name = urllib.parse.urlparse(authenticator.auth_url).hostname - region_name = None - for service in profile.get_services(): - if service.region: - region_name = service.region - service_type = service.service_type - if service.interface: - key = cloud_region._make_key('interface', service_type) - kwargs[key] = service.interface - if service.version: - version = service.version - if version.startswith('v'): - version = version[1:] - 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=config_kwargs) - config._auth = authenticator - return config - def add_service(self, service): """Add a service to the Connection. diff --git a/openstack/profile.py b/openstack/profile.py index ecec83949..b502bf727 100644 --- a/openstack/profile.py +++ b/openstack/profile.py @@ -16,8 +16,11 @@ """ import copy +from six.moves import urllib from openstack import _log +from openstack.config import cloud_region +from openstack.config import defaults as config_defaults from openstack.baremetal import baremetal_service from openstack.block_storage import block_storage_service from openstack.clustering import clustering_service @@ -38,6 +41,36 @@ from openstack.workflow import workflow_service _logger = _log.setup_logging('openstack') +def _get_config_from_profile(profile, authenticator, **kwargs): + # TODO(shade) Remove this once we've shifted python-openstackclient + # to not use the profile interface. + + # We don't have a cloud name. Make one up from the auth_url hostname + # so that log messages work. + name = urllib.parse.urlparse(authenticator.auth_url).hostname + region_name = None + for service in profile.get_services(): + if service.region: + region_name = service.region + service_type = service.service_type + if service.interface: + key = cloud_region._make_key('interface', service_type) + kwargs[key] = service.interface + if service.version: + version = service.version + if version.startswith('v'): + version = version[1:] + 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=config_kwargs) + config._auth = authenticator + return config + + class Profile(object): ALL = "*" diff --git a/openstack/tests/unit/base.py b/openstack/tests/unit/base.py index b784be1a0..2c4eaf08a 100644 --- a/openstack/tests/unit/base.py +++ b/openstack/tests/unit/base.py @@ -26,7 +26,7 @@ from requests_mock.contrib import fixture as rm_fixture from six.moves import urllib import tempfile -import openstack +import openstack.cloud import openstack.connection from openstack.tests import base