快速创建kvm虚拟机(shell)

本文提供了一个Bash脚本,用于通过自动化方式复制KVM虚拟机,包括设置新的IP地址、VNC端口和虚拟机名称。脚本首先检查输入的IP和端口是否可用,然后基于模板创建新的虚拟机配置和磁盘映像,并修改网络配置文件。最后,脚本会启动新创建的虚拟机。
摘要由CSDN通过智能技术生成

通过脚本的方式,快速复制kvm虚拟机

  1. 更改脚本变量

  1. 使用脚本

  1. 结果展示

脚本如下,已测试通过

#!/usr/bin/env bash
# coding: utf-8
#

# ░░░░░░░░░░░░░░░░░░░░░░░░▄░░
# ░░░░░░░░░▐█░░░░░░░░░░░▄▀▒▌░
# ░░░░░░░░▐▀▒█░░░░░░░░▄▀▒▒▒▐
# ░░░░░░░▐▄▀▒▒▀▀▀▀▄▄▄▀▒▒▒▒▒▐
# ░░░░░▄▄▀▒░▒▒▒▒▒▒▒▒▒█▒▒▄█▒▐
# ░░░▄▀▒▒▒░░░▒▒▒░░░▒▒▒▀██▀▒▌
# ░░▐▒▒▒▄▄▒▒▒▒░░░▒▒▒▒▒▒▒▀▄▒▒
# ░░▌░░▌█▀▒▒▒▒▒▄▀█▄▒▒▒▒▒▒▒█▒▐
# ░▐░░░▒▒▒▒▒▒▒▒▌██▀▒▒░░░▒▒▒▀▄
# ░▌░▒▄██▄▒▒▒▒▒▒▒▒▒░░░░░░▒▒▒▒
# ▀▒▀▐▄█▄█▌▄░▀▒▒░░░░░░░░░░▒▒▒




HELPINFO="
用法: createvm [hapn]... \n
Create a virtual machine and create a fixed \n
IP address, vnc port, virtual machine name \n

\t  -h, --help            获取帮助信息\n
\t  -a, --address         设置IP地址\n
\t  -p, --port            设置vnc端口\n
\t  -n, --name            设置虚拟机名称\n

退出状态:\n
\t 0     正常\n
\t 1404  一般问题 (例如:没有对应的选项)\n
\t x403  严重问题 (例如:设置参数不正确)\n
"


options=$(getopt -l "help,autostart,address:,port:,name:" -o "h:a:p:n:" -a -- "$@")
if [ $? -ne 0 ];then
  exit 1404
fi
eval set -- "${options}"

while true;do
    case $1 in
        -h|--help)
            echo -e ${HELPINFO}
            exit 0
            ;;
        -a|--address)
            ping -c3 $2 &>/dev/null
            if [ $? -eq 0 ];then
                echo "$2 该地址好像在网络中的另外一台终端中正在使用, 请尝试其他IP地址"
                exit 1403
            fi
            NEW_MACHINES_ADDRESS=$2
            ;;
        -p|--port)
            ss -anptu | grep ":$2" &>/dev/null
            if [ $? -eq 0 ];then
                echo "$2 该端口正在使用中, 请更换端口继续"
                exit 2403
            fi
            NEW_MACHINES_VNC=$2
            ;;
        -n|--name)
            virsh list --all | grep $2 &>/dev/null
            if [ $? -eq 0 ];then
                echo "$2 虚拟机已经存在, 请更换其他虚拟机名字"
                exit 3403
            fi
            NEW_MACHINES_NAME=$2
            ;;
        --)
            shift
            break
            ;;
    esac
    shift
done

VM_CONFIG_PATH="/etc/libvirt/qemu"
VM_IMAGE_PATH="/kvm/vdisks"
VM_IMAGE_MODIFY_PATH="/kvm/modify"
TEMPLATE_IMAGE_NAME="test-br-network.qcow2"
TEMPLATE_CONFIG_NAME="test-br-network.xml"
VM_SERVER_NAME="test-br-network"

# 修改IP地址
qemu-img create -f qcow2 -b ${VM_IMAGE_PATH}/${TEMPLATE_IMAGE_NAME} ${VM_IMAGE_PATH}/${NEW_MACHINES_NAME}.qcow2
guestmount -a ${VM_IMAGE_PATH}/${NEW_MACHINES_NAME}.qcow2 -m /dev/centos/root ${VM_IMAGE_MODIFY_PATH}
sed -ri "s/^IPADDR.*/IPADDR=${NEW_MACHINES_ADDRESS}/" ${VM_IMAGE_MODIFY_PATH}/etc/sysconfig/network-scripts/ifcfg-eth0
sed -ri "s/${VM_SERVER_NAME}/${NEW_MACHINES_NAME}/" ${VM_IMAGE_MODIFY_PATH}/etc/hostname
guestunmount ${VM_IMAGE_MODIFY_PATH}

# 构建配置文件
cp ${VM_CONFIG_PATH}/{${TEMPLATE_CONFIG_NAME},${NEW_MACHINES_NAME}.xml}
sed -ri "/name/,/name/s/${VM_SERVER_NAME}/NAME/g" ${VM_CONFIG_PATH}/${NEW_MACHINES_NAME}.xml
sed -ri 's/<uuid>.*<\/uuid>//g' ${VM_CONFIG_PATH}/${NEW_MACHINES_NAME}.xml
sed -ri 's/<mac\ address.*\/>//g' ${VM_CONFIG_PATH}/${NEW_MACHINES_NAME}.xml
sed -ri "s/\/kvm\/vdisks\/${TEMPLATE_IMAGE_NAME}/\/kvm\/vdisks\/NAME.qcow2/g" ${VM_CONFIG_PATH}/${NEW_MACHINES_NAME}.xml
sed -i 's/\(port=\)'\''[0-9][0-9][0-9]*'\''/\1'\''VNCPORT'\''/g' ${VM_CONFIG_PATH}/${NEW_MACHINES_NAME}.xml
sed -ri "s/NAME/${NEW_MACHINES_NAME}/" ${VM_CONFIG_PATH}/${NEW_MACHINES_NAME}.xml
sed -ri "s/VNCPORT/${NEW_MACHINES_VNC}/" ${VM_CONFIG_PATH}/${NEW_MACHINES_NAME}.xml
virsh define ${VM_CONFIG_PATH}/${NEW_MACHINES_NAME}.xml
virsh start ${NEW_MACHINES_NAME}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值