脚本主要包括三个方面:
1.删除指定的僵尸实例;
2.清空某个project的数据;
3.清空所有projects的数据。
clean.sh
#!/bin/bash
case "$1" in
1)
read -p "Please input specified instance UUID: "
echo "Begin to remove specified instance $REPLY....."
./clean_instance.sh $1 $REPLY
echo "Script completes!!!!!"
exit 1
;;
2)
read -p "Please input specified project tenand_id: "
echo "Begin to clear up specified project instances $REPLY....."
./clean_instance.sh $1 $REPLY
echo "Script completes!!!!!"
exit 1
;;
3)
read -p "Warnning: The operate would be clear up all project instances,do you want to excute it still [y/n]?"
echo "begin to clear up all project instances....."
./clean_instance.sh $1 $REPLY
echo "Script completes!!!!!"
exit 1
;;
*)
echo "Usage:
clean 1 --- will remove specified instance.
clean 2 --- will clear up specified project instances.
clean 3 --- will clear up all project instances."
exit 1
;;
esac
exit 0
clean_all_instances.sh
#!/bin/bash
###########################################
# @file clean_all_instances.sh #
# @brief Remove project database in mysql #
# @author Evan Yang #
# @version 1.1 #
# @date 2015-04-21 #
###########################################
#####################################
# #
# Remove nova datebase #
# #
#####################################
##############Set variables##########
USER="root"
PASSWORD="password"
if [ "$1" -eq 2 ];then
OPTIONAL_TID="WHERE tenant_id='$2'"
OPTIONAL_TID2="AND tenant_id='$2'"
OPTIONAL_PID="WHERE project_id='$2'"
else
OPTIONAL_TID=""
OPTIONAL_TID2=""
OPTIONAL_PID=""
fi
echo $OPTIONAL_TID
FLOATING_IPS=`mysql -u$USER -p$PASSWORD -se "USE neutron; SELECT floating_ip_address FROM floatingips $OPTIONAL_TID;"`
INSTANCES=`mysql -u$USER -p$PASSWORD -se "USE nova; SELECT distinct display_name FROM instances $OPTIONAL_PID;"`
UUIDS=`mysql -u$USER -p$PASSWORD -se "USE nova; SELECT uuid FROM instances $OPTIONAL_PID;"`
#########Remove all floating-ip############
for fi in $FLOATING_IPS
do
for in in $INSTANCES
do
echo $in ":Begin to remove floating ip..."
nova remove-floating-ip $in $fi
echo "The floating ip has been removed."
done
done
########Reset values of quota_usages########
mysql -u$USER -p$PASSWORD -e "USE nova; UPDATE quota_usages SET in_use=0 $OPTIONAL_PID;"
########Remove instance in nova database#####
for ui in $UUIDS
do
echo "begin to remove instance $ui..."
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM security_group_instance_association WHERE instance_uuid='$ui';"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM instance_info_caches WHERE instance_uuid='$ui';"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM block_device_mapping WHERE instance_uuid='$ui';"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM instance_extra WHERE instance_uuid='$ui';"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM instance_actions_events WHERE action_id IN (SELECT id FROM instance_actions WHERE instance_uuid='$ui') ;"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM instance_actions WHERE instance_uuid='$ui';"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM instance_faults WHERE instance_uuid='$ui';"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM instance_system_metadata WHERE instance_uuid='$ui';"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM instances WHERE uuid='$ui';"
rm -rf /var/lib/nova/instances/$ui
echo "The instance has been removed."
done
#####################################
# #
# Remove neutron datebase #
# #
#####################################
echo "Begin to remove neutron..."
#######Remove routers from neutron database#######
echo "Begin to remove routers..."
RESERVE_ROUTER_ID=`mysql -u$USER -p$PASSWORD -se "USE neutron; SELECT id FROM routers WHERE name ='extrouter';"`
mysql -u$USER -p$PASSWORD -se "USE neutron; DELETE FROM routers WHERE id != '$RESERVE_ROUTER_ID' $OPTIONAL_TID2;"
echo "All routers have been removed."
########Remove ports from neutron database########
echo "Begin to remove ports..."
RESERVE_PORT_ID=`mysql -u$USER -p$PASSWORD -se "USE neutron; SELECT port_id FROM routerports WHERE router_id = '$RESERVE_ROUTER_ID';"`
mysql -u$USER -p$PASSWORD -se "USE neutron; DELETE FROM ports WHERE id !='$RESERVE_PORT_ID' $OPTIONAL_TID2;"
echo "All ports have been removed."
#########Remove subnets from neutron database######
echo "Begin to remove subnets..."
RESERVE_NETWORK_ID=`mysql -u$USER -p$PASSWORD -se "USE neutron; SELECT network_id FROM externalnetworks;"`
mysql -u$USER -p$PASSWORD -se "USE neutron; DELETE FROM subnets WHERE network_id != '$RESERVE_NETWORK_ID' $OPTIONAL_TID2;"
echo "All subnets have been removed."
#########Remove networks from neutron database######
echo "Begin to remove networks..."
mysql -u$USER -p$PASSWORD -se "USE neutron; DELETE FROM networks WHERE id != '$RESERVE_NETWORK_ID' $OPTIONAL_TID2;"
echo "All networks have been removed."
echo "The neutron has been removed."
#####################################
# #
# Remove cinder datebase #
# #
#####################################
echo "Begin to remove cinder..."
VOLUME_ID=`mysql -u$USER -p$PASSWORD -se "USE cinder; SELECT id FROM volumes $OPTIONAL_PID;"`
for vid in $VOLUME_ID
do
mysql -u$USER -p$PASSWORD -se "USE cinder; DELETE FROM reservations $OPTIONAL_PID;"
mysql -u$USER -p$PASSWORD -se "USE cinder; DELETE FROM quota_usages $OPTIONAL_PID;"
mysql -u$USER -p$PASSWORD -se "USE cinder; UPDATE iscsi_targets SET volume_id='NULL' where volume_id='$vid';"
mysql -u$USER -p$PASSWORD -se "USE cinder; DELETE FROM volume_admin_metadata where volume_id='$vid';"
mysql -u$USER -p$PASSWORD -se "USE cinder; DELETE FROM volumes $OPTIONAL_PID;"
echo "delete volume $vid from hardware... "
rm -rf /dev/cinder-volumes/volume-$vid
echo "volume $vid has been removed."
done
echo "All subnets have been removed."
#!/bin/bash
###########################################
# @file clean_instance.sh #
# @brief Remove database in mysql #
# @author Evan Yang #
# @version 1.0 #
# @date 2015-04-21 #
###########################################
##############Set variables##########
USER="root"
PASSWORD="password"
#####################################
if [ -n "$2" ];then
if [ "$1" -eq 1 ];then
UUID=`mysql -u$USER -p$PASSWORD -se "USE nova; SELECT distinct uuid FROM instances WHERE uuid='$2';"`
if [ -n "$UUID" ];then
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM security_group_instance_association WHERE instance_uuid='$2';"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM instance_info_caches WHERE instance_uuid='$2';"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM block_device_mapping WHERE instance_uuid='$2';"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM instance_extra WHERE instance_uuid='$2';"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM instance_actions_events WHERE action_id IN (SELECT id FROM instance_actions WHERE instance_uuid='$2') ;"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM instance_actions WHERE instance_uuid='$2';"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM instance_faults WHERE instance_uuid='$2';"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM instance_system_metadata WHERE instance_uuid='$2';"
mysql -u$USER -p$PASSWORD -e "USE nova; DELETE FROM instances WHERE uuid='$2';"
rm -rf /var/lib/nova/instances/$2
echo "The instance $2 has been removed."
else
echo "The specified instance is not exsit,please check it."
fi
elif [ "$1" -eq 2 ];then
INSTANCE=`mysql -u$USER -p$PASSWORD -se "USE keystone; SELECT distinct id FROM project WHERE id='$2';"`
if [ -n "$INSTANCE" ];then
./clean_all_instances.sh $1 $2
else
echo "The specified project is not exsit,please check it."
fi
elif [ "$1" -eq 3 ];then
if [ "$2"x = "y"x ]||[ "$2"x = "yes"x ]||[ "$2"x = "Y"x ];then
./clean_all_instances.sh $1
else
echo "You have cancelled the operation."
fi
else
echo "Wrong input parameter,please check."
fi
else
echo "Lack of some parameters,please check and try it again."
fi