From b8b14d27a2ece042553a82b82fb0a3a7f3896fdf Mon Sep 17 00:00:00 2001 From: spisarski Date: Tue, 25 Jul 2017 14:40:09 -0600 Subject: Added region support. Added region_name attribute to OSCreds Added region_name to neutron, nova, glance, heat, and keystone client retrieval Fixed false positive heat connection test. JIRA: SNAPS-50 & SNAPS-146 Change-Id: If3471ed7a2bdd0e6bfc281455c996386d031235d Signed-off-by: spisarski --- snaps/openstack/os_credentials.py | 3 ++ snaps/openstack/tests/conf/os_credentials_tests.py | 17 +++++++--- snaps/openstack/tests/openstack_tests.py | 13 +++++--- snaps/openstack/utils/glance_utils.py | 3 +- snaps/openstack/utils/heat_utils.py | 3 +- snaps/openstack/utils/keystone_utils.py | 4 ++- snaps/openstack/utils/neutron_utils.py | 3 +- snaps/openstack/utils/nova_utils.py | 3 +- snaps/openstack/utils/tests/heat_utils_tests.py | 39 ++++++++++++++-------- 9 files changed, 62 insertions(+), 26 deletions(-) diff --git a/snaps/openstack/os_credentials.py b/snaps/openstack/os_credentials.py index 4c681ac..3054478 100644 --- a/snaps/openstack/os_credentials.py +++ b/snaps/openstack/os_credentials.py @@ -51,6 +51,7 @@ class OSCreds: is specified for https verification, or set to be False to disable server certificate verification without cert file + :param region_name: the region (optional default = None) """ self.username = kwargs.get('username') self.password = kwargs.get('password') @@ -97,6 +98,8 @@ class OSCreds: else: self.interface = kwargs['interface'] + self.region_name = kwargs.get('region_name', None) + self.cacert = False if kwargs.get('cacert') is not None: if isinstance(kwargs.get('cacert'), str): diff --git a/snaps/openstack/tests/conf/os_credentials_tests.py b/snaps/openstack/tests/conf/os_credentials_tests.py index cde8161..e7c34b9 100644 --- a/snaps/openstack/tests/conf/os_credentials_tests.py +++ b/snaps/openstack/tests/conf/os_credentials_tests.py @@ -162,6 +162,7 @@ class OSCredsUnitTests(unittest.TestCase): self.assertEqual('admin', os_creds.interface) self.assertFalse(os_creds.cacert) self.assertIsNone(os_creds.proxy_settings) + self.assertIsNone(os_creds.region_name) def test_minimal_kwargs(self): os_creds = OSCreds(**{'username': 'foo', 'password': 'bar', @@ -180,6 +181,7 @@ class OSCredsUnitTests(unittest.TestCase): self.assertEqual('admin', os_creds.interface) self.assertFalse(os_creds.cacert) self.assertIsNone(os_creds.proxy_settings) + self.assertIsNone(os_creds.region_name) def test_all_kwargs_versions_str(self): os_creds = OSCreds( @@ -187,7 +189,7 @@ class OSCredsUnitTests(unittest.TestCase): 'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello', 'identity_api_version': '5', 'image_api_version': '6', 'compute_api_version': '7', 'heat_api_version': '8.0', - 'cacert': 'true'}) + 'cacert': 'true', 'region_name': 'test_region'}) self.assertEqual('foo', os_creds.username) self.assertEqual('bar', os_creds.password) self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url) @@ -201,6 +203,7 @@ class OSCredsUnitTests(unittest.TestCase): self.assertEqual('admin', os_creds.interface) self.assertTrue(os_creds.cacert) self.assertIsNone(os_creds.proxy_settings) + self.assertEqual('test_region', os_creds.region_name) def test_all_kwargs_versions_num(self): os_creds = OSCreds( @@ -208,7 +211,7 @@ class OSCredsUnitTests(unittest.TestCase): 'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello', 'identity_api_version': 5, 'image_api_version': 6, 'compute_api_version': 7, 'heat_api_version': 8.0, - 'cacert': True}) + 'cacert': True, 'region_name': 'test_region'}) self.assertEqual('foo', os_creds.username) self.assertEqual('bar', os_creds.password) self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url) @@ -222,6 +225,7 @@ class OSCredsUnitTests(unittest.TestCase): self.assertEqual('admin', os_creds.interface) self.assertTrue(os_creds.cacert) self.assertIsNone(os_creds.proxy_settings) + self.assertEqual('test_region', os_creds.region_name) def test_proxy_settings_obj(self): proxy_settings = ProxySettings(host='foo', port=1234) @@ -243,13 +247,15 @@ class OSCredsUnitTests(unittest.TestCase): self.assertEqual('foo', os_creds.proxy_settings.host) self.assertEqual(1234, os_creds.proxy_settings.port) self.assertIsNone(os_creds.proxy_settings.ssh_proxy_cmd) + self.assertIsNone(os_creds.region_name) def test_proxy_settings_obj_kwargs(self): proxy_settings = ProxySettings(host='foo', port=1234) os_creds = OSCreds(**{'username': 'foo', 'password': 'bar', 'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello', - 'proxy_settings': proxy_settings}) + 'proxy_settings': proxy_settings, + 'region_name': 'test_region'}) self.assertEqual('foo', os_creds.username) self.assertEqual('bar', os_creds.password) self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url) @@ -265,6 +271,7 @@ class OSCredsUnitTests(unittest.TestCase): self.assertEqual('foo', os_creds.proxy_settings.host) self.assertEqual(1234, os_creds.proxy_settings.port) self.assertIsNone(os_creds.proxy_settings.ssh_proxy_cmd) + self.assertEqual('test_region', os_creds.region_name) def test_proxy_settings_dict(self): os_creds = OSCreds( @@ -290,7 +297,8 @@ class OSCredsUnitTests(unittest.TestCase): os_creds = OSCreds(**{'username': 'foo', 'password': 'bar', 'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello', - 'proxy_settings': {'host': 'foo', 'port': 1234}}) + 'proxy_settings': {'host': 'foo', 'port': 1234}, + 'region_name': 'test_region'}) self.assertEqual('foo', os_creds.username) self.assertEqual('bar', os_creds.password) self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url) @@ -306,3 +314,4 @@ class OSCredsUnitTests(unittest.TestCase): self.assertEqual('foo', os_creds.proxy_settings.host) self.assertEqual(1234, os_creds.proxy_settings.port) self.assertIsNone(os_creds.proxy_settings.ssh_proxy_cmd) + self.assertEqual('test_region', os_creds.region_name) diff --git a/snaps/openstack/tests/openstack_tests.py b/snaps/openstack/tests/openstack_tests.py index 855beb5..67269c6 100644 --- a/snaps/openstack/tests/openstack_tests.py +++ b/snaps/openstack/tests/openstack_tests.py @@ -93,11 +93,14 @@ def get_credentials(os_env_file=None, proxy_settings_str=None, 'network_api_version': config.get('OS_NETWORK_API_VERSION'), 'compute_api_version': config.get('OS_COMPUTE_API_VERSION'), 'heat_api_version': config.get('OS_HEAT_API_VERSION'), - 'user_domain_id': config.get('OS_USER_DOMAIN_ID'), - 'project_domain_id': config.get('OS_PROJECT_DOMAIN_ID'), + 'user_domain_id': config.get( + 'OS_USER_DOMAIN_ID', config.get('OS_USER_DOMAIN_NAME')), + 'project_domain_id': config.get( + 'OS_PROJECT_DOMAIN_ID', config.get('OS_PROJECT_DOMAIN_NAME')), 'interface': interface, 'proxy_settings': proxy_settings, - 'cacert': https_cacert} + 'cacert': https_cacert, + 'region_name': config.get('OS_REGION_NAME')} else: logger.info('Reading development os_env file - ' + dev_os_env_file) config = file_utils.read_yaml(dev_os_env_file) @@ -123,7 +126,9 @@ def get_credentials(os_env_file=None, proxy_settings_str=None, 'user_domain_id': config.get('user_domain_id'), 'project_domain_id': config.get('project_domain_id'), 'interface': config.get('interface'), - 'proxy_settings': proxy_settings, 'cacert': config.get('cacert')} + 'proxy_settings': proxy_settings, + 'cacert': config.get('cacert'), + 'region_name': config.get('region_name')} os_creds = OSCreds(**creds_dict) logger.info('OS Credentials = %s', os_creds) diff --git a/snaps/openstack/utils/glance_utils.py b/snaps/openstack/utils/glance_utils.py index 8479be3..49bfe95 100644 --- a/snaps/openstack/utils/glance_utils.py +++ b/snaps/openstack/utils/glance_utils.py @@ -40,7 +40,8 @@ def glance_client(os_creds): :return: the glance client """ return Client(version=os_creds.image_api_version, - session=keystone_utils.keystone_session(os_creds)) + session=keystone_utils.keystone_session(os_creds), + region_name=os_creds.region_name) def get_image(glance, image_name=None): diff --git a/snaps/openstack/utils/heat_utils.py b/snaps/openstack/utils/heat_utils.py index a631b35..ae367a0 100644 --- a/snaps/openstack/utils/heat_utils.py +++ b/snaps/openstack/utils/heat_utils.py @@ -37,7 +37,8 @@ def heat_client(os_creds): """ logger.debug('Retrieving Nova Client') return Client(os_creds.heat_api_version, - session=keystone_utils.keystone_session(os_creds)) + session=keystone_utils.keystone_session(os_creds), + region_name=os_creds.region_name) def get_stack_by_name(heat_cli, stack_name): diff --git a/snaps/openstack/utils/keystone_utils.py b/snaps/openstack/utils/keystone_utils.py index 4eda4e4..8446df0 100644 --- a/snaps/openstack/utils/keystone_utils.py +++ b/snaps/openstack/utils/keystone_utils.py @@ -83,7 +83,9 @@ def keystone_client(os_creds): """ return Client( version=os_creds.identity_api_version, - session=keystone_session(os_creds), interface=os_creds.interface) + session=keystone_session(os_creds), + interface=os_creds.interface, + region_name=os_creds.region_name) def get_endpoint(os_creds, service_type, interface='public'): diff --git a/snaps/openstack/utils/neutron_utils.py b/snaps/openstack/utils/neutron_utils.py index d93faa0..bf8cb08 100644 --- a/snaps/openstack/utils/neutron_utils.py +++ b/snaps/openstack/utils/neutron_utils.py @@ -40,7 +40,8 @@ def neutron_client(os_creds): :return: the client object """ return Client(api_version=os_creds.network_api_version, - session=keystone_utils.keystone_session(os_creds)) + session=keystone_utils.keystone_session(os_creds), + region_name=os_creds.region_name) def create_network(neutron, os_creds, network_settings): diff --git a/snaps/openstack/utils/nova_utils.py b/snaps/openstack/utils/nova_utils.py index 70b1e7b..ab434f1 100644 --- a/snaps/openstack/utils/nova_utils.py +++ b/snaps/openstack/utils/nova_utils.py @@ -45,7 +45,8 @@ def nova_client(os_creds): """ logger.debug('Retrieving Nova Client') return Client(os_creds.compute_api_version, - session=keystone_utils.keystone_session(os_creds)) + session=keystone_utils.keystone_session(os_creds), + region_name=os_creds.region_name) def create_server(nova, neutron, glance, instance_settings, image_settings, diff --git a/snaps/openstack/utils/tests/heat_utils_tests.py b/snaps/openstack/utils/tests/heat_utils_tests.py index 2ef0c68..dda1111 100644 --- a/snaps/openstack/utils/tests/heat_utils_tests.py +++ b/snaps/openstack/utils/tests/heat_utils_tests.py @@ -44,7 +44,9 @@ class HeatSmokeTests(OSComponentTestCase): heat = heat_utils.heat_client(self.os_creds) # This should not throw an exception - heat.stacks.list() + stacks = heat.stacks.list() + for stack in stacks: + print stack def test_nova_connect_fail(self): """ @@ -52,13 +54,17 @@ class HeatSmokeTests(OSComponentTestCase): """ from snaps.openstack.os_credentials import OSCreds - nova = heat_utils.heat_client( - OSCreds(username='user', password='pass', auth_url=self.os_creds.auth_url, - project_name=self.os_creds.project_name, proxy_settings=self.os_creds.proxy_settings)) + heat = heat_utils.heat_client( + OSCreds(username='user', password='pass', + auth_url=self.os_creds.auth_url, + project_name=self.os_creds.project_name, + proxy_settings=self.os_creds.proxy_settings)) + stacks = heat.stacks.list() # This should throw an exception with self.assertRaises(Exception): - nova.flavors.list() + for stack in stacks: + print stack class HeatUtilsCreateStackTests(OSComponentTestCase): @@ -68,15 +74,16 @@ class HeatUtilsCreateStackTests(OSComponentTestCase): def setUp(self): """ - Instantiates the CreateImage object that is responsible for downloading and creating an OS image file - within OpenStack + Instantiates the CreateImage object that is responsible for downloading + and creating an OS image file within OpenStack """ guid = self.__class__.__name__ + '-' + str(uuid.uuid4()) stack_name = self.__class__.__name__ + '-' + str(guid) + '-stack' self.image_creator = OpenStackImage( self.os_creds, openstack_tests.cirros_image_settings( - name=self.__class__.__name__ + '-' + str(guid) + '-image', image_metadata=self.image_metadata)) + name=self.__class__.__name__ + '-' + str(guid) + '-image', + image_metadata=self.image_metadata)) self.image_creator.create() # Create Flavor @@ -89,7 +96,9 @@ class HeatUtilsCreateStackTests(OSComponentTestCase): 'flavor_name': self.flavor_creator.flavor_settings.name} heat_tmplt_path = pkg_resources.resource_filename( 'snaps.openstack.tests.heat', 'test_heat_template.yaml') - self.stack_settings = StackSettings(name=stack_name, template_path=heat_tmplt_path, env_values=env_values) + self.stack_settings = StackSettings( + name=stack_name, template_path=heat_tmplt_path, + env_values=env_values) self.stack = None self.heat_client = heat_utils.heat_client(self.os_creds) @@ -119,12 +128,15 @@ class HeatUtilsCreateStackTests(OSComponentTestCase): """ Tests the creation of an OpenStack keypair that does not exist. """ - self.stack = heat_utils.create_stack(self.heat_client, self.stack_settings) + self.stack = heat_utils.create_stack(self.heat_client, + self.stack_settings) - stack_query_1 = heat_utils.get_stack_by_name(self.heat_client, self.stack_settings.name) + stack_query_1 = heat_utils.get_stack_by_name(self.heat_client, + self.stack_settings.name) self.assertEqual(self.stack.id, stack_query_1.id) - stack_query_2 = heat_utils.get_stack_by_id(self.heat_client, self.stack.id) + stack_query_2 = heat_utils.get_stack_by_id(self.heat_client, + self.stack.id) self.assertEqual(self.stack.id, stack_query_2.id) outputs = heat_utils.get_stack_outputs(self.heat_client, self.stack.id) @@ -135,7 +147,8 @@ class HeatUtilsCreateStackTests(OSComponentTestCase): is_active = False while time.time() < end_time: - status = heat_utils.get_stack_status(self.heat_client, self.stack.id) + status = heat_utils.get_stack_status(self.heat_client, + self.stack.id) if status == create_stack.STATUS_CREATE_COMPLETE: is_active = True break -- cgit 1.2.3-korg