删除Openstack僵尸instances和projects

脚本主要包括三个方面:

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."


clean_instance.sh
#!/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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值