#!/bin/bash #kvm manager #2017/08/02 by blackmed #for centos7
images_dir=/var/lib/libvirt/images xml_dir=/etc/libvirt/qemu red_col="\e[1;31m" blue_col="\e[1;34m" reset_col="\e[0m"
centos6u8_base_img=centos6u8_base.qcow2 centos7u3_base_img=centos7u3_base.qcow2 win7_base_img=win7_base.qcow2
centos6u8_base_xml=centos6u8_base.xml centos7u3_base_xml=centos7u3_base.xml win7_base_xml=win7_base.xml
menu() { cat <<-EOF +------------------------------------------------+ | | | ====================== | | 虚拟机基本管理 v4.0 | | by tianyun | | ====================== | | 1. 安装KVM | | 2. 安装或重置CentOS-6.8 | | 3. 安装或重置CentOS-7.3 | | 4. 安装或重置Windows-7 | | 5. 删除所有虚拟机 | | q. 退出管理程序 | | | +------------------------------------------------+ EOF }
kvm_install_hint() { systemctl libvirtd status &>/dev/null if [ $? -ne 0 ];then echo -e "${red_col}未安装KVM软件或未启动libvirtd进程,请检查${reset_col}" continue fi }
download_kvm_script() { wget -O /root/Desktop/virt-manager.desktop ftp://10.18.40.100/kvm/virt-manager.desktop &>/dev/null wget -O /root/Desktop/Readme.txt ftp://10.18.40.100/kvm/readme.txt &>/dev/null chmod a+x /root/Desktop/virt-manager.desktop &>/dev/null
wget -O /root/桌面/virt-manager.desktop ftp://10.18.40.100/virt-manager.desktop &>/dev/null
wget -O /root/桌面/Readme.txt ftp://10.18.40.100/kvm/readme.txt &>/dev/null
chmod a+x /root/桌面/virt-manager.desktop &>/dev/null
wget -O /usr/local/sbin/kvm-manager ftp://10.18.40.100/kvm/kvm-manager.sh &>/dev/null
chmod a+x /usr/local/sbin/kvm-manager &>/dev/null
}
conn_test() { ping -c1 10.18.40.100 &>/dev/null if [ $? -ne 0 ];then echo -e "${red_col}无法访问10.18.40.100, 请检查网络或稍后再试!${reset_col}" echo exit fi }
menu
while : do
echo -en "${blue_col}请选择相应的操作[1-7], 显示菜单[m]: ${reset_col}"
read choose
case $choose in
1)
conn_test
download_kvm_script
read -p "确认开始安装KVM [y]: " kvm_install
if [ ! "${kvm_install}" = "y" ];then
echo -e "$red_col输入不正确! $reset_col"
continue
fi
rpm -q virt-manager &>/dev/null
if [ $? -ne 0 ];then
echo "开始安装KVM......"
yum -y groupinstall "virtual*"
systemctl start libvirtd
systemctl enable libvirtd
fi
echo "-----------------------------------------------------------"
echo "KVM 安装完成,请查看桌面上的Readme文件..."
echo "-----------------------------------------------------------"
;;
2)
conn_test
download_kvm_script
read -p "确认重置CentOS 6.8 虚拟机吗?[y]: " rebuild_centos6u8
if [ ! "${rebuild_centos6u8}" = "y" ];then
echo -e "$red_col输入不正确! $reset_col"
continue
fi
if [ ! -f ${images_dir}/${centos6u8_base_img} ];then
echo "正在下载镜像文件,请稍候......"
wget -O ${images_dir}/${centos6u8_base_img} ftp://10.18.40.100/kvm/base_image/${centos6u8_base_img}
fi
for i in {1..5}
do
vm_name=centos6u8-${i}
vm_uuid=$(uuidgen)
vm_disk=${vm_name}.qcow2
vm_xml=${xml_dir}/${vm_name}.xml
vm_mac="52:54:$(dd if=/dev/urandom count=1 2>/dev/null | md5sum | sed -r 's/^(..)(..)(..)(..).*$/\1:\2:\3:\4/')"
base_xml=${xml_dir}/centos6u8_base.xml
virsh destroy ${vm_name} &>/dev/null
virsh undefine ${vm_name} &>/dev/null
rm -rf ${xml_dir}/${vm_xml}
rm -rf ${images_dir}/${vm_name}.*
#disk
qemu-img create -f qcow2 -b ${images_dir}/${centos6u8_base_img} ${images_dir}/${vm_disk} &>/dev/null
#xml
wget -q ftp://10.18.40.100/kvm/base_xml/${centos6u8_base_xml} -O ${base_xml}
cp ${base_xml} ${vm_xml}
sed -i -r "s#VM_NAME#$vm_name#" ${vm_xml}
sed -i -r "s#VM_UUID#$vm_uuid#" ${vm_xml}
sed -i -r "s#VM_DISK#$vm_disk#" ${vm_xml}
sed -i -r "s#VM_MAC#$vm_mac#" ${vm_xml}
#define
virsh define ${vm_xml} &>/dev/null
echo "虚拟机${vm_name} 重置完成..."
done
;;
3)
conn_test
download_kvm_script
read -p "确认重置所有的CentOS7.3虚拟机吗?[y]: " rebuild_centos7u3
if [ ! "${rebuild_centos7u3}" = "y" ];then
echo -e "$red_col输入不正确! $reset_col"
continue
fi
if [ ! -f ${images_dir}/${centos7u3_base_img} ];then
echo "正在下载镜像文件,请稍候......"
wget -O ${images_dir}/${centos7u3_base_img} ftp://10.18.40.100/kvm/base_image/${centos7u3_base_img}
fi
for i in {1..5}
do
vm_name=centos7u3-${i}
vm_uuid=$(uuidgen)
vm_disk=${vm_name}.qcow2
vm_xml=${xml_dir}/${vm_name}.xml
vm_mac="52:54:$(dd if=/dev/urandom count=1 2>/dev/null | md5sum | sed -r 's/^(..)(..)(..)(..).*$/\1:\2:\3:\4/')"
base_xml=${xml_dir}/centos7u3_base.xml
virsh destroy ${vm_name} &>/dev/null
virsh undefine ${vm_name} &>/dev/null
rm -rf ${xml_dir}/${vm_xml}
rm -rf ${images_dir}/${vm_name}.*
#disk
qemu-img create -f qcow2 -b ${images_dir}/${centos7u3_base_img} ${images_dir}/${vm_disk} &>/dev/null
#xml
wget -q ftp://10.18.40.100/kvm/base_xml/${centos7u3_base_xml} -O ${base_xml}
cp ${base_xml} ${vm_xml}
sed -i -r "s#VM_NAME#$vm_name#" ${vm_xml}
sed -i -r "s#VM_UUID#$vm_uuid#" ${vm_xml}
sed -i -r "s#VM_DISK#$vm_disk#" ${vm_xml}
sed -i -r "s#VM_MAC#$vm_mac#" ${vm_xml}
#define
virsh define ${vm_xml} &>/dev/null
echo "虚拟机${vm_name} 重置完成..."
done
;;
4)
conn_test
download_kvm_script
read -p "确认重置 windows 7 虚拟机吗?[y]: " rebuild_win7
if [ ! "${rebuild_win7}" = "y" ];then
echo -e "$red_col输入不正确! $reset_col"
continue
fi
if [ ! -f ${images_dir}/${win7_base_img} ];then
echo "正在下载镜像文件,请稍候......"
wget -O ${images_dir}/${win7_base_img} ftp://10.18.40.100/kvm/base_image/${win7_base_img}
fi
virsh destroy win7 &>/dev/null
virsh undefine win7 &>/dev/null
rm -rf ${xml_dir}/win7.xml
rm -rf ${images_dir}/win7.qcow2
qemu-img create -f qcow2 -b ${images_dir}/${win7_base_img} ${images_dir}/win7.qcow2 &>/dev/null
wget -q ftp://10.18.40.100/kvm/base_xml/win7_base.xml -O ${xml_dir}/win7.xml
virsh define ${xml_dir}/win7.xml &>/dev/null
echo "虚拟机 windows 重置完成..."
;;
5)
conn_test
download_kvm_script
all_vm=$(virsh list --all |awk '/[0-9]/{print $2}')
echo -en "${red_col}确认删除所有虚拟机吗?[y]:${reset_col} "
read delete_all
if [ ! "${delete_all}" = "y" ];then
echo -e "$red_col放弃删除! $reset_col"
continue
fi
for vm in ${all_vm}
do
virsh destroy $vm &>/dev/null
virsh undefine $vm &>/dev/null
rm -rf ${xml_dir}/${vm}.xml
rm -rf ${images_dir}/${vm}*
echo "已删除虚拟机 $vm"
done
;;
m)
clear
menu
;;
q)
exit
;;
'')
;;
*)
echo "输入错误!"
esac
done