您的位置:首页 > 运维架构

删除Openstack僵尸instances和projects(2)

2015-08-31 17:07 555 查看
#!/bin/bash

###########################################
# @file clean_all_instances.sh            #
# @brief Remove project database in mysql #
# @author Evan                            #
# @version 2.0                            #
# @date 2015-08-21                        #
###########################################

##############Set variables##########
USER="root"
PASSWORD="password"

function _disass_floatingips()
{
OPTIONAL_UID=$REPLY
if [ "$1" -eq 2 ];then
FLOATING_ID=`mysql -u$USER -p$PASSWORD -se "USE neutron; select id from floatingips where tenant_id='$OPTIONAL_UID';"`
else
FLOATING_ID=`mysql -u$USER -p$PASSWORD -se "USE neutron; select id from floatingips;"`
fi

for fi in $FLOATING_ID
do
echo "Begin to disassociate floating ip $fi..."
neutron floatingip-disassociate $fi
echo "The floating ip has been disassociated."
done
}

function _clearup_nova()
{
OPTIONAL_UID=$REPLY

if [ "$1" -eq 1 ];then
UUID=$OPTIONAL_UID
POID=`mysql -u$USER -p$PASSWORD -se "USE nova; SELECT project_id FROM instances WHERE uuid='$UUID';"`
elif [ "$1" -eq 2 ];then
UUID=`mysql -u$USER -p$PASSWORD -se "USE nova; SELECT distinct uuid FROM instances WHERE project_id='$OPTIONAL_UID';"`
POID=$OPTIONAL_UID
else
UUID=`mysql -u$USER -p$PASSWORD -se "USE nova; SELECT distinct uuid FROM instances;"`
POID=`mysql -u$USER -p$PASSWORD -se "USE nova; SELECT distinct project_id FROM instances;"`
fi

if [ -n "$UUID" ];then
for po in $POID
do
for ui in $UUID
do
_vcpus=`mysql -u$USER -p$PASSWORD -se "USE nova; SELECT vcpus FROM instances WHERE uuid='$ui';"`
_memory=`mysql -u$USER -p$PASSWORD -se "USE nova; SELECT memory_mb FROM instances WHERE uuid='$ui';"`
mysql -u$USER -p$PASSWORD -e "USE nova; UPDATE quota_usages SET in_use=in_use-'$_vcpus' WHERE project_id='$POID' AND resource='cores';"
mysql -u$USER -p$PASSWORD -e "USE nova; UPDATE quota_usages SET in_use=in_use-'$_memory' WHERE project_id='$POID' AND resource='ram';"
mysql -u$USER -p$PASSWORD -e "USE nova; UPDATE quota_usages SET in_use=in_use-1 WHERE project_id='$POID' AND resource='instances';"
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 $ui has been removed."
done
done
else
echo "The specified instance is not exsit,please check it."
fi
}

function _clearup_neutron()
{
OPTIONAL_UID=$REPLY
RESERVE_ROUTER_ID=`mysql -u$USER -p$PASSWORD -se "USE neutron; SELECT id FROM routers WHERE name ='extrouter';"`
RESERVE_PORT_ID=`mysql -u$USER -p$PASSWORD -se "USE neutron; SELECT port_id FROM routerports WHERE router_id = '$RESERVE_ROUTER_ID';"`
RESERVE_NETWORK_ID=`mysql -u$USER -p$PASSWORD -se "USE neutron; SELECT network_id FROM externalnetworks;"`
echo "Begin to remove neutron..."
if [ "$1" -eq 3 ];then
mysql -u$USER -p$PASSWORD -se "USE neutron; DELETE FROM routers WHERE id != '$RESERVE_ROUTER_ID';"
mysql -u$USER -p$PASSWORD -se "USE neutron; DELETE FROM ports WHERE id !='$RESERVE_PORT_ID' AND device_owner !='network:floatingip';"
mysql -u$USER -p$PASSWORD -se "USE neutron; DELETE FROM subnets WHERE network_id != '$RESERVE_NETWORK_ID';"
mysql -u$USER -p$PASSWORD -se "USE neutron; DELETE FROM networks WHERE id != '$RESERVE_NETWORK_ID';"
echo "The neutron has been removed."
else
mysql -u$USER -p$PASSWORD -se "USE neutron; DELETE FROM routers WHERE id != '$RESERVE_ROUTER_ID' AND tenant_id='$OPTIONAL_UID';"
mysql -u$USER -p$PASSWORD -se "USE neutron; DELETE FROM ports WHERE id !='$RESERVE_PORT_ID' AND tenant_id='$OPTIONAL_UID';"
mysql -u$USER -p$PASSWORD -se "USE neutron; DELETE FROM subnets WHERE network_id != '$RESERVE_NETWORK_ID' AND tenant_id='$OPTIONAL_UID';"
mysql -u$USER -p$PASSWORD -se "USE neutron; DELETE FROM networks WHERE id != '$RESERVE_NETWORK_ID' AND tenant_id='$OPTIONAL_UID';"
echo "The neutron has been removed."
fi
}

