Refactored port retrieval to include PortSettigs. 95/38695/1
authorspisarski <s.pisarski@cablelabs.com>
Thu, 3 Aug 2017 16:57:49 +0000 (10:57 -0600)
committerspisarski <s.pisarski@cablelabs.com>
Thu, 3 Aug 2017 16:57:49 +0000 (10:57 -0600)
Refactored neutron_utils#get_port_by_name to get_port while
adding in a port_settings object for more robust query options.

JIRA: SNAPS-162

Change-Id: I01222ad344224db94615859448ad05d8d5bc0c30
Signed-off-by: spisarski <s.pisarski@cablelabs.com>
snaps/openstack/create_instance.py
snaps/openstack/create_router.py
snaps/openstack/tests/create_router_tests.py
snaps/openstack/utils/neutron_utils.py
snaps/openstack/utils/nova_utils.py

index 252f2fe..ef8b4f3 100644 (file)
@@ -259,8 +259,8 @@ class OpenStackVmInstance:
         ports = list()
 
         for port_setting in port_settings:
-            port = neutron_utils.get_port_by_name(self.__neutron,
-                                                  port_setting.name)
+            port = neutron_utils.get_port(
+                self.__neutron, port_settings=port_setting)
             if port:
                 ports.append((port_setting.name, port))
             elif not cleanup:
index 3e0d904..6bbfcf9 100644 (file)
@@ -89,8 +89,8 @@ class OpenStackRouter:
                     'Subnet not found with name ' + internal_subnet_name)
 
         for port_setting in self.router_settings.port_settings:
-            port = neutron_utils.get_port_by_name(self.__neutron,
-                                                  port_setting.name)
+            port = neutron_utils.get_port(
+                self.__neutron, port_settings=port_setting)
             logger.info(
                 'Retrieved port %s for router - %s', port_setting.name,
                 self.router_settings.name)
index 6e10d66..6f37445 100644 (file)
@@ -326,6 +326,13 @@ class CreateRouterSuccessTests(OSIntegrationTestCase):
 
         self.assertTrue(verify_router_attributes(router, self.router_creator))
 
+        # Instantiate second identical creator to ensure a second router
+        # has not been created
+        router_creator2 = create_router.OpenStackRouter(
+            self.os_creds, router_settings)
+        router2 = router_creator2.create()
+        self.assertIsNotNone(self.router_creator.get_router(), router2)
+
     def test_create_router_external_network(self):
         """
         Test creation of a router connected to an external network and a
index 061bc56..5789e17 100644 (file)
@@ -307,18 +307,32 @@ def delete_port(neutron, port):
     neutron.delete_port(port.id)
 
 
-def get_port_by_name(neutron, port_name):
+def get_port(neutron, port_settings=None, port_name=None):
     """
-    Returns the first port object (dictionary) found with a given name
+    Returns the first port object (dictionary) found for the given query
     :param neutron: the client
-    :param port_name: the name of the port to retrieve
+    :param port_settings: the PortSettings object used for generating the query
+    :param port_name: if port_settings is None, this name is the value to place
+                      into the query
     :return: a SNAPS-OO Port domain object
     """
-    ports = neutron.list_ports(**{'name': port_name})
+    port_filter = dict()
+
+    if port_settings:
+        port_filter['name'] = port_settings.name
+        if port_settings.admin_state_up:
+            port_filter['admin_state_up'] = port_settings.admin_state_up
+        if port_settings.device_id:
+            port_filter['device_id'] = port_settings.device_id
+        if port_settings.mac_address:
+            port_filter['mac_address'] = port_settings.mac_address
+    elif port_name:
+        port_filter['name'] = port_name
+
+    ports = neutron.list_ports(**port_filter)
     for port in ports['ports']:
-        if port['name'] == port_name:
-            return Port(name=port['name'], id=port['id'],
-                        ips=port['fixed_ips'], mac_address=port['mac_address'])
+        return Port(name=port['name'], id=port['id'],
+                    ips=port['fixed_ips'], mac_address=port['mac_address'])
     return None
 
 
index a0c028a..d6a8e02 100644 (file)
@@ -65,8 +65,8 @@ def create_server(nova, neutron, glance, instance_settings, image_settings,
     ports = list()
 
     for port_setting in instance_settings.port_settings:
-        ports.append(neutron_utils.get_port_by_name(
-            neutron, port_setting.name))
+        ports.append(neutron_utils.get_port(
+            neutron, port_settings=port_setting))
     nics = []
     for port in ports:
         kv = dict()