diff --git a/scripts/openstack-cleanup/main.py b/scripts/openstack-cleanup/main.py index e7098142f..0ab9ffc13 100755 --- a/scripts/openstack-cleanup/main.py +++ b/scripts/openstack-cleanup/main.py @@ -11,7 +11,7 @@ PAUSE_SECONDS = 5 log = logging.getLogger('openstack-cleanup') -parser = argparse.ArgumentParser(description='Cleanup OpenStack VMs') +parser = argparse.ArgumentParser(description='Cleanup OpenStack resources') parser.add_argument('-v', '--verbose', action='store_true', help='Increase verbosity') @@ -29,16 +29,44 @@ def main(): if args.dry_run: print('Running in dry-run mode') else: - print('This will delete VMs... (ctrl+c to cancel)') + print('This will delete resources... (ctrl+c to cancel)') time.sleep(PAUSE_SECONDS) conn = openstack.connect() - for server in conn.compute.servers(): - created_at = datetime.datetime.strptime(server.created_at, DATE_FORMAT) - if created_at < oldest_allowed: - print('Will delete server %(name)s' % server) - if not args.dry_run: - conn.compute.delete_server(server) + + print('Security groups...') + map_if_old(conn.network.delete_security_group, + conn.network.security_groups()) + + print('Servers...') + map_if_old(conn.compute.delete_server, + conn.compute.servers()) + + print('Subnets...') + map_if_old(conn.network.delete_subnet, + conn.network.subnets()) + + print('Networks...') + for n in conn.network.networks(): + if not n.is_router_external: + fn_if_old(conn.network.delete_network, n) + + +# runs the given fn to all elements of the that are older than allowed +def map_if_old(fn, items): + for item in items: + fn_if_old(fn, item) + + +# run the given fn function only if the passed item is older than allowed +def fn_if_old(fn, item): + created_at = datetime.datetime.strptime(item.created_at, DATE_FORMAT) + if item.name == "default": # skip default security group + return + if created_at < oldest_allowed: + print('Will delete %(name)s (%(id)s)' % item) + if not args.dry_run: + fn(item) if __name__ == '__main__':