summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-10-16 17:09:04 +0000
committerGerrit Code Review <review@openstack.org>2015-10-16 17:09:04 +0000
commit56e5df33316ae6b6e3ef3ab2f6bf1a744130d0d8 (patch)
tree79a36de70be4878c545b843bfcc24e2901a12a9a
parentd4e4aaa0f9209b6338d24d2ed6ff87d768fe453f (diff)
parent512ca01715683f7c46985677e7b9be8e3d7a191c (diff)
downloados-client-config-56e5df33316ae6b6e3ef3ab2f6bf1a744130d0d8.tar.gz
Merge "Validate requested region against region list"
-rw-r--r--os_client_config/config.py10
-rw-r--r--os_client_config/tests/test_config.py17
2 files changed, 26 insertions, 1 deletions
diff --git a/os_client_config/config.py b/os_client_config/config.py
index bff2f5c..b2c1649 100644
--- a/os_client_config/config.py
+++ b/os_client_config/config.py
@@ -573,7 +573,15 @@ class OpenStackConfig(object):
# Regions is a list that we can use to create a list of cloud/region
# objects. It does not belong in the single-cloud dict
- config.pop('regions', None)
+ regions = config.pop('regions', None)
+ if regions and args['region_name'] not in regions:
+ raise exceptions.OpenStackConfigException(
+ 'Region {region_name} is not a valid region name for cloud'
+ ' {cloud}. Valid choices are {region_list}. Please note that'
+ ' region names are case sensitive.'.format(
+ region_name=args['region_name'],
+ region_list=','.join(regions),
+ cloud=cloud))
# Can't just do update, because None values take over
for (key, val) in iter(args.items()):
diff --git a/os_client_config/tests/test_config.py b/os_client_config/tests/test_config.py
index 271c40b..0130748 100644
--- a/os_client_config/tests/test_config.py
+++ b/os_client_config/tests/test_config.py
@@ -298,6 +298,23 @@ class TestConfigArgparse(base.TestCase):
self.assertEqual(cc.region_name, 'region1')
self.assertIsNone(cc.snack_type)
+ def test_get_one_cloud_bad_region(self):
+ c = config.OpenStackConfig(config_files=[self.cloud_yaml],
+ vendor_files=[self.vendor_yaml])
+
+ self.assertRaises(
+ exceptions.OpenStackConfigException,
+ c.get_one_cloud,
+ cloud='_test_cloud_regions', region_name='bad')
+
+ def test_get_one_cloud_bad_region_no_regions(self):
+ c = config.OpenStackConfig(config_files=[self.cloud_yaml],
+ vendor_files=[self.vendor_yaml])
+
+ cc = c.get_one_cloud(cloud='_test-cloud_', region_name='bad_region')
+ self._assert_cloud_details(cc)
+ self.assertEqual(cc.region_name, 'bad_region')
+
def test_get_one_cloud_no_argparse_region2(self):
c = config.OpenStackConfig(config_files=[self.cloud_yaml],
vendor_files=[self.vendor_yaml])