X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=testcases%2FVIM%2FOpenStack%2FCI%2Flibraries%2Fclean_openstack.py;h=dca188f5bd6db6cd7a6f4eca1738cd315aba11ab;hb=4f7e44541bd8c1d20d547891170e48e521f5db3c;hp=b77c0ee8cc1ca756f4f0436a32685cf4d5218d25;hpb=98ec6ed31b2c56da9042ea075f5dabb6f2138f1b;p=functest.git diff --git a/testcases/VIM/OpenStack/CI/libraries/clean_openstack.py b/testcases/VIM/OpenStack/CI/libraries/clean_openstack.py index b77c0ee8c..dca188f5b 100644 --- a/testcases/VIM/OpenStack/CI/libraries/clean_openstack.py +++ b/testcases/VIM/OpenStack/CI/libraries/clean_openstack.py @@ -27,7 +27,6 @@ from keystoneclient.v2_0 import client as keystoneclient from cinderclient import client as cinderclient parser = argparse.ArgumentParser() -parser.add_argument("repo_path", help="Path to the repository") parser.add_argument("-d", "--debug", help="Debug mode", action="store_true") args = parser.parse_args() @@ -42,19 +41,24 @@ if args.debug: else: ch.setLevel(logging.INFO) -sys.path.append(args.repo_path + "testcases/") -import functest_utils - formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') ch.setFormatter(formatter) logger.addHandler(ch) +REPO_PATH=os.environ['repos_dir']+'/functest/' +if not os.path.exists(REPO_PATH): + logger.error("Functest repository directory not found '%s'" % REPO_PATH) + exit(-1) +sys.path.append(REPO_PATH + "testcases/") +import functest_utils + default_images = ['TestVM'] -default_networks = ['net04', 'net04_ext'] -default_routers = ['router04'] +default_networks = ['net04', 'net04_ext', 'functest-net', 'ext-net'] +default_routers = ['router04', 'functest-router'] default_users = ["heat", "heat-cfn", "cinder", "nova", "swift", "glance", - "neutron", "admin", "fuel_stats_user"] -default_tenants = ["admin", "services"] + "neutron", "admin", "fuel_stats_user", "quantum", "heat-cfn_heat", + "ceilometer", "cinder_cinderv2", "demo"] +default_tenants = ["admin", "services", "service", "demo"] default_security_groups = ['default'] def separator(): @@ -63,7 +67,7 @@ def separator(): def remove_instances(nova_client): logger.info("Removing Nova instances...") instances = functest_utils.get_instances(nova_client) - if len(instances) == 0: + if instances is None or len(instances) == 0: logger.debug("No instances found.") return @@ -77,11 +81,21 @@ def remove_instances(nova_client): logger.info(" > ERROR: There has been a problem removing the " "instance %s..." % instance_id) + timeout = 50 + while timeout > 0: + instances = functest_utils.get_instances(nova_client) + if instances is None or len(instances) == 0: + break + else: + logger.debug("Waiting for instances to be terminated...") + timeout -= 1 + time.sleep(1) + def remove_images(nova_client): logger.info("Removing Glance images...") images = functest_utils.get_images(nova_client) - if len(images) == 0: + if images is None or len(images) == 0: logger.debug("No images found.") return @@ -100,21 +114,10 @@ def remove_images(nova_client): logger.debug(" > this is a default image and will NOT be deleted.") -def remove_volumes(cinder_client, nova_client): +def remove_volumes(cinder_client): logger.info("Removing Cinder volumes...") - - timeout = 50 - while timeout > 0: - instances = functest_utils.get_instances(nova_client) - if len(instances) == 0: - break - else: - logger.debug("Waiting for instances to be terminated...") - timeout -= 1 - time.sleep(1) - volumes = functest_utils.get_volumes(cinder_client) - if len(volumes) == 0: + if volumes is None or len(volumes) == 0: logger.debug("No volumes found.") return @@ -131,7 +134,7 @@ def remove_volumes(cinder_client, nova_client): def remove_floatingips(nova_client): logger.info("Removing floating IPs...") floatingips = functest_utils.get_floating_ips(nova_client) - if len(floatingips) == 0: + if floatingips is None or len(floatingips) == 0: logger.debug("No floating IPs found.") return @@ -144,6 +147,16 @@ def remove_floatingips(nova_client): logger.info(" > ERROR: There has been a problem removing the " "floating IP %s..." % fip_id) + timeout = 50 + while timeout > 0: + floatingips = functest_utils.get_floating_ips(nova_client) + if floatingips is None or len(floatingips) == 0: + break + else: + logger.debug("Waiting for floating ips to be released...") + timeout -= 1 + time.sleep(1) + def remove_networks(neutron_client): logger.info("Removing Neutron objects") @@ -151,28 +164,62 @@ def remove_networks(neutron_client): networks = functest_utils.get_network_list(neutron_client) if networks == None: logger.debug("There are no networks in the deployment. ") - return + else: + logger.debug("Existing networks:") + for network in networks: + net_id = network['id'] + net_name = network['name'] + logger.debug(" '%s', ID=%s " %(net_name,net_id)) + if net_name not in default_networks: + logger.debug(" > this is not a default network and will be deleted.") + network_ids.append(net_id) + else: + logger.debug(" > this is a default network and will NOT be deleted.") - logger.debug("Existing networks:") - for network in networks: - net_id = network['id'] - net_name = network['name'] - logger.debug(" '%s', ID=%s " %(net_name,net_id)) - if net_name not in default_networks: - logger.debug(" > this is not a default network and will be deleted.") - network_ids.append(net_id) - else: - logger.debug(" > this is a default network and will NOT be deleted.") + #delete ports + ports = functest_utils.get_port_list(neutron_client) + if ports is None: + logger.debug("There are no ports in the deployment. ") + else: + remove_ports(neutron_client, ports, network_ids) + #remove routers + routers = functest_utils.get_router_list(neutron_client) + if routers is None: + logger.debug("There are no routers in the deployment. ") + else: + remove_routers(neutron_client, routers) - #remove interfaces router and delete ports - ports = functest_utils.get_port_list(neutron_client) + #remove networks + if network_ids != None: + for net_id in network_ids: + logger.debug("Removing network %s ..." % net_id) + if functest_utils.delete_neutron_net(neutron_client, net_id): + logger.debug(" > Done!") + else: + logger.info(" > ERROR: There has been a problem removing the " + "network %s..." % net_id) + + +def remove_ports(neutron_client, ports, network_ids): for port in ports: if port['network_id'] in network_ids: port_id = port['id'] - subnet_id = port['fixed_ips'][0]['subnet_id'] + try: + subnet_id = port['fixed_ips'][0]['subnet_id'] + except: + logger.info(" > WARNING: Port %s does not contain 'fixed_ips'" % port_id) + print port router_id = port['device_id'] - if port['device_owner'] == 'network:router_interface': + if len(port['fixed_ips']) == 0 and router_id == '': + logger.debug("Removing port %s ..." % port_id) + if functest_utils.delete_neutron_port(neutron_client, port_id): + logger.debug(" > Done!") + else: + logger.info(" > ERROR: There has been a problem removing the " + "port %s ..." %port_id) + + elif port['device_owner'] == 'network:router_interface': logger.debug("Detaching port %s (subnet %s) from router %s ..." % (port_id,subnet_id,router_id)) if functest_utils.remove_interface_router(neutron_client, @@ -182,18 +229,19 @@ def remove_networks(neutron_client): else: logger.info(" > ERROR: There has been a problem removing the " "interface %s from router %s..." %(subnet_id,router_id)) - #print port else: + logger.debug("Clearing device_owner for port %s ..." % port_id) + functest_utils.update_neutron_port(neutron_client, + port_id, + device_owner='clear') logger.debug("Removing port %s ..." % port_id) if functest_utils.delete_neutron_port(neutron_client, port_id): logger.debug(" > Done!") else: - logger.info(" > ERROR: There has been a problem removing the " - "port %s ..." %port_id) - #print port + logger.debug(" > Port %s could not be removed directly" % port_id) - #remove routers - routers = functest_utils.get_router_list(neutron_client) + +def remove_routers(neutron_client, routers): for router in routers: router_id = router['id'] router_name = router['name'] @@ -206,32 +254,20 @@ def remove_networks(neutron_client): else: logger.info(" > ERROR: There has been a problem removing " "the gateway...") - #print router - else: logger.debug("Router is not connected to anything. Ready to remove...") - logger.debug("Removing router %s(%s) ..." % (router_name,router_id)) + logger.debug("Removing router %s(%s) ..." % (router_name, router_id)) if functest_utils.delete_neutron_router(neutron_client, router_id): logger.debug(" > Done!") else: logger.info(" > ERROR: There has been a problem removing the " - "router '%s'(%s)..." % (router_name,router_id)) - - - #remove networks - for net_id in network_ids: - logger.debug("Removing network %s ..." % net_id) - if functest_utils.delete_neutron_net(neutron_client, net_id): - logger.debug(" > Done!") - else: - logger.info(" > ERROR: There has been a problem removing the " - "network %s..." % net_id) + "router '%s'(%s)..." % (router_name, router_id)) def remove_security_groups(neutron_client): logger.info("Removing Security groups...") secgroups = functest_utils.get_security_groups(neutron_client) - if len(secgroups) == 0: + if secgroups is None or len(secgroups) == 0: logger.debug("No security groups found.") return @@ -323,7 +359,7 @@ def main(): separator() remove_images(nova_client) separator() - remove_volumes(cinder_client, nova_client) + remove_volumes(cinder_client) separator() remove_floatingips(nova_client) separator()