删除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
相关文章推荐
- SSH服务器之间信任关系!/usr/bin/ssh-copy-id: ERROR: No identities found
- Hadoop第13周练习—HBase作业
- linux安装php环境
- maven redeploy过程无法删除Tomcat旧项目的目录
- Hadoop第12周练习—HBase安装部署
- Linux平台上搭建apache+tomcat负载均衡集群
- Hadoop第11周练习—HBase基础知识
- Hadoop第10周练习—Mahout部署及进行20newsgroup数据分析例子
- Linux下gdb调试程序之堆栈跟踪
- SELinux入门教程
- Linux下使用wget下载jdk
- CentOS 7 下的 Firewall
- (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解
- [小技巧] 查询 shell 内置命令的用法
- Hadoop第8周练习—Pig部署及统计访问日志例子
- Linux内核空间映射到用户空间
- Hadoop第7周练习—MapReduce进行数据查询和实现推简单荐系统
- 从 Linux 内核访问用户空间内存
- Hadoop第6周练习—在Eclipse中安装Hadoop插件及测试(Linux操作系统)
- Linux Squid安装配置指南