lcfvol(1.2版快速创建kvm实验环境脚本)_2018_lcf

哈哈 阅读:462 2021-09-06 11:21:31 评论:0
#!/bin/bash 
#version:lcfvol1.2 
#writer:lcf 
#E-mail:cbuy518@163.com 
#My website:www.ald8.cn 
#date:2018-6-26 
#virsh version  根据库编译:libvirt 3.2.0  使用库:libvirt 3.2.0  使用的 API: QEMU 3.2.0  运行管理程序: QEMU 1.5.3 
#--需要安装libguestfs-tools-c.x86_64支持 
#--本原始镜像分配磁盘大小为60G,1个CPU,内存1.2G,可自已生成原始镜像后自定义值 
#--自定义default.xml配置文件时,请确保下面几行<..>变量名<..>中的变量名格式和下面一致(其它都可以自定义),本脚本以下面方式查询和定义主机名、内存、CPU、磁盘大小值 
#  <name>%Name%</name> 
#  <memory unit='KiB'>%Memory%</memory> 
#  <currentMemory unit='KiB'>%Memory%</currentMemory> 
#  <vcpu placement='static'>%Cpu%</vcpu> 
#  <source file='/var/lib/libvirt/images/%Name%.img'/> 
# --本脚本使用方法,#lcfvol help 加参数help可以查看 
 
#-S---------------------配置项 
#VOLPATH--设置默认原始境像路径,镜像文件名可自定义 ||  XMLPATH--设置默认原配置文件路径,配置文件名可自定义 ||  NAME--设置默认虚拟主机名 
#MEMORY--设置默认内存大小 || CPU--设置默CPU个数  ||  DISK--设置默认磁盘大小(不能小于原像生成的磁盘大小) 
VOLPATH=/var/lib/libvirt/images/default.qcow2 
XMLPATH=/etc/libvirt/qemu/default.xml 
VP="${VOLPATH%/*}/" 
XP="${XMLPATH%/*}/" 
NAME="cs7_" 
MEMORY=1.2 
CPU=1 
DISK=60 
#-D---------------------配置项 
 
#lcfvol d 名字(不带数字编号) 2 1 3 5 //快速删除虚拟机 
 