function _clearup_cinder()
{
OPTIONAL_UID=$REPLY
if [ "$1" -eq 2 ];then
VOLUME_ID=`mysql -u$USER -p$PASSWORD -se "USE cinder; SELECT id FROM volumes WHERE project_id='$OPTIONAL_UID';"`
mysql -u$USER -p$PASSWORD -e "USE cinder; UPDATE quota_usages SET in_use=0 WHERE project_id='$OPTIONAL_UID';"
else
VOLUME_ID=`mysql -u$USER -p$PASSWORD -se "USE cinder; SELECT id FROM volumes;"`
mysql -u$USER -p$PASSWORD -e "USE cinder; UPDATE quota_usages SET in_use=0;"
fi

for vid in $VOLUME_ID
do
echo "Begin to remove volume $vid..."
mysql -u$USER -p$PASSWORD -se "USE cinder; DELETE FROM reservations WHERE project_id='$OPTIONAL_UID';"
mysql -u$USER -p$PASSWORD -se "USE cinder; DELETE FROM quota_usages WHERE project_id='$OPTIONAL_UID';"
mysql -u$USER -p$PASSWORD -se "USE cinder; SET FOREIGN_KEY_CHECKS=0; UPDATE iscsi_targets SET volume_id='NULL' WHERE volume_id='$vid';"
mysql -u$USER -p$PASSWORD -se "USE cinder; SET FOREIGN_KEY_CHECKS=0; DELETE FROM volume_admin_metadata WHERE volume_id='$vid';"
mysql -u$USER -p$PASSWORD -se "USE cinder; SET FOREIGN_KEY_CHECKS=0; DELETE FROM volumes WHERE id='$vid';"
rm -rf /dev/cinder-volumes/volume-$vid
echo "Volume $vid has been removed..."
done
echo "All volumes have been removed."
}

function fun_cleanInstance()
{
_clearup_nova 1
}

function fun_cleanProject()
{
_disass_floatingips 2
_clearup_nova 2
_clearup_neutron 2
_clearup_cinder 2
}

function fun_cleanAllProject()
{
_disass_floatingips 3
_clearup_nova 3
_clearup_neutron 3
_clearup_cinder 3
}

case "$1" in
1)
read -p "Please input specified instance UUID: "
echo "Begin to remove specified instance $REPLY....."
fun_cleanInstance 1 $REPLY
echo "Script completes!!!!!"
exit 1
;;
2)
read -p "Please input specified project tenand_id: "
echo "Begin to clear up specified project $REPLY....."
fun_cleanProject 2 $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]?"
if [ "$REPLY"x = "y"x ]||[ "$REPLY"x = "yes"x ]||[ "$REPLY"x = "Y"x ];then
echo "begin to clear up all project instances....."
fun_cleanAllProject 3
echo "Script completes!!!!!"
else
echo "You have cancelled the operation."
fi
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: