Improves clean to cleanup virsh nets and and other bridges 53/42653/1
authorTim Rozet <trozet@redhat.com>
Tue, 19 Sep 2017 01:48:45 +0000 (21:48 -0400)
committerTim Rozet <trozet@redhat.com>
Thu, 21 Sep 2017 13:35:14 +0000 (13:35 +0000)
Currently only the admin and external bridges will be removed from the
jumphost which is only really clean for a baremetal deployment.  Virtual
deployments will leave br-tenant, br-api, br-storage.  This patch
removes those as well as deletes all Apex virsh networks from libvirt.

Also checks if authorized_keys exists before trying to edit it.

Change-Id: I1affe2733ba1dc38fd3b91fb14398454137f00a4
Signed-off-by: Tim Rozet <trozet@redhat.com>
(cherry picked from commit 02dc854a504569da15b0e41353a9f456e02599ad)

apex/clean.py
apex/tests/test_apex_clean.py

index 9d0e648..0b1be86 100644 (file)
@@ -87,12 +87,36 @@ def clean_vms():
 
 def clean_ssh_keys(key_file='/root/.ssh/authorized_keys'):
     logging.info('Removing any stack pub keys from root authorized keys')
+    if not os.path.isfile(key_file):
+        logging.warning("Key file does not exist: ".format(key_file))
+        return
     for line in fileinput.input(key_file, inplace=True):
         line = line.strip('\n')
         if 'stack@undercloud' not in line:
             print(line)
 
 
+def clean_networks():
+    logging.debug('Cleaning all network config')
+    for network in constants.OPNFV_NETWORK_TYPES:
+        logging.info("Cleaning Jump Host Network config for network "
+                     "{}".format(network))
+        jumphost.detach_interface_from_ovs(network)
+        jumphost.remove_ovs_bridge(network)
+
+    conn = libvirt.open('qemu:///system')
+    if not conn:
+        raise ApexCleanException('Unable to open libvirt connection')
+    logging.debug('Destroying all virsh networks')
+    for network in conn.listNetworks():
+        if network in constants.OPNFV_NETWORK_TYPES:
+            virsh_net = conn.networkLookupByName(network)
+            logging.debug("Destroying virsh network: {}".format(network))
+            if virsh_net.isActive():
+                virsh_net.destroy()
+            virsh_net.undefine()
+
+
 def main():
     clean_parser = argparse.ArgumentParser()
     clean_parser.add_argument('-i',
@@ -123,11 +147,7 @@ def main():
     # Delete vbmc
     clean_vbmcs()
     # Clean network config
-    for network in constants.ADMIN_NETWORK, constants.EXTERNAL_NETWORK:
-        logging.info("Cleaning Jump Host Network config for network "
-                     "{}".format(network))
-        jumphost.detach_interface_from_ovs(network)
-        jumphost.remove_ovs_bridge(network)
+    clean_networks()
 
     # clean pub keys from root's auth keys
     clean_ssh_keys()
index b6b9d42..b3ead6f 100644 (file)
@@ -100,3 +100,15 @@ class TestClean:
         ml.listDefinedDomains.return_value = ['undercloud']
         ml.lookupByName.return_value = dummy_domain()
         assert clean.clean_vms() is None
+
+    @patch('apex.network.jumphost.detach_interface_from_ovs')
+    @patch('apex.network.jumphost.remove_ovs_bridge')
+    @patch('libvirt.open')
+    def test_clean_networks(self, mock_libvirt, mock_jumphost_ovs_remove,
+                            mock_jumphost_detach):
+        ml = mock_libvirt.return_value
+        ml.listNetworks.return_value = ['admin', 'external', 'tenant', 'blah']
+        mock_net = ml.networkLookupByName.return_value
+        mock_net.isActive.return_value = True
+        clean.clean_networks()
+        assert_equal(mock_net.destroy.call_count, 3)