X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=functest%2Futils%2Fopenstack_clean.py;h=d7df8f848929e249f972b059a8e9436eccd08ca1;hb=55edeaa617a25dffae699b9b5b5b4f61e7856fd6;hp=949eee90f15b4e5e89c5a09223233d3292800d76;hpb=dafed654965a05cab6891b53df80f11e37a1750a;p=functest.git diff --git a/functest/utils/openstack_clean.py b/functest/utils/openstack_clean.py old mode 100755 new mode 100644 index 949eee90f..d7df8f848 --- a/functest/utils/openstack_clean.py +++ b/functest/utils/openstack_clean.py @@ -9,6 +9,8 @@ # - Neutron networks, subnets and ports # - Routers # - Users and tenants +# - Tacker VNFDs and VNFs +# - Tacker SFCs and SFC classifiers # # Author: # jose.lausuch@ericsson.com @@ -20,15 +22,16 @@ # http://www.apache.org/licenses/LICENSE-2.0 # +import logging import time -import functest.utils.functest_logger as ft_logger -import functest.utils.openstack_utils as os_utils import yaml -import functest.utils.functest_constants as ft_constants -logger = ft_logger.Logger("openstack_clean").getLogger() +import functest.utils.openstack_utils as os_utils +from functest.utils.constants import CONST + +logger = logging.getLogger(__name__) -OS_SNAPSHOT_FILE = ft_constants.OPENSTACK_SNAPSHOT_FILE +OS_SNAPSHOT_FILE = CONST.openstack_snapshot_file def separator(): @@ -45,9 +48,14 @@ def remove_instances(nova_client, default_instances): for instance in instances: instance_name = getattr(instance, 'name') instance_id = getattr(instance, 'id') + instance_status = getattr(instance, 'status') + instance_state = getattr(instance, 'OS-EXT-STS:task_state') + logger.debug("'%s', ID=%s " % (instance_name, instance_id)) if (instance_id not in default_instances and - instance_name not in default_instances.values()): + instance_name not in default_instances.values() and + instance_status != 'DELETED' and + (instance_status != 'BUILD' or instance_state != 'deleting')): logger.debug("Removing instance '%s' ..." % instance_id) if os_utils.delete_instance(nova_client, instance_id): logger.debug(" > Request sent.") @@ -71,22 +79,25 @@ def remove_instances(nova_client, default_instances): break -def remove_images(nova_client, default_images): +def remove_images(glance_client, default_images): logger.debug("Removing Glance images...") - images = os_utils.get_images(nova_client) - if images is None or len(images) == 0: + images = os_utils.get_images(glance_client) + if images is None: + return -1 + images = {image.id: image.name for image in images} + if len(images) == 0: logger.debug("No images found.") return for image in images: - image_name = getattr(image, 'name') - image_id = getattr(image, 'id') + image_id = image + image_name = images.get(image_id) logger.debug("'%s', ID=%s " % (image_name, image_id)) if (image_id not in default_images and image_name not in default_images.values()): logger.debug("Removing image '%s', ID=%s ..." % (image_name, image_id)) - if os_utils.delete_glance_image(nova_client, image_id): + if os_utils.delete_glance_image(glance_client, image_id): logger.debug(" > Done!") else: logger.error("There has been a problem removing the" @@ -105,7 +116,7 @@ def remove_volumes(cinder_client, default_volumes): for volume in volumes: volume_id = getattr(volume, 'id') - volume_name = getattr(volume, 'display_name') + volume_name = getattr(volume, 'name') logger.debug("'%s', ID=%s " % (volume_name, volume_id)) if (volume_id not in default_volumes and volume_name not in default_volumes.values()): @@ -126,9 +137,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 @@ -136,13 +147,13 @@ def remove_floatingips(nova_client, default_floatingips): init_len = len(floatingips) deleted = 0 for fip in floatingips: - fip_id = getattr(fip, 'id') - fip_ip = getattr(fip, 'ip') + fip_id = fip['id'] + fip_ip = fip['floating_ip_address'] logger.debug("'%s', ID=%s " % (fip_ip, fip_id)) 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: @@ -154,7 +165,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: @@ -370,12 +381,14 @@ def remove_tenants(keystone_client, default_tenants): def main(): + logging.basicConfig() logger.info("Cleaning OpenStack resources...") nova_client = os_utils.get_nova_client() neutron_client = os_utils.get_neutron_client() keystone_client = os_utils.get_keystone_client() cinder_client = os_utils.get_cinder_client() + glance_client = os_utils.get_glance_client() try: with open(OS_SNAPSHOT_FILE) as f: @@ -383,7 +396,7 @@ def main(): except Exception: logger.info("The file %s does not exist. The OpenStack snapshot must" " be created first. Aborting cleanup." % OS_SNAPSHOT_FILE) - exit(0) + return 0 default_images = snapshot_yaml.get('images') default_instances = snapshot_yaml.get('instances') @@ -398,15 +411,15 @@ def main(): if not os_utils.check_credentials(): logger.error("Please source the openrc credentials and run " "the script again.") - exit(-1) + return -1 remove_instances(nova_client, default_instances) separator() - remove_images(nova_client, default_images) + remove_images(glance_client, default_images) 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() @@ -416,7 +429,4 @@ def main(): separator() remove_tenants(keystone_client, default_tenants) separator() - - -if __name__ == '__main__': - main() + return 0