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. 結語
祝有幸看到本篇博客和使用該腳本的同學玩的愉快