blob: 3b6c112329de806b79a67518216a1ca073468c2a [file] [log] [blame]
#!/bin/bash
export OS_INTERFACE='admin'
mask='rally_\|tempest_\|tempest-'
### Execute collected commands and flush the temp file
function _clean_and_flush {
if [ -s ${cmds} ]; then
echo "Processing $(cat ${cmds} | wc -l) commands"
cat ${cmds} | openstack
truncate -s 0 ${cmds}
fi
}
### Users
function _clean_users {
users=( $(openstack user list -c ID -c Name -f value | grep ${mask} | cut -d' ' -f1) )
echo "-> ${#users[@]} users containing '${mask}' found"
printf "%s\n" ${users[@]} | xargs -I{} echo user delete {} >>${cmds}
_clean_and_flush
}
### Roles
function _clean_roles {
roles=( $(openstack role list -c ID -c Name -f value | grep ${mask} | cut -d' ' -f1) )
echo "-> ${#roles[@]} roles containing '${mask}' found"
printf "%s\n" ${roles[@]} | xargs -I{} echo role delete {} >>${cmds}
_clean_and_flush
}
### Projects
function _clean_projects {
projects=( $(openstack project list -c ID -c Name -f value | grep ${mask} | cut -d' ' -f1) )
echo "-> ${#projects[@]} projects containing '${mask}' found"
printf "%s\n" ${projects[@]} | xargs -I{} echo project delete {} >>${cmds}
_clean_and_flush
}
### Servers
function _clean_servers {
servers=( $(openstack server list --name ${mask} -c ID -f value) )
echo "-> ${#servers[@]} servers containing '${mask}' found"
printf "%s\n" ${servers[@]} | xargs -I{} echo server delete {} >>${cmds}
_clean_and_flush
}
### Reset snapshot state and delete
function _clean_snapshots {
snapshots=( $(openstack volume snapshot list --all -c ID -c Name -f value | grep ${mask} | cut -d' ' -f1) )
echo "-> ${#snapshots[@]} snapshots containing '${mask}' found"
printf "%s\n" ${snapshots[@]} | xargs -I{} echo snapshot set --state available {} >>${cmds}
printf "%s\n" ${snapshots[@]} | xargs -I{} echo snapshot delete {} >>${cmds}
_clean_and_flush
}
function _clean_volumes {
volumes=( $(openstack volume list --all -c ID -c Name -c Type -f value | grep ${mask} | cut -d' ' -f1) )
echo "-> ${#volumes[@]} volumes containing '${mask}' found"
printf "%s\n" ${volumes[@]} | xargs -I{} echo volume set --state available {} >>${cmds}
printf "%s\n" ${volumes[@]} | xargs -I{} echo volume delete {} >>${cmds}
_clean_and_flush
}
### Volume types
function _clean_volume_types {
vtypes=( $(openstack volume type list -c ID -c Name -f value | grep ${mask} | cut -d' ' -f1) )
echo "-> ${#vtypes[@]} volume types containing '${mask}' found"
printf "%s\n" ${vtypes[@]} | xargs -I{} echo volume type delete {} >>${cmds}
_clean_and_flush
}
### Images
function _clean_images {
images=( $(openstack image list --name ${mask} -c ID -f value) )
echo "-> ${#images[@]} images containing '${mask}' found"
printf "%s\n" ${images[@]} | xargs -I{} echo image delete {} >>${cmds}
_clean_and_flush
}
### Sec groups
function _clean_sec_groups {
# openstack project list -c ID -c Name -f value | grep rally | cut -d' ' -f1 | xargs -I{} /bin/bash -c "openstack security group list | grep {}"
projects=( $(openstack project list -c ID -c Name -f value | grep ${mask} | cut -d' ' -f1) )
sgroups=( $(printf "%s\n" ${projects[@]} | xargs -I{} /bin/bash -c "openstack security group list -c ID -c Project -f value | grep {} | cut -d' ' -f1") )
echo "-> ${#sgroups[@]} security groups for project containing '${mask}' found"
printf "%s\n" ${sgroups[@]} | xargs -I{} echo security group delete {} >>${cmds}
_clean_and_flush
}
### Keypairs
function _clean_keypairs {
keypairs=( $(openstack keypair list -c Name -f value | grep ${mask}) )
echo "-> ${#keypairs[@]} keypairs containing '${mask}' found"
printf "%s\n" ${keypairs[@]} | xargs -I{} echo keypair delete {} >>${cmds}
_clean_and_flush
}
### Routers and Networks
function _clean_routers_and_networks {
routers=( $(openstack router list -c ID -c Name -f value | grep ${mask} | cut -d ' ' -f1) )
if [ ${#routers[@]} -eq 0 ]; then
echo "-> No routers containing '${mask}' found"
else
echo "-> ${#routers[@]} routers containing '${mask}' found"
echo "...unsetting gateways"
printf "%s\n" ${routers[@]} | xargs -I{} echo router unset --external-gateway {} | openstack
for router in ${routers[@]}; do
r_ports=( $(openstack port list --router ${router} -f value -c ID) )
if [ ${#r_ports[@]} -eq 0 ]; then
echo "...no ports to unplug for ${router}"
else
for r_port in ${r_ports[@]}; do
echo "...removing port '${r_port}' from router '${router}'"
openstack router remove port ${router} ${r_port}
done
fi
done
printf "%s\n" ${routers[@]} | xargs -I{} echo router delete {} >>${cmds}
fi
networks=( $(openstack network list | grep "${mask}" | cut -d' ' -f2) )
if [ ${#networks[@]} -eq 0 ]; then
echo "-> No networks containing '${mask}' found"
else
ports=()
subnets=()
for((idx=0;idx<${#networks[@]};idx++)) do
ports+=( $(openstack port list --network ${networks[idx]} -c ID -f value) )
subnets+=( $(openstack subnet list --network ${networks[idx]} -c ID -f value) )
echo "-> $((${idx}+1)) of ${#networks[@]}, total ${#ports[@]} ports, ${#subnets[@]} subnets"
done
printf "%s\n" ${ports[@]} | xargs -I{} echo port delete {} >>${cmds}
printf "%s\n" ${subnets[@]} | xargs -I{} echo subnet delete {} >>${cmds}
echo network delete ${networks[@]} >>${cmds}
echo "-> ${#routers[@]} routers, ${#ports[@]} ports, ${#subnets[@]} subnets, ${#networks[@]} networks"
fi
_clean_and_flush
}
### Regions
function _clean_regions {
regions=( $(openstack region list -c Region -f value | grep ${mask}) )
echo "-> ${#regions[@]} regions containing '${mask}' found"
printf "%s\n" ${regions[@]} | xargs -I{} echo region delete {} >>${cmds}
_clean_and_flush
}
### Stacks
function _clean_stacks {
# By default openstack denies use of global_index for everyone.
# In case you want to have handy cleanup, consider updating policy.json here:
# root@ctl0x:~# cat -n /etc/heat/policy.json | grep global_index
# 48 "stacks:global_index": "rule:deny_everybody",
# 73 "software_configs:global_index": "rule:deny_everybody",
# After this you will be able to use --all option
stacks=( $(openstack stack list --deleted --nested --hidden -c ID -c Name -f value | grep ${mask} | cut -d' ' -f1) )
echo "-> ${#stacks[@]} stacks containing '${mask}' found"
printf "%s\n" ${stacks[@]} | xargs -I{} echo stack check {} >>${cmds}
printf "%s\n" ${stacks[@]} | xargs -I{} echo stack delete -y {} >>${cmds}
_clean_and_flush
}
### Containers
function _clean_containers {
containers=( $(openstack container list --all -c ID -c Name -f value | grep ${mask}) )
echo "-> ${#containers[@]} containers containing '${mask}' found"
printf "%s\n" ${containers[@]} | xargs -I{} echo container delete {} >>${cmds}
_clean_and_flush
}
###################
### Main
###################
# temp file for commands
cmds=$(mktemp)
echo "Using tempfile: '${cmds}'"
# Consider cleaning contrail resources carefully
# ...and only after that - clean projects
_clean_stacks
_clean_servers
_clean_users
_clean_roles
_clean_snapshots
_clean_volumes
_clean_volume_types
_clean_images
_clean_sec_groups
_clean_keypairs
_clean_routers_and_networks
_clean_regions
_clean_containers
# project cleaning disabled by default
# Coz cleaning Contrail with no projects is a hard task
#_clean_projects
# remove temp file
rm ${cmds}