Refactor network retrieval API calls. 47/38647/2
authorspisarski <s.pisarski@cablelabs.com>
Wed, 2 Aug 2017 19:19:58 +0000 (13:19 -0600)
committerspisarski <s.pisarski@cablelabs.com>
Wed, 2 Aug 2017 20:19:04 +0000 (14:19 -0600)
Refactored neutron_utils#get_network() to also accept a
NetworkSettings object for more robust queries in addition to
the old network_name parameter. Also refactored neutron_utils#
get_network_by_id to add in the ID to list_networks((**{'id': id)
and returning the first item contains the expected ID value.

JIRA: SNAPS-161

Change-Id: Ie670a442dd70633bbef7a1233e630672ebac6b0c
Signed-off-by: spisarski <s.pisarski@cablelabs.com>
snaps/openstack/create_network.py
snaps/openstack/create_router.py
snaps/openstack/tests/create_network_tests.py
snaps/openstack/utils/neutron_utils.py
snaps/openstack/utils/tests/neutron_utils_tests.py

index 2f26c43..4caef12 100644 (file)
@@ -53,8 +53,8 @@ class OpenStackNetwork:
         logger.info(
             'Creating neutron network %s...' % self.network_settings.name)
         net_inst = neutron_utils.get_network(
-            self.__neutron, self.network_settings.name,
-            self.network_settings.get_project_id(self.__os_creds))
+            self.__neutron, network_settings=self.network_settings,
+            project_id=self.network_settings.get_project_id(self.__os_creds))
         if net_inst:
             self.__network = net_inst
         else:
@@ -498,9 +498,8 @@ class PortSettings:
                 project_id = project.id
 
         if not self.network:
-            self.network = neutron_utils.get_network(neutron,
-                                                     self.network_name,
-                                                     project_id)
+            self.network = neutron_utils.get_network(
+                neutron, network_name=self.network_name, project_id=project_id)
         if not self.network:
             raise PortSettingsError(
                 'Cannot locate network with name - ' + self.network_name)
index 209f9d2..3e0d904 100644 (file)
@@ -233,8 +233,6 @@ class RouterSettings:
         out = dict()
         ext_gw = dict()
 
-        project_id = None
-
         if self.name:
             out['name'] = self.name
         if self.project_name:
@@ -253,7 +251,8 @@ class RouterSettings:
         if self.admin_state_up is not None:
             out['admin_state_up'] = self.admin_state_up
         if self.external_gateway:
-            ext_net = neutron_utils.get_network(neutron, self.external_gateway)
+            ext_net = neutron_utils.get_network(
+                neutron, network_name=self.external_gateway)
             if ext_net:
                 ext_gw['network_id'] = ext_net.id
                 out['external_gateway_info'] = ext_gw
index e941c67..936eda9 100644 (file)
@@ -409,7 +409,7 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
         neutron_utils.delete_network(self.neutron,
                                      self.net_creator.get_network())
         self.assertIsNone(neutron_utils.get_network(
-            self.neutron, self.net_creator.network_settings.name))
+            self.neutron, network_settings=self.net_creator.network_settings))
 
         # This shall not throw an exception here
         self.net_creator.clean()
@@ -479,7 +479,7 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
         self.net_creator.create()
 
         retrieved_net = neutron_utils.get_network(
-            self.neutron, self.net_config.network_settings.name)
+            self.neutron, network_settings=self.net_config.network_settings)
 
         self.assertEqual(self.net_creator.get_network().id, retrieved_net.id)
 
@@ -509,7 +509,7 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
         self.net_creator.create()
 
         retrieved_net = neutron_utils.get_network(
-            self.neutron, self.net_config.network_settings.name)
+            self.neutron, network_settings=self.net_config.network_settings)
 
         self.assertEqual(self.net_creator.get_network().id, retrieved_net.id)
 
index 19325a8..061bc56 100644 (file)
@@ -74,42 +74,45 @@ def delete_network(neutron, network):
         neutron.delete_network(network.id)
 
 
-def get_network(neutron, network_name, project_id=None):
+def get_network(neutron, network_settings=None, network_name=None,
+                project_id=None):
     """
-    Returns an object (dictionary) of the first network found with a given name
-    and project_id (if included)
+    Returns Network SNAPS-OO domain object the first network found with
+    either the given attributes from the network_settings object if not None,
+    else the query will use just the name from the network_name parameter.
+    When the project_id is included, that will be added to the query filter.
     :param neutron: the client
+    :param network_settings: the NetworkSettings object used to create filter
     :param network_name: the name of the network to retrieve
     :param project_id: the id of the network's project
     :return: a SNAPS-OO Network domain object
     """
     net_filter = dict()
-    if network_name:
+    if network_settings:
+        net_filter['name'] = network_settings.name
+    elif network_name:
         net_filter['name'] = network_name
+
     if project_id:
         net_filter['project_id'] = project_id
 
     networks = neutron.list_networks(**net_filter)
     for network, netInsts in networks.items():
         for inst in netInsts:
-            if inst.get('name') == network_name:
-                return Network(**inst)
-    return None
+            return Network(**inst)
 
 
 def get_network_by_id(neutron, network_id):
     """
-    Returns the network object (dictionary) with the given ID
+    Returns the network object (dictionary) with the given ID else None
     :param neutron: the client
     :param network_id: the id of the network to retrieve
     :return: a SNAPS-OO Network domain object
     """
     networks = neutron.list_networks(**{'id': network_id})
-    for network, netInsts in networks.items():
-        for inst in netInsts:
-            if inst.get('id') == network_id:
-                return Network(**inst)
-    return None
+    for network in networks['networks']:
+        if network['id'] == network_id:
+            return Network(**network)
 
 
 def create_subnet(neutron, subnet_settings, os_creds, network=None):
@@ -486,7 +489,7 @@ def create_floating_ip(neutron, ext_net_name):
     :return: the SNAPS FloatingIp object
     """
     logger.info('Creating floating ip to external network - ' + ext_net_name)
-    ext_net = get_network(neutron, ext_net_name)
+    ext_net = get_network(neutron, network_name=ext_net_name)
     if ext_net:
         fip = neutron.create_floatingip(
             body={'floatingip':
index 82bb42e..0b9559a 100644 (file)
@@ -319,7 +319,8 @@ class NeutronUtilsRouterTests(OSComponentTestCase):
         validate_router(self.neutron, self.net_config.router_settings.name,
                         True)
 
-        ext_net = neutron_utils.get_network(self.neutron, self.ext_net_name)
+        ext_net = neutron_utils.get_network(
+            self.neutron, network_name=self.ext_net_name)
         self.assertEqual(
             self.router.external_gateway_info['network_id'], ext_net.id)
 
@@ -805,7 +806,7 @@ def validate_network(neutron, name, exists):
     :param exists: Whether or not the network name should exist or not
     :return: True/False
     """
-    network = neutron_utils.get_network(neutron, name)
+    network = neutron_utils.get_network(neutron, network_name=name)
     if exists and network:
         return True
     if not exists and not network: