Merge "Add configuration function using os-client-config"

This commit is contained in:
Jenkins
2015-07-28 21:25:27 +00:00
committed by Gerrit Code Review
5 changed files with 67 additions and 40 deletions

View File

@@ -21,27 +21,12 @@ For example:
import sys
import os_client_config
from examples import common
from openstack import connection
def make_connection(opts):
occ = os_client_config.OpenStackConfig()
cloud = occ.get_one_cloud(opts.cloud, opts)
opts.preferences.set_region(opts.preferences.ALL, cloud.region)
# TODO(thowe): There is a general smell here that this code is
# repeated in two places at that we flatten the auth structure.
# The connection class should take OCC config and just deal, but
# I'd just like to get cacert working for now.
auth = cloud.config['auth']
if 'cacert' in cloud.config:
auth['verify'] = cloud.config['cacert']
if 'insecure' in cloud.config:
auth['verify'] = not bool(cloud.config['insecure'])
conn = connection.Connection(profile=opts.preferences, **auth)
return conn
return connection.from_config(opts)
def run_connection(opts):

View File

@@ -60,14 +60,73 @@ try to find it and if that fails, you would create it::
import logging
import sys
import os_client_config
from openstack import module_loader
from openstack import profile
from openstack import proxy
from openstack import session
from openstack import transport as xport
from openstack import utils
_logger = logging.getLogger(__name__)
def from_config(opts):
"""Create a connection from a configuration.
Create a :class:`~openstack.connection.Connection` from a configuration
similar to a os-client-config CloudConfig.
:param opts: Options class like the argparse Namespace object.
"""
# TODO(thowe): I proposed that service name defaults to None in OCC
defaults = {}
prof = profile.Profile()
services = [service.service_type for service in prof.get_services()]
for service in services:
defaults[service + '_service_name'] = None
# TODO(thowe): default is 2 which turns into v2 which doesn't work
# this stuff needs to be fixed where we keep version and path separated.
defaults['network_api_version'] = 'v2.0'
# Get the cloud_config
occ = os_client_config.OpenStackConfig(override_defaults=defaults)
cloud_config = occ.get_one_cloud(opts.cloud, opts)
if cloud_config.debug:
utils.enable_logging(True, stream=sys.stdout)
# TODO(mordred) we need to add service_type setting to openstacksdk.
# Some clouds have type overridden as well as name.
prof = profile.Profile()
services = [service.service_type for service in prof.get_services()]
for service in cloud_config.get_services():
if service in services:
version = cloud_config.get_api_version(service)
if version:
version = str(version)
if not version.startswith("v"):
version = "v" + version
prof.set_version(service, version)
prof.set_name(service, cloud_config.get_service_name(service))
prof.set_visibility(
service, cloud_config.get_endpoint_type(service))
prof.set_region(service, cloud_config.get_region_name(service))
# Auth
auth = cloud_config.config['auth']
# TODO(thowe) We should be using auth_type
auth['auth_plugin'] = cloud_config.config['auth_type']
if 'cacert' in cloud_config.config:
auth['verify'] = cloud_config.config['cacert']
if 'insecure' in cloud_config.config:
auth['verify'] = not bool(cloud_config.config['insecure'])
return Connection(profile=prof, **auth)
class Connection(object):
def __init__(self, transport=None, authenticator=None, profile=None,

View File

@@ -11,17 +11,12 @@
# under the License.
import os
import sys
import time
import unittest
import os_client_config
from openstack.auth import service_filter
from openstack import connection
from openstack import exceptions
from openstack import profile
from openstack import utils
def requires_service(**kwargs):
@@ -55,26 +50,14 @@ def requires_service(**kwargs):
class BaseFunctionalTest(unittest.TestCase):
class Opts(object):
def __init__(self):
self.cloud = os.getenv('OS_CLOUD', 'test_cloud')
@classmethod
def setUpClass(cls):
name = os.getenv('OS_CLOUD', 'test_cloud')
test_cloud = os_client_config.OpenStackConfig().get_one_cloud(name)
prof = profile.Profile()
prof.set_region(prof.ALL, test_cloud.region)
if test_cloud.debug:
utils.enable_logging(True, stream=sys.stdout)
# TODO(thowe): There is a general smell here that this code is
# repeated in two places at that we flatten the auth structure.
# The connection class should take OCC config and just deal, but
# I'd just like to get cacert working for now.
auth = test_cloud.config['auth']
if 'cacert' in test_cloud.config:
auth['verify'] = test_cloud.config['cacert']
if 'insecure' in test_cloud.config:
auth['verify'] = not bool(test_cloud.config['insecure'])
cls.conn = connection.Connection(profile=prof, **auth)
opts = cls.Opts()
cls.conn = connection.from_config(opts)
@classmethod
def assertIs(cls, expected, actual):

View File

@@ -6,3 +6,4 @@ requests>=2.5.2
six>=1.9.0
stevedore>=1.5.0 # Apache-2.0
oslo.utils>=1.9.0 # Apache-2.0
os-client-config>=1.4.0

View File

@@ -9,7 +9,6 @@ fixtures>=1.3.1
mock>=1.2
python-subunit>=0.0.18
oslosphinx>=2.5.0 # Apache-2.0
os-client-config>=1.4.0
os-testr>=0.1.0
requests-mock>=0.6.0 # Apache-2.0
sphinx!=1.2.0,!=1.3b1,<1.3,>=1.1.2