删除Openstack僵尸instances和projects

本文介绍了一个包含三个主要功能的脚本:删除指定僵尸实例、清空特定项目数据及清空所有项目数据。详细解释了如何通过命令行界面进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

脚本主要包括三个方面:

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值