Skip to content

Instantly share code, notes, and snippets.

@ssbarnea
Last active August 27, 2018 13:30
Show Gist options
  • Save ssbarnea/db5a0089f48405f9a92d73e2361b87b0 to your computer and use it in GitHub Desktop.
Save ssbarnea/db5a0089f48405f9a92d73e2361b87b0 to your computer and use it in GitHub Desktop.
#!/bin/bash
set -eu
die () {
echo >&2 "$@"
exit 1
}
[ "$#" -eq 1 ] || die "ERROR: 1 argument required, $# provided. Please specify a name pattern for matching resources to remove, like 'sahara-188-' "
PATTERN=$1
SERVERS=$(openstack server list --format=value -c Name | grep $PATTERN | sort)
ROUTERS=$(openstack router list --format=value -c Name | grep $PATTERN | sort)
NETWORKS=$(openstack network list --format=value -c Name | grep $PATTERN | sort)
KEYPAIRS=$(openstack keypair list --format=value -c 'Name' | grep $PATTERN | sort)
echo -e "INFO: servers:\n$SERVERS"
echo -e "INFO: routers:\n$ROUTERS"
echo -e "INFO: networks:\n$NETWORKS"
echo -e "INFO: keypairs:\n$KEYPAIRS"
read -p "Are you sure you want to delete all these resources? " -n 1 -r
echo # (optional) move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]
then
for SERVER in $SERVERS
do
openstack server delete $SERVER &
done
wait $(jobs -p)
for ROUTER in $ROUTERS
do
openstack router unset --external-gateway $ROUTER
for PORT in $(openstack port list --router $ROUTER --format=value -c ID)
do
openstack router remove port $ROUTER $PORT
done
openstack router delete $ROUTER
done
for NETWORK in $NETWORKS
do
for PORT in $(openstack port list --network $NETWORK --format=value -c ID)
do
openstack port delete $PORT &
done
wait $(jobs -p)
openstack network delete $NETWORK
done
for KEYPAIR in $KEYPAIRS
do
openstack keypair delete $KEYPAIR &
done
wait $(jobs -p)
fi
echo "INFO: done running $0"
@e-minguez
Copy link

This is nice, but I miss more objects such as volumes or images.

@ssbarnea
Copy link
Author

ssbarnea commented Aug 27, 2018

I created a repository for the "tool" so we can track bugs an include fixes.
From now on, please use https://github.com/ssbarnea/osclean -- i will remove the gist at some point.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment