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.作者投稿可能会经我们编辑修改或补充。