zoukankan      html  css  js  c++  java
  • 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 ""
    		fi
    	done | tr '
    ' ','|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. 结语

    祝有幸看到本篇博客和使用该脚本的同学玩的愉快

  • 相关阅读:
    上海电信 华为HG8240R 光猫 破解
    RedSn0w 0.9.10b5 越狱iphone 4 ios 5.0.1 Cydia闪退解决
    用IIS 7.5 Express代替IIS和开发工具vs自带的ASP.NET Development Server
    远程桌面连接问题
    Enterprise Library 5.0 Hands On Lab(1):数据访问程序块(一)
    [Havok] Havok Physics物理引擎的学习入门
    [设计模式] 深入浅出单实例Singleton设计模式(Java版)
    [C#] MD5 加密的具体流程
    [轻音乐] 理查德·克莱德曼专辑[8CD]
    [SEO] [DeDe]优化SEO
  • 原文地址:https://www.cnblogs.com/liwanliangblog/p/12809610.html
Copyright © 2011-2022 走看看