summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2017-03-07 19:21:48 +0000
committerGerrit Code Review <review@openstack.org>2017-03-07 19:21:48 +0000
commit9c550021d3c12a9c7af98aaab3a03af856910009 (patch)
tree4d89b71bda98056c80480a56076d1cb34ff70106
parentd6908f93a732adfb289d7902988f2ce0c2dd23de (diff)
parent81e04fcec6cb333a7d44124c045358c4904cf765 (diff)
downloados-client-config-9c550021d3c12a9c7af98aaab3a03af856910009.tar.gz
Merge "Add ability to skip yaml loading"
-rw-r--r--os_client_config/__init__.py3
-rw-r--r--os_client_config/config.py14
-rw-r--r--os_client_config/tests/test_config.py32
-rw-r--r--releasenotes/notes/load-yaml-3177efca78e5c67a.yaml7
4 files changed, 51 insertions, 5 deletions
diff --git a/os_client_config/__init__.py b/os_client_config/__init__.py
index e8d7fc0..a36a130 100644
--- a/os_client_config/__init__.py
+++ b/os_client_config/__init__.py
@@ -24,7 +24,8 @@ __version__ = pbr.version.VersionInfo('os_client_config').version_string()
def get_config(service_key=None, options=None, **kwargs):
- config = OpenStackConfig()
+ load_yaml_config = kwargs.pop('load_yaml_config', True)
+ config = OpenStackConfig(load_yaml_config=load_yaml_config)
if options:
config.register_argparse_arguments(options, sys.argv, service_key)
parsed_options = options.parse_known_args(sys.argv)
diff --git a/os_client_config/config.py b/os_client_config/config.py
index de8dd38..64e3a13 100644
--- a/os_client_config/config.py
+++ b/os_client_config/config.py
@@ -173,13 +173,19 @@ class OpenStackConfig(object):
def __init__(self, config_files=None, vendor_files=None,
override_defaults=None, force_ipv4=None,
envvar_prefix=None, secure_files=None,
- pw_func=None, session_constructor=None):
+ pw_func=None, session_constructor=None,
+ load_yaml_config=True):
self.log = _log.setup_logging(__name__)
self._session_constructor = session_constructor
- self._config_files = config_files or CONFIG_FILES
- self._secure_files = secure_files or SECURE_FILES
- self._vendor_files = vendor_files or VENDOR_FILES
+ if load_yaml_config:
+ self._config_files = config_files or CONFIG_FILES
+ self._secure_files = secure_files or SECURE_FILES
+ self._vendor_files = vendor_files or VENDOR_FILES
+ else:
+ self._config_files = []
+ self._secure_files = []
+ self._vendor_files = []
config_file_override = os.environ.pop('OS_CLIENT_CONFIG_FILE', None)
if config_file_override:
diff --git a/os_client_config/tests/test_config.py b/os_client_config/tests/test_config.py
index aa5935a..dcc841a 100644
--- a/os_client_config/tests/test_config.py
+++ b/os_client_config/tests/test_config.py
@@ -16,6 +16,7 @@ import argparse
import copy
import os
+import extras
import fixtures
import testtools
import yaml
@@ -577,6 +578,37 @@ class TestConfigArgparse(base.TestCase):
self.assertEqual(cc.region_name, 'region2')
self.assertEqual('my-network', cc.config['external_network'])
+ def test_get_one_cloud_no_yaml_no_cloud(self):
+ c = config.OpenStackConfig(load_yaml_config=False)
+
+ self.assertRaises(
+ exceptions.OpenStackConfigException,
+ c.get_one_cloud,
+ cloud='_test_cloud_regions', region_name='region2', argparse=None)
+
+ def test_get_one_cloud_no_yaml(self):
+ c = config.OpenStackConfig(load_yaml_config=False)
+
+ cc = c.get_one_cloud(
+ region_name='region2', argparse=None,
+ **base.USER_CONF['clouds']['_test_cloud_regions'])
+ # Not using assert_cloud_details because of cache settings which
+ # are not present without the file
+ self.assertIsInstance(cc, cloud_config.CloudConfig)
+ self.assertTrue(extras.safe_hasattr(cc, 'auth'))
+ self.assertIsInstance(cc.auth, dict)
+ self.assertIsNone(cc.cloud)
+ self.assertIn('username', cc.auth)
+ self.assertEqual('testuser', cc.auth['username'])
+ self.assertEqual('testpass', cc.auth['password'])
+ self.assertFalse(cc.config['image_api_use_tasks'])
+ self.assertTrue('project_name' in cc.auth or 'project_id' in cc.auth)
+ if 'project_name' in cc.auth:
+ self.assertEqual('testproject', cc.auth['project_name'])
+ elif 'project_id' in cc.auth:
+ self.assertEqual('testproject', cc.auth['project_id'])
+ self.assertEqual(cc.region_name, 'region2')
+
def test_fix_env_args(self):
c = config.OpenStackConfig(config_files=[self.cloud_yaml],
vendor_files=[self.vendor_yaml])
diff --git a/releasenotes/notes/load-yaml-3177efca78e5c67a.yaml b/releasenotes/notes/load-yaml-3177efca78e5c67a.yaml
new file mode 100644
index 0000000..2438f83
--- /dev/null
+++ b/releasenotes/notes/load-yaml-3177efca78e5c67a.yaml
@@ -0,0 +1,7 @@
+---
+features:
+ - Added a flag, 'load_yaml_config' that defaults to True.
+ If set to false, no clouds.yaml files will be loaded. This
+ is beneficial if os-client-config wants to be used inside of
+ a service where end-user clouds.yaml files would make things
+ more confusing.