Change floating ips management from nova to neutron
authorjose.lausuch <jose.lausuch@ericsson.com>
Fri, 23 Jun 2017 09:32:56 +0000 (11:32 +0200)
committerjose.lausuch <jose.lausuch@ericsson.com>
Mon, 26 Jun 2017 07:47:12 +0000 (09:47 +0200)
Nova does not longer support floating ip creation/deletion.
This patch moves that logic to neutron client.

Change-Id: I2c4146149fe5be534d9c50d78d831b5af1957ad7
Signed-off-by: jose.lausuch <jose.lausuch@ericsson.com>
functest/tests/unit/utils/test_openstack_snapshot.py
functest/tests/unit/utils/test_openstack_utils.py
functest/utils/openstack_clean.py
functest/utils/openstack_snapshot.py
functest/utils/openstack_utils.py

index d3f9399..f359575 100644 (file)
@@ -12,7 +12,7 @@ import unittest
 from functest.utils import openstack_snapshot
 
 
-class OSTackerTesting(unittest.TestCase):
+class OSSnapshotTesting(unittest.TestCase):
 
     def _get_instance(self, key):
         mock_obj = mock.Mock()
@@ -26,6 +26,8 @@ class OSTackerTesting(unittest.TestCase):
         self.test_list = [self._get_instance(1), self._get_instance(2)]
         self.update_list = {'id1': 'name1', 'id2': 'name2'}
         self.update_floatingips = {'id1': 'ip1', 'id2': 'ip2'}
+        self.floatingips_list = [{'id': 'id1', 'floating_ip_address': 'ip1'},
+                                 {'id': 'id2', 'floating_ip_address': 'ip2'}]
         self.test_dict_list = [{'id': 'id1', 'name': 'name1', 'ip': 'ip1'},
                                {'id': 'id2', 'name': 'name2', 'ip': 'ip2'}]
 
