271 lines
9.2 KiB
Bash
271 lines
9.2 KiB
Bash
#!/usr/bin/bash
|
|
list(){
|
|
echo "|--------------------------------|"
|
|
echo "|---------批量管理工具箱-----------|"
|
|
echo "|----1.创建自定义配置单个虚拟机------|"
|
|
echo "|----2.批量创建自定义配置虚拟机------|"
|
|
echo "|----3.批量创建默认配置虚拟机--------|"
|
|
echo "|----4.删除虚拟机------------------|"
|
|
echo "|----5.退出-----------------------|"
|
|
}
|
|
dgchuangjian(){
|
|
read -p "请输入你的虚拟机名字" vm_name
|
|
read -p "请输入内存大小(MB)" memory
|
|
read -p "请输入cpu核数" vcpus
|
|
read -p "请输入磁盘大小(G): " disk_size
|
|
kvmuuid=`uuidgen`
|
|
#kvmmac=`openssl rand -hex 3| sed -r 's/..\B/&:/g'`
|
|
virsh define <(
|
|
|
|
cat <<EOF
|
|
<domain type='kvm'>
|
|
<name>$vm_name</name>
|
|
<uuid>$kvmuuid</uuid>
|
|
<metadata>
|
|
<libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
|
|
<libosinfo:os id="http://centos.org/centos/7.0"/>
|
|
</libosinfo:libosinfo>
|
|
</metadata>
|
|
<memory unit='KiB'>$(($memory * 1024))</memory>
|
|
<currentMemory unit='KiB'>2048000</currentMemory>
|
|
<vcpu placement='static'>$vcpus</vcpu>
|
|
<os>
|
|
<type arch='x86_64' machine='pc-q35-rhel9.4.0'>hvm</type>
|
|
<boot dev='hd'/>
|
|
</os>
|
|
<features>
|
|
<acpi/>
|
|
<apic/>
|
|
</features>
|
|
<cpu mode='host-passthrough' check='none' migratable='on'/>
|
|
<clock offset='utc'>
|
|
<timer name='rtc' tickpolicy='catchup'/>
|
|
<timer name='pit' tickpolicy='delay'/>
|
|
<timer name='hpet' present='no'/>
|
|
</clock>
|
|
<on_poweroff>destroy</on_poweroff>
|
|
<on_reboot>restart</on_reboot>
|
|
<on_crash>destroy</on_crash>
|
|
<pm>
|
|
<suspend-to-mem enabled='no'/>
|
|
<suspend-to-disk enabled='no'/>
|
|
</pm>
|
|
<devices>
|
|
<emulator>/usr/libexec/qemu-kvm</emulator>
|
|
<disk type='file' device='disk'>
|
|
<driver name='qemu' type='qcow2' discard='unmap'/>
|
|
<source file='/var/lib/libvirt/images/$vm_name.qcow2'/>
|
|
<target dev='vda' bus='virtio'/>
|
|
<address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
|
|
</disk>
|
|
<disk type='file' device='cdrom'>
|
|
<driver name='qemu' type='raw'/>
|
|
<target dev='sda' bus='sata'/>
|
|
<readonly/>
|
|
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
|
</disk>
|
|
<controller type='usb' index='0' model='qemu-xhci' ports='15'>
|
|
<address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
|
|
</controller>
|
|
<controller type='pci' index='0' model='pcie-root'/>
|
|
<controller type='pci' index='1' model='pcie-root-port'>
|
|
<model name='pcie-root-port'/>
|
|
<target chassis='1' port='0x10'/>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
|
|
</controller>
|
|
<controller type='pci' index='2' model='pcie-root-port'>
|
|
<model name='pcie-root-port'/>
|
|
<target chassis='2' port='0x11'/>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
|
|
</controller>
|
|
<controller type='pci' index='3' model='pcie-root-port'>
|
|
<model name='pcie-root-port'/>
|
|
<target chassis='3' port='0x12'/>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
|
|
</controller>
|
|
<controller type='pci' index='4' model='pcie-root-port'>
|
|
<model name='pcie-root-port'/>
|
|
<target chassis='4' port='0x13'/>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
|
|
</controller>
|
|
<controller type='pci' index='5' model='pcie-root-port'>
|
|
<model name='pcie-root-port'/>
|
|
<target chassis='5' port='0x14'/>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
|
|
</controller>
|
|
<controller type='pci' index='6' model='pcie-root-port'>
|
|
<model name='pcie-root-port'/>
|
|
<target chassis='6' port='0x15'/>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
|
|
</controller>
|
|
<controller type='pci' index='7' model='pcie-root-port'>
|
|
<model name='pcie-root-port'/>
|
|
<target chassis='7' port='0x16'/>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/>
|
|
</controller>
|
|
<controller type='pci' index='8' model='pcie-root-port'>
|
|
<model name='pcie-root-port'/>
|
|
<target chassis='8' port='0x17'/>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x7'/>
|
|
</controller>
|
|
<controller type='pci' index='9' model='pcie-root-port'>
|
|
<model name='pcie-root-port'/>
|
|
<target chassis='9' port='0x18'/>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' multifunction='on'/>
|
|
</controller>
|
|
<controller type='pci' index='10' model='pcie-root-port'>
|
|
<model name='pcie-root-port'/>
|
|
<target chassis='10' port='0x19'/>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/>
|
|
</controller>
|
|
<controller type='pci' index='11' model='pcie-root-port'>
|
|
<model name='pcie-root-port'/>
|
|
<target chassis='11' port='0x1a'/>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x2'/>
|
|
</controller>
|
|
<controller type='pci' index='12' model='pcie-root-port'>
|
|
<model name='pcie-root-port'/>
|
|
<target chassis='12' port='0x1b'/>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x3'/>
|
|
</controller>
|
|
<controller type='pci' index='13' model='pcie-root-port'>
|
|
<model name='pcie-root-port'/>
|
|
<target chassis='13' port='0x1c'/>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x4'/>
|
|
</controller>
|
|
<controller type='pci' index='14' model='pcie-root-port'>
|
|
<model name='pcie-root-port'/>
|
|
<target chassis='14' port='0x1d'/>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x5'/>
|
|
</controller>
|
|
<controller type='sata' index='0'>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
|
|
</controller>
|
|
<controller type='virtio-serial' index='0'>
|
|
<address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
|
|
</controller>
|
|
<interface type='network'>
|
|
<mac address='52:54:00:c6:ca:2b'/>
|
|
<source network='default'/>
|
|
<model type='virtio'/>
|
|
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
|
|
</interface>
|
|
<serial type='pty'>
|
|
<target type='isa-serial' port='0'>
|
|
<model name='isa-serial'/>
|
|
</target>
|
|
</serial>
|
|
<console type='pty'>
|
|
<target type='serial' port='0'/>
|
|
</console>
|
|
<channel type='unix'>
|
|
<target type='virtio' name='org.qemu.guest_agent.0'/>
|
|
<address type='virtio-serial' controller='0' bus='0' port='1'/>
|
|
</channel>
|
|
<input type='tablet' bus='usb'>
|
|
<address type='usb' bus='0' port='1'/>
|
|
</input>
|
|
<input type='mouse' bus='ps2'/>
|
|
<input type='keyboard' bus='ps2'/>
|
|
<graphics type='vnc' port='-1' autoport='yes'>
|
|
<listen type='address'/>
|
|
</graphics>
|
|
<audio id='1' type='none'/>
|
|
<video>
|
|
<model type='vga' vram='16384' heads='1' primary='yes'/>
|
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
|
|
</video>
|
|
<watchdog model='itco' action='reset'/>
|
|
<memballoon model='virtio'>
|
|
<address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
|
|
</memballoon>
|
|
<rng model='virtio'>
|
|
<backend model='random'>/dev/urandom</backend>
|
|
<address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/>
|
|
</rng>
|
|
</devices>
|
|
</domain>
|
|
|
|
|
|
EOF
|
|
|
|
)
|
|
|
|
# 创建磁盘镜像
|
|
|
|
qemu-img create -f qcow2 /var/lib/libvirt/images/$vm_name.qcow2 $(($disk_size * 1024))G
|
|
|
|
}
|
|
|
|
plchuangjian(){
|
|
read -p "请输入虚拟机数量: " count
|
|
|
|
for ((i=1; i<=$count; i++)); do
|
|
|
|
dgchuangjian
|
|
|
|
done
|
|
}
|
|
plchaungjian1(){
|
|
read -p "请输入虚拟机数量: " count
|
|
|
|
for ((i=1; i<=$count; i++)); do
|
|
|
|
read -p "请输入虚拟机名称: " vm_name
|
|
|
|
memory=2097152
|
|
|
|
vcpus=2
|
|
|
|
disk_size=10
|
|
|
|
dgchuangjian
|
|
|
|
done
|
|
}
|
|
shanchu(){
|
|
virsh list --all | awk '/^.{2}/ { print $2 }'
|
|
|
|
read -p "请输入要删除的虚拟机名称: " vm_name
|
|
|
|
virsh destroy $vm_name
|
|
|
|
virsh undefine $vm_name
|
|
|
|
rm -f /var/lib/libvirt/images/$vm_name.qcow2
|
|
|
|
echo "虚拟机 '$vm_name' 已删除。"
|
|
}
|
|
tc(){
|
|
exit
|
|
}
|
|
while :
|
|
do
|
|
list
|
|
read -p "请输入您的选项:(1/2/3/4/5)" num
|
|
case $num in
|
|
1)
|
|
dgchuangjian
|
|
sleep 3
|
|
;;
|
|
2)
|
|
plchuangjian
|
|
sleep 3
|
|
;;
|
|
3)
|
|
plchuangjian1
|
|
sleep 3
|
|
;;
|
|
4)
|
|
shanchu
|
|
sleep 3
|
|
;;
|
|
5)
|
|
tc
|
|
sleep 1
|
|
;;
|
|
*)
|
|
echo -e "\033[41;37m 请您按要求输入!!!!!! \033[0m"
|
|
;;
|
|
esac
|
|
done |