#-S---------------------快速生成默认配置虚拟机 
if [ "$1" == "" -o "$1" == "fs" ];then 
	echo "默认配置-->主机前缀名:$NAME  CPU:$CPU  内存:"$MEMORY"G 磁盘:"$DISK"G" 
	if [ "$1" == "" ];then 
		read -p "请问创建多少台虚拟机:" num 
		expr $num + 0 &>/dev/null 
		[[ $? -ne 0 && $? != "fs" ]] &&  echo "无效输入" && exit 
		[ $num -lt 1 ] && echo "无效输入" && exit 
	elif [  "$1" == "fs" ];then 
		[ "$2" != "" ] && echo $2 | egrep -w '[0-9]{1,3}' >/dev/null && num=$2 || exit 
	fi 
	cd $XP 
	temp=`ls $NAME*.xml | sort`  
	temp=${temp//cs7_/} 
	temp=${temp//.xml/} 
#-S--自动补足指定位数字 
	while :  
   		do 
		let "i++" 
		echo $temp | grep $i >/dev/null 
		[ $? -ne 0 ] && lnum[i]=$i  
		[ ${#lnum[@]} -eq $num ] && break 
	done 
#-D--自动补足指定位数字 
 
	if [ ! $num == 'lcf' ];then 
		echo "正在创建虚拟机...." 
		for y in ${lnum[@]} 
			do 
				cp $XMLPATH  $XP$temp1.xml 
				Mtemp=`echo "$MEMORY * 1024000" | bc` && Mtemp=${Mtemp%%.*} 
				sed  "s,%Name%,$NAME$y,g" $XMLPATH > $XP$NAME$y.xml 
				sed  "s,%Memory%,$Mtemp,g" $XP$NAME$y.xml -i 
				sed  "s,%Cpu%,$CPU,g" $XP$NAME$y.xml -i 
				qemu-img create -b $VOLPATH -f qcow2 $VP$NAME$y.img  "$DISK"G  > /dev/null 
				virsh define $XP$NAME$y.xml  > /dev/null 
				echo "$NAME$y 创建完成" 
		done 
		echo "虚拟机$NAME编号为${lnum[@]},一共${#lnum[@]}台全部创建完成" 
	virsh list --all 
	fi 
exit 
fi 
#-D---------------------快速生成默认配置虚拟机 
 
#-S---------------------自定义IP和主机名生成虚拟机 
#-S--修改IP和主机名 ,检测主机名是否存在了 
cpn(){ 
if [ "$1" == "ip" ];then 
echo "NAME=eth0 
DEVICE="eth0" 
ONBOOT=yes 
NETBOOT=yes 
IPV6INIT=no 
BOOTPROTO=none 
TYPE=Ethernet 
IPADDR="$2" 
PREFIX=24" >/ifcfg-eth0 
elif [ "$2" == "gateway" ];then 
echo "GATEWAY="$1"" >>/ifcfg-eth0 
elif [ "$2" == "dns" ];then 
echo "NAMEserver "$2"" > /etc/resolv.conf 
elif [ "$1" == "NAMEcheck" ];then 
	temp=(`virsh list --all | awk  '{print $2}'`) 
	for y in ${temp[@]} 
	do 
		[ "$2" == $y ] && return 110 
	done 
fi 
} 
#-D--修改IP和主机名,检测主机名是否存在了 
#--使用例子:lcfvol add test 192.168.0.1 c=1 m=1.5 d=80 (add 名字 固定顺序) 
CreatePc(){ 
	cpn NAMEcheck $2 
	if [ "$2" != "" -a $? != "110" ];then 
		All=("$3" "$4" "$5" "$6") 
		for y in ${All[@]} 
		do 
			echo $y | egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' > /dev/null 
			[ $? -eq 0 ] && Itemp=$y 
			echo $y | egrep 'c=[1-9][0-9]?' > /dev/null 
			[ $? -eq 0 ] && Ctemp=$y 
			echo $y | egrep 'm=[0-9]{1,2}\.?[0-9]{0,3}' > /dev/null 
			[ $? -eq 0 ] && Mtemp=$y		 
			echo $y | egrep 'd=[0-9]{1,4}' > /dev/null 
			[ $? -eq 0 ] && Dtemp=$y		 
		done			 
		Ctemp=${Ctemp##*=} ; Mtemp=${Mtemp##*=} ; Dtemp=${Dtemp##*=} ; Ctemp=${Ctemp%%.*} 
		[ "$Itemp" == "" ]  && Itemp="未指定"  
		[ "$Ctemp" == "" ]  && Ctemp="$CPU" 
		[ "$Mtemp" == "" ]  && Mtemp="$MEMORY" 
		[ "$Dtemp" == "" ]  && Dtemp="$DISK" 
		echo "主机名:$2  IP:$Itemp  CPU:$Ctemp  内存:"$Mtemp"G 磁盘:"$DISK"G" 
		Mtemp=`echo "$Mtemp * 1024000" | bc` && Mtemp=${Mtemp%%.*} 
		[ "$1" == "addi" -o $1 == "addsi" ] && ans="y" && echo "正在创建$2.."  || read -p "确认创建这台主机吗(y)" ans  
		if [ "$ans" == "y" ];then 
			cp $XMLPATH  $XP$2.xml 
			sed  "s,%Name%,$2,g" $XMLPATH > $XP$2.xml 
			sed  "s,%Memory%,$Mtemp,g" $XP$2.xml -i 
			sed  "s,%Cpu%,$Ctemp,g" $XP$2.xml -i		 
			qemu-img create -b $VOLPATH -f qcow2 $VP$2.img "$Dtemp"G  > /dev/null 
			virsh define $XP$2.xml > /dev/null 
			[ ! $Itemp == "未指定" ] && cpn ip $Itemp		 
			[ ! $Itemp == "未指定" ] && virt-copy-in -d "$2"  /ifcfg-eth0 /etc/sysconfig/network-scripts/ > /dev/null 
			echo "$2" > /hostname 
			virt-copy-in -d "$2"  /hostname /etc/ 
			rm -rf  /ifcfg-eth0 /hostname 
			Mtemp=$MEMORY 
			Ctemp=$CPU 
			Dtemp=$DISK 
			echo "-----------主机:$2 创建完成--------------------" 
		fi 
	else 
		echo "主机:$2 已存在" 
	fi 
} 
 
if [ "$1" == "add" -o "$1" == "addi" ];then 
	CreatePc "$1" "$2" "$3" "$4" "$5" "$6" 
elif [ "$1" == "adds" -o "$1" == "addsi" ];then 
	if [ -e "$2" ];then 
		n=`cat $2 | wc -l` 
		for line in `seq $n` 
		do 
			y=(`sed -n ''$line'p' $2`) 
			CreatePc "$1" "${y[0]}" "${y[1]}" "${y[2]}" "${y[3]}" "${y[4]}"  
		done 
	else 
	 
		echo "无效参数输入格式(可以加--help查找例子),请检查再尝试" 
	fi	 
exit 
fi 
#-D---------------------自定义IP和主机名生成虚拟机 
 
#-S---------------------删除所有主机或删除和某一台主机 
if [ "$1" == "delall" -o "$1" == "delalli" ];then 
	[ "$1" != "delalli" ] && read -p "你确认要删除所有主机吗(y)" ans 
	if [ "$ans" == "y" ];then 
		cd $VP 
		ls *.img | xargs -n1 rm -rf  
		cd $XP 
		temp=${XMLPATH##*\/} 
		xmls=`ls *.xml | sed -r '/'$temp'/d;s/.xml//g'` 
		echo $xmls | xargs -n1 virsh undefine 
		echo $xmls | xargs -n1 rm -rf  
	fi 
elif [ "$1" == "del" ];then 
	if [ $2 ];then 
		virsh undefine $2 
		rm -rf $VP$2.img 
	fi	 
exit 
fi 
#-D---------------------删除所有主机或删除和某一台主机 
 
if [ "$1" == "help" ];then 
echo '	 
----------使用方法例子 (注意切换成英文模式输入,才不会造成变量字符编码不识别的情况) 
 
-1-快速生成默认虚拟主机(一种是交互式和非交互式fs) 
 
  [root@lcf2018 /]# lcfvol  
  请问创建多少台虚拟机:2             //交互式创建,输入要创建几台 
  ....      
   [root@lcf2018 /]# lcfvol fs 2   //非交互式,fs是关键字 后面加数字要创建几台 
    .... 
     
-2-自定义虚拟主机(一种是交互式add和非交互式addi) 
 
	格式:#lcfvol add/addi  主机名 ip c=(cpu个数) m=(内存大小,单位G) d=(硬盘大小,单位G) // (add/addi 主机名)固定参数位置,后面的不固定和可选 
	 
	[root@lcf2018 /]# lcfvol add lcf c=2 m=2 d=70  //交互式创建,add关键字参数  
	主机名:lcf  IP:未指定  CPU:2  内存:2G 磁盘:60G 
	确认创建这台主机吗(y)y 
	.... 
	[root@lcf2018 ~]# lcfvol addi test m=2 192.168.1.20 
	主机名:test  IP:192.168.1.20  CPU:1  内存:2G 磁盘:60G 
	正在创建test.. 
	-----------主机:test 创建完成-------------------- 
	[root@lcf2018 /]# lcfvol addi ald8 c=2 m=2 d=70    //非交互式创建,addi关键字参数 
	主机名:ald8  IP:192.168.0.66  CPU:2  内存:2G 磁盘:60G 
	正在创建ald8.. 
	... 
 
-3-文件导入批量生成自定义主机(一种是交互式adds和非交互式addsi)	 
 
	文件格式:主机名 ip c=(cpu个数) m=(内存大小,单位G) d=(硬盘大小,单位G) // 以空格作分隔,(主机名)固定第一个位置,后面的不固定和可选 
	[root@lcf2018 ~]# cat adds /ips   
	pc3 192.168.1.20 m=2 c=2 d=80 
	lfc1 192.168.1.2 c=2  
	ald 192.168.1.1  
    ... 
     
   [root@lcf2018 ~]# lcfvol adds /ips       //交互式创建,adds关键字参数 
	主机名:pc3  IP:192.168.1.20  CPU:1  内存:2G 磁盘:60G 
	确认创建这台主机吗(y) 
	.... 
 
	[root@lcf2018 ~]# lcfvol addsi /ips      //非交互式创建,addsi关键字参数 
	主机名:pc3  IP:192.168.1.20  CPU:1  内存:2G 磁盘:60G 
	正在创建pc3.. 
'  
fi 

标签:程序员
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

搜索
排行榜
关注我们

一个IT知识分享的公众号