Added region support. 05/38105/2
authorspisarski <s.pisarski@cablelabs.com>
Tue, 25 Jul 2017 20:40:09 +0000 (14:40 -0600)
committerspisarski <s.pisarski@cablelabs.com>
Tue, 25 Jul 2017 21:36:23 +0000 (15:36 -0600)
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 <s.pisarski@cablelabs.com>
snaps/openstack/os_credentials.py
snaps/openstack/tests/conf/os_credentials_tests.py
snaps/openstack/tests/openstack_tests.py
snaps/openstack/utils/glance_utils.py
snaps/openstack/utils/heat_utils.py
snaps/openstack/utils/keystone_utils.py
snaps/openstack/utils/neutron_utils.py
snaps/openstack/utils/nova_utils.py
snaps/openstack/utils/tests/heat_utils_tests.py

index 4c681ac..3054478 100644 (file)
@@ -51,6 +51,7 @@ class OSCreds:
                        is specified for https verification, or set to be False
                        to disable server certificate verification without cert
                        file
                        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')
         """
         self.username = kwargs.get('username')
         self.password = kwargs.get('password')
@@ -97,6 +98,8 @@ class OSCreds:
         else:
             self.interface = kwargs['interface']
 
         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):
         self.cacert = False
         if kwargs.get('cacert') is not None:
             if isinstance(kwargs.get('cacert'), str):
index cde8161..e7c34b9 100644 (file)
@@ -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.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',
 
     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.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(
 
     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',
                '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)
         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('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(
 
     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,
                '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)
         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('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)
 
     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.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',
 
     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)
         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('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(
 
     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',
         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)
         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('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)
index 855beb5..67269c6 100644 (file)
@@ -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'),
             '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,
             '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)
     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'),
             '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)
 
     os_creds = OSCreds(**creds_dict)
     logger.info('OS Credentials = %s', os_creds)
index 8479be3..49bfe95 100644 (file)
@@ -40,7 +40,8 @@ def glance_client(os_creds):
     :return: the glance client
     """
     return Client(version=os_creds.image_api_version,
     :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):
 
 
 def get_image(glance, image_name=None):
index a631b35..ae367a0 100644 (file)
@@ -37,7 +37,8 @@ def heat_client(os_creds):
     """
     logger.debug('Retrieving Nova Client')
     return Client(os_creds.heat_api_version,
     """
     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):
 
 
 def get_stack_by_name(heat_cli, stack_name):
index 4eda4e4..8446df0 100644 (file)
@@ -83,7 +83,9 @@ def keystone_client(os_creds):
     """
     return Client(
         version=os_creds.identity_api_version,
     """
     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'):
 
 
 def get_endpoint(os_creds, service_type, interface='public'):
index d93faa0..bf8cb08 100644 (file)
@@ -40,7 +40,8 @@ def neutron_client(os_creds):
     :return: the client object
     """
     return Client(api_version=os_creds.network_api_version,
     :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):
 
 
 def create_network(neutron, os_creds, network_settings):
index 70b1e7b..ab434f1 100644 (file)
@@ -45,7 +45,8 @@ def nova_client(os_creds):
     """
     logger.debug('Retrieving Nova Client')
     return Client(os_creds.compute_api_version,
     """
     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,
 
 
 def create_server(nova, neutron, glance, instance_settings, image_settings,
index 2ef0c68..dda1111 100644 (file)
@@ -44,7 +44,9 @@ class HeatSmokeTests(OSComponentTestCase):
         heat = heat_utils.heat_client(self.os_creds)
 
         # This should not throw an exception
         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):
         """
 
     def test_nova_connect_fail(self):
         """
@@ -52,13 +54,17 @@ class HeatSmokeTests(OSComponentTestCase):
         """
         from snaps.openstack.os_credentials import OSCreds
 
         """
         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):
 
         # This should throw an exception
         with self.assertRaises(Exception):
-            nova.flavors.list()
+            for stack in stacks:
+                print stack
 
 
 class HeatUtilsCreateStackTests(OSComponentTestCase):
 
 
 class HeatUtilsCreateStackTests(OSComponentTestCase):
@@ -68,15 +74,16 @@ class HeatUtilsCreateStackTests(OSComponentTestCase):
 
     def setUp(self):
         """
 
     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(
         """
         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
         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')
                       '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)
 
         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.
         """
         """
         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)
 
         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)
         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:
 
         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
             if status == create_stack.STATUS_CREATE_COMPLETE:
                 is_active = True
                 break