自动创建KVM虚拟机脚本(链接克隆升级版)

作者: oldboy 分类: Openstack,Shell 发布时间: 2022-08-09 16:53
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

支持选择模板创建虚拟机/自定义虚拟机名/支持修改网络模式

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

标签云