删除Openstack僵尸instances和projects(2)

#!/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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值