@@ -138,8 +140,9 @@ class OSTackerTesting(unittest.TestCase):
     @mock.patch('functest.utils.openstack_snapshot.logger.debug')
     def test_get_floatingips(self, mock_logger_debug):
         with mock.patch('functest.utils.openstack_snapshot.os_utils'
-                        '.get_floating_ips', return_value=self.test_list):
-            resp = openstack_snapshot.get_floatinips(self.client)
+                        '.get_floating_ips',
+                        return_value=self.floatingips_list):
+            resp = openstack_snapshot.get_floatingips(self.client)
             mock_logger_debug.assert_called_once_with("Getting Floating "
                                                       "IPs...")
             self.assertDictEqual(resp, {'floatingips':
@@ -149,7 +152,7 @@ class OSTackerTesting(unittest.TestCase):
     def test_get_floatingips_missing_floatingips(self, mock_logger_debug):
         with mock.patch('functest.utils.openstack_snapshot.os_utils'
                         '.get_floating_ips', return_value=[]):
-            resp = openstack_snapshot.get_floatinips(self.client)
+            resp = openstack_snapshot.get_floatingips(self.client)
             mock_logger_debug.assert_called_once_with("Getting Floating "
                                                       "IPs...")
             self.assertDictEqual(resp, {'floatingips': {}})
@@ -212,7 +215,7 @@ class OSTackerTesting(unittest.TestCase):
                        return_value=self.update_list), \
             mock.patch('functest.utils.openstack_snapshot.get_security_groups',
                        return_value=self.update_list), \
-            mock.patch('functest.utils.openstack_snapshot.get_floatinips',
+            mock.patch('functest.utils.openstack_snapshot.get_floatingips',
                        return_value=self.update_floatingips), \
             mock.patch('functest.utils.openstack_snapshot.get_users',
                        return_value=self.update_list), \
index 0f06b1e..54deb27 100644 (file)
@@ -75,9 +75,8 @@ class OSUtilsTesting(unittest.TestCase):
         self.availability_zone = mock_obj
 
         mock_obj = mock.Mock()
-        attrs = {'id': 'floating_id',
-                 'zoneName': 'test_floating_ip',
-                 'status': 'ok'}
+        attrs = {'floating_network_id': 'floating_id',
+                 'floating_ip_address': 'test_floating_ip'}
         mock_obj.configure_mock(**attrs)
         self.floating_ip = mock_obj
 
@@ -113,8 +112,6 @@ class OSUtilsTesting(unittest.TestCase):
                  'aggregates.delete.return_value': mock.Mock(),
                  'availability_zones.list.return_value':
                  [self.availability_zone],
-                 'floating_ips.list.return_value': [self.floating_ip],
-                 'floating_ips.delete.return_value': mock.Mock(),
                  'hypervisors.list.return_value': [self.hypervisor],
                  'create.return_value': mock.Mock(),
                  'add_security_group.return_value': mock.Mock(),
@@ -271,7 +268,10 @@ class OSUtilsTesting(unittest.TestCase):
                  'create_security_group.return_value': {'security_group':
                                                         self.sec_group},
                  'update_quota.return_value': mock.Mock(),
-                 'delete_security_group.return_value': mock.Mock()
+                 'delete_security_group.return_value': mock.Mock(),
+                 'list_floatingips.return_value': {'floatingips':
+                                                   [self.floating_ip]},
+                 'delete_floatingip.return_value': mock.Mock(),
                  }
         self.neutron_client.configure_mock(**attrs)
 
@@ -721,7 +721,7 @@ class OSUtilsTesting(unittest.TestCase):
 
     def test_get_floating_ips_default(self):
             self.assertEqual(openstack_utils.
-                             get_floating_ips(self.nova_client),
+                             get_floating_ips(self.neutron_client),
                              [self.floating_ip])
 
     @mock.patch('functest.utils.openstack_utils.logger.error')
@@ -867,7 +867,7 @@ class OSUtilsTesting(unittest.TestCase):
 
     def test_delete_floating_ip_default(self):
             self.assertTrue(openstack_utils.
-                            delete_floating_ip(self.nova_client,
+                            delete_floating_ip(self.neutron_client,
                                                'floating_ip_id'))
 
     @mock.patch('functest.utils.openstack_utils.logger.error')
index 0ce0879..229fbf0 100755 (executable)
@@ -135,9 +135,9 @@ def remove_volumes(cinder_client, default_volumes):
                          "NOT be deleted.")
 
 
-def remove_floatingips(nova_client, default_floatingips):
+def remove_floatingips(neutron_client, default_floatingips):
     logger.debug("Removing floating IPs...")
-    floatingips = os_utils.get_floating_ips(nova_client)
+    floatingips = os_utils.get_floating_ips(neutron_client)
     if floatingips is None or len(floatingips) == 0:
         logger.debug("No floating IPs found.")
         return
@@ -151,7 +151,7 @@ def remove_floatingips(nova_client, default_floatingips):
         if (fip_id not in default_floatingips and
                 fip_ip not in default_floatingips.values()):
             logger.debug("Removing floating IP %s ..." % fip_id)
-            if os_utils.delete_floating_ip(nova_client, fip_id):
+            if os_utils.delete_floating_ip(neutron_client, fip_id):
                 logger.debug("  > Done!")
                 deleted += 1
             else:
@@ -163,7 +163,7 @@ def remove_floatingips(nova_client, default_floatingips):
 
     timeout = 50
     while timeout > 0:
-        floatingips = os_utils.get_floating_ips(nova_client)
+        floatingips = os_utils.get_floating_ips(neutron_client)
         if floatingips is None or len(floatingips) == (init_len - deleted):
             break
         else:
@@ -415,7 +415,7 @@ def main():
     separator()
     remove_volumes(cinder_client, default_volumes)
     separator()
-    remove_floatingips(nova_client, default_floatingips)
+    remove_floatingips(neutron_client, default_floatingips)
     separator()
     remove_networks(neutron_client, default_networks, default_routers)
     separator()
index 233c316..a03c503 100755 (executable)
@@ -98,13 +98,14 @@ def get_security_groups(neutron_client):
     return {'secgroups': dic_secgroups}
 
 
-def get_floatinips(nova_client):
+def get_floatingips(neutron_client):
     logger.debug("Getting Floating IPs...")
     dic_floatingips = {}
-    floatingips = os_utils.get_floating_ips(nova_client)
+    floatingips = os_utils.get_floating_ips(neutron_client)
     if not (floatingips is None or len(floatingips) == 0):
         for floatingip in floatingips:
-            dic_floatingips.update({floatingip.id: floatingip.ip})
+            dic_floatingips.update({floatingip['id']:
+                                    floatingip['floating_ip_address']})
     return {'floatingips': dic_floatingips}
 
 
@@ -149,7 +150,7 @@ def main():
     snapshot.update(get_networks(neutron_client))
     snapshot.update(get_routers(neutron_client))
     snapshot.update(get_security_groups(neutron_client))
-    snapshot.update(get_floatinips(nova_client))
+    snapshot.update(get_floatingips(neutron_client))
     snapshot.update(get_users(keystone_client))
     snapshot.update(get_tenants(keystone_client))
 
index a896626..354a562 100644 (file)
@@ -422,12 +422,12 @@ def get_or_create_flavor(flavor_name, ram, disk, vcpus, public=True):
     return flavor_exists, flavor_id
 
 
-def get_floating_ips(nova_client):
+def get_floating_ips(neutron_client):
     try:
-        floating_ips = nova_client.floating_ips.list()
-        return floating_ips
+        floating_ips = neutron_client.list_floatingips()
+        return floating_ips['floatingips']
     except Exception as e:
-        logger.error("Error [get_floating_ips(nova_client)]: %s" % e)
+        logger.error("Error [get_floating_ips(neutron_client)]: %s" % e)
         return None
 
 
@@ -590,12 +590,12 @@ def delete_instance(nova_client, instance_id):
         return False
 
 
-def delete_floating_ip(nova_client, floatingip_id):
+def delete_floating_ip(neutron_client, floatingip_id):
     try:
-        nova_client.floating_ips.delete(floatingip_id)
+        neutron_client.delete_floatingip(floatingip_id)
         return True
     except Exception as e:
-        logger.error("Error [delete_floating_ip(nova_client, '%s')]: %s"
+        logger.error("Error [delete_floating_ip(neutron_client, '%s')]: %s"
                      % (floatingip_id, e))
         return False