From f9d02c076974168677bf5fdb02f26caf73924fb8 Mon Sep 17 00:00:00 2001 From: Tim Rozet Date: Mon, 18 Sep 2017 21:48:45 -0400 Subject: Improves clean to cleanup virsh nets and and other bridges 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 (cherry picked from commit 02dc854a504569da15b0e41353a9f456e02599ad) --- apex/clean.py | 30 +++++++++++++++++++++++++----- apex/tests/test_apex_clean.py | 12 ++++++++++++ 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/apex/clean.py b/apex/clean.py index 9d0e648e..0b1be860 100644 --- a/apex/clean.py +++ b/apex/clean.py @@ -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() diff --git a/apex/tests/test_apex_clean.py b/apex/tests/test_apex_clean.py index b6b9d428..b3ead6f7 100644 --- a/apex/tests/test_apex_clean.py +++ b/apex/tests/test_apex_clean.py @@ -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) -- cgit 1.2.3-korg