自动创建KVM虚拟机脚本(链接克隆升级版)
vim clone-host.sh
#!/bin/bash #获取模板机 template1=$(virsh list --all|grep temp*|awk '{print $2}'|head -1) template2=$(virsh list --all|grep temp*|awk '{print $2}'|sed -n '2'p) #usage函数 usage(){ echo "USAGE:$0 虚拟机名" && exit } #clone-template1函数 clone-template1(){ cd /var/lib/libvirt/images/ if [ -e $name.qcow2 ];then echo "$name.qcow2 file exist!" exit else qemu-img create -f qcow2 -b $template1.qcow2 $name.qcow2 &> /dev/null if [ $? -ne 0 ];then echo "创建磁盘镜像文件失败" exit else echo "创建磁盘镜像文件成功" fi fi cd /etc/libvirt/qemu/ if [ -e $name.xml ];then echo "$name.xml file exist!" exit else sed "s#$template1#$name#g" $template1.xml >$name.xml if [ $? -ne 0 ];then echo "创建配置文件失败" exit else echo "创建配置文件成功" sed -i '/uuid/d' $name.xml if [ $? -ne 0 ];then echo "删除uuid失败" exit else echo "删除uuid成功" fi sed -i '/<mac/d' $name.xml if [ $? -ne 0 ];then echo "删除mac失败" exit else echo "删除mac成功" fi fi fi virsh define $name.xml &> /dev/null if [ $? -ne 0 ];then echo "创建$name虚拟机失败" exit else echo "创建$name虚拟机成功" fi virsh start $name &> /dev/null if [ $? -ne 0 ];then echo "$name虚拟机开机失败" exit else echo "$name虚拟机开机成功" fi echo "$name对应vnc端口$(virsh vncdisplay $name)" } #clone-template2函数 clone-template2(){ cd /var/lib/libvirt/images/ if [ -e $name.qcow2 ];then echo "$name.qcow2 file exist!" exit else qemu-img create -f qcow2 -b $template2.qcow2 $name.qcow2 &> /dev/null if [ $? -ne 0 ];then echo "创建磁盘镜像文件失败" exit else echo "创建磁盘镜像文件成功" fi fi cd /etc/libvirt/qemu/ if [ -e $name.xml ];then echo "$name.xml file exist!" exit else sed "s#$template2#$name#g" $template2.xml >$name.xml if [ $? -ne 0 ];then echo "创建配置文件失败" exit else echo "创建配置文件成功" sed -i '/uuid/d' $name.xml if [ $? -ne 0 ];then echo "删除uuid失败" exit else echo "删除uuid成功" fi sed -i '/<mac/d' $name.xml if [ $? -ne 0 ];then echo "删除mac失败" exit else echo "删除mac成功" fi fi fi virsh define $name.xml &> /dev/null if [ $? -ne 0 ];then echo "创建$name虚拟机失败" exit else echo "创建$name虚拟机成功" fi virsh start $name &> /dev/null if [ $? -ne 0 ];then echo "$name虚拟机开机失败" exit else echo "$name虚拟机开机成功" fi echo "$name对应vnc端口$(virsh vncdisplay $name)" } #修改网络模式(NAT|Bridge) change-net(){ while true do read -p "默认网络模式:NAT,是否更改为Bridge模式?[y/n]" choose case $choose in y) sed -i "s/type='network'/type='bridge'/g" /etc/libvirt/qemu/$name.xml sed -i "s/network='default'/bridge='br0'/g" /etc/libvirt/qemu/$name.xml virsh reboot $name break ;; n) break ;; *) echo "请正确选择[y/n]" continue esac done } echo "当前可用模板:" cat <<EOF 1.[$template1] 2.[$template2] 3.[exit] EOF read -p "请选择要克隆的模板[1-3]:" num case $num in 1) read -p "请输入新虚拟机名称:" name clone-template1 change-net ;; 2) read -p "请输入新虚拟机名称:" name clone-template2 change-net ;; 3) exit 0 ;; *) echo "请正确选择[1-3]!" exit 0 esac
运行脚本
bash clone-host.sh
支持选择模板创建虚拟机/自定义虚拟机名/支持修改网络模式