kvm多台虛擬機管理腳本


1. 引言

在Deepin系統上,安裝了kvm虛擬機,基本都是以虛擬集群的方式來操作,所以免不了總是銷毀,創建,啟停等操作。所以就花了點時間 ,創建一個腳本,來管理這些虛擬機。

2. 正文

我一般是切換到root進行操作的。

所在在/root目錄下創建mykvmtools目錄,創建ktools腳本,內容如下:

#!/bin/bash
# kvm虛擬機管理腳本

NODENUM=$2
IMGPATH="/var/lib/libvirt/images"

get_kvm_name(){
	IFS=','
	for i in $*
	do
		has_flog=$(echo "$i"|grep "-"|wc -l)
		if [ "$a" != "0" ];then
			for j in $(seq ${i%-*} ${i#*-} 2>/dev/null)
			do
				echo "$j"
			done
		else
			echo -ne "\b"
		fi
	done | tr '\n' ','|sed 's/.$//g'
	echo 
}

#檢查
check_node(){
	local num=$1
	local cnt=$(virsh list --all|grep node${num}|wc -l)
	if [ "${cnt}" == "1" ];then
		echo "true"
	else
		echo "false"
	fi
}
#開機
start_node(){
	IFS=','
	for n in $*
	do
		local s=$(check_node ${n})
		if [ "${s}" == "true" ];then
			virsh start node${n} >/dev/null  2>&1
			if [ $? -ne 0 ];then
				echo "node${n} 開機失敗"
			fi
		else
			echo "node${n} 不存在"
		fi
	done
}

#關機
stop_node(){
	IFS=','
	for n in $*
	do
		local s=$(check_node ${n})
		if [ "${s}" == "true" ];then
			virsh destroy node${n} >/dev/null  2>&1
			if [ $? -ne 0 ];then
				echo "node${n} 關機失敗"
			fi
		else
			echo "node${n} 不存在"
		fi
	done
}

#刪除
delete_node(){
	IFS=','
	for n in $*
	do
		stop_node ${n}
		virsh undefine node${n} >/dev/null  2>&1
		if [ $? -eq 0 ];then
			rm -rf ${IMGPATH}/node${n}.qcow2
		else
			echo "node${n} 刪除失敗"
		fi
	done
}

#克隆
clone_node(){
	IFS=','
	for n in $*
	do
		local s=$(check_node ${n})
		if [ "${s}" == "false" ];then
			virt-clone -o base -n node${n} -f ${IMGPATH}/node${n}.qcow2 -m 00:00:00:80:00:$n >/dev/null 2>&1
			if [ $? -ne 0 ];then
				echo "node${n} 克隆失敗"
			fi
		else
			echo "node${n} 已經存在"
		fi
	done
}
#重置
reset_node(){
	IFS=','
	for n in $*
	do
		local s=$(check_node ${n})
		if [ "${s}" == "false" ];then
			echo "node${n} 不存在"
		else
			delete_node ${n}
			clone_node ${n}
			start_node ${n}
		fi
	done
}

#暫停
pauze_node(){
	IFS=','
	for n in $*
	do
		local s=$(check_node ${n})
		if [ "${s}" == "false" ];then
			echo "node${n} 不存在"
		else
			virsh suspend ${n} >/dev/null 2>&1
			if [ $? -ne 0 ];then
				echo "node${n} 暫停失敗"
			fi
		fi
	done

}
#恢復
resume_node(){
	IFS=','
	for n in $*
	do
		local s=$(check_node ${n})
		if [ "${s}" == "false" ];then
			echo "node${n} 不存在"
		else
			virsh resume ${n} >/dev/null 2>&1
			if [ $? -ne 0 ];then
				echo "node${n} 暫停失敗"
			fi
		fi
	done

}

main(){

	if [ $# -eq 1 ] || [ $# -lt 2 ];then
		echo "參數個數錯誤"
		echo "使用方式:$(basename $0) [選項] [值]"
		echo "         $(basename $0) [create|clone] [xx,xx-xx,xx] 克隆/創建"
		echo "         $(basename $0) [delete] [xx,xx-xx,xx] 刪除"
		echo "         $(basename $0) [reset] [xx,xx-xx,xx] 重置(刪除並創建)"
		echo "         $(basename $0) [restart] [xx,xx-xx,xx] 重啟。"
		echo "         $(basename $0) [resume] [xx,xx-xx,xx] 恢復掛起"
		echo "         $(basename $0) [start|stop] [xx,xx-xx,xx] 開機/停機"
		echo "         $(basename $0) [suspend|pauze] [xx,xx-xx,xx] 掛起/暫停"
		exit 1
	fi

	NODELIST=$(get_kvm_name $*)

	case $1 in
		clone|create)
			clone_node ${NODELIST}
			;;
		delete)
			delete_node ${NODELIST}
			;;
		reset)
			reset_node ${NODELIST}
			;;
		restart)
			stop_node ${NODELIST}
			start_node ${NODELIST}
			;;
		resume)
			resume_node ${NODELIST}
			;;
		suspend|pauze)
			pauze_node ${NODELIST}
			;;
		start)
			start_node ${NODELIST}
			;;
		stop)
			stop_node ${NODELIST}
			;;
		*)
			echo "無效參數"
			exit 0
	esac
}
main $*

然后修改權限chmod +x ktools

最后把/root/mykvltools添加到系統環境變量中,這樣就可以通過ktools create 11,12-15,18的方式來管理多台虛擬機了。

3. 結語

祝有幸看到本篇博客和使用該腳本的同學玩的愉快


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM