CentOS7批量部署KVM虚拟机脚本
#!/bin/bash
#
#提示信息--Prompt information
echo
cat << eof
--------创建镜像--------
1、批量创建
2、单个虚拟机
3、批量删除
4、删除单个
5、退出(sign out)
------Create mirror-----
eof
echo
#输入选项--Input options
read -p "输入选项(Input options):" option
function num() {
#虚拟机数量--Number of virtual machines
read -p "虚拟机数量(Number of virtual machines):" number
}
function seat() {
read -p "源配置文件(Source profile):" sfile
read -p "源镜像(Source image):" simg
read -p "存储池(Storage pool):" pools
if [ -z $pools ]; then
pools=/var/lib/libvirt/images
fi
}
function opt() {
#定义虚拟机名,UUID,MAC
vm_name=vm${i}_$vmn
vm_uuid=$(uuidgen)
vm_mac=$(openssl rand -hex 3 | sed -r 's/(..)(..)(..)/52:54:00:\1:\2:\3/')
}
function files() {
#判断文件是否存在
if [ -e $pools\/$vm_name.qcow2 ]; then
echo "文件已存在(File exists)"
read -p "是否删除(whether delete)(y/n):" yn
if [ $yn == "y" ]; then
virsh destroy $vm_name &> /dev/null
virsh undefine $vm_name &> /dev/null
rm -rf $pools\/$vm_name.qcow2
virtual
else
continue
fi
else
virtual
fi
}
function onle_files() {
#判断文件是否存在
echo 已有虚拟机
virsh list --all | grep vm | awk '{print $2}'
read -p "请输入虚拟机名:" kvm_name
if [ -e $pools\/$kvm_name.qcow2 ]; then
echo "文件已存在(File exists)"
read -p "是否删除(whether delete)(y/n):" yn
if [ $yn == "y" ]; then
virsh destroy $kvm_name &> /dev/null
virsh undefine $kvm_name &> /dev/null
rm -rf $pools\/$kvm_name.qcow2
onle_virtual
else
exit
fi
else
onle_virtual
fi
}
function virtual() {
#复制虚拟机配置文件--Copy virtual machine profile
cp $sfile /etc/libvirt/qemu/vm${i}_$vmn.xml
#部署虚拟机--Deploy virtual machine
qemu-img create -f qcow2 -b $simg $pools\/$vm_name.qcow2 &> /dev/null
#编辑配置文件--Edit profile
#替换虚拟机名
sed -ri "s|vm_name|$vm_name|g" /etc/libvirt/qemu/vm${i}_$vmn.xml
#替换虚拟机地址
sed -ri "s|vm_place|$pools\/$vm_name.qcow2|g" /etc/libvirt/qemu/vm${i}_$vmn.xml
#替换uuid
sed -ri "s|vm_uuid|$vm_uuid|g" /etc/libvirt/qemu/vm${i}_$vmn.xml
#替换mac
sed -ri "s|vm_mac|$vm_mac|g" /etc/libvirt/qemu/vm${i}_$vmn.xml
#创建虚拟机--Create virtual machine
virsh define /etc/libvirt/qemu/vm${i}_$vmn.xml &> /dev/null
}
function onle_virtual() {
#复制虚拟机配置文件--Copy virtual machine profile
cp $sfile /etc/libvirt/qemu/$kvm_name.xml
#部署虚拟机--Deploy virtual machine
qemu-img create -f qcow2 -b $simg $pools\/$kvm_name.qcow2 &> /dev/null
#编辑配置文件--Edit profile
#替换虚拟机名
sed -ri "s|vm_name|$kvm_name|g" /etc/libvirt/qemu/$kvm_name.xml
#替换虚拟机地址
sed -ri "s|vm_place|$pools\/$kvm_name.qcow2|g" /etc/libvirt/qemu/$kvm_name.xml
#替换uuid
sed -ri "s|vm_uuid|$vm_uuid|g" /etc/libvirt/qemu/$kvm_name.xml
#替换mac
sed -ri "s|vm_mac|$vm_mac|g" /etc/libvirt/qemu/$kvm_name.xml
#创建虚拟机--Create virtual machine
virsh define /etc/libvirt/qemu/$kvm_name.xml &> /dev/null
}
#创建虚拟机--Create virtual machine
case $option in
1)
read -p "虚拟机名称:" vmn
num
seat
for i in $(seq $number);
do
opt
files
virtual
done
;;
2)
seat
opt
onle_files
onle_virtual
;;
3)
echo 已有虚拟机
virsh list --all | grep vm | awk '{print $2}'
read -p "输入系统名:" vmn
num
read -p "存储池(Storage pool):" pool
for i in $(seq $number);
do
vm_name=vm${i}_$vmn
virsh destroy $vm_name &> /dev/null
virsh undefine $vm_name &> /dev/null
rm -rf $pool\/$vm_name.qcow2
done
;;
4)
echo 已有虚拟机
virsh list --all | grep vm | awk '{print $2}'
read -p "虚拟机名称:" vm_name
read -p "存储池(Storage pool):" pool
virsh destroy $vm_name &> /dev/null
virsh undefine $vm_name &> /dev/null
rm -rf $pool\/$vm_name.qcow2
;;
5)
exit
;;
*)
echo 输入错误,请重新输入!!!
echo Input error, please re-enter!!!
;;
esac
virsh list --all
镜像的导出/导入
#导出
#!/bin/bash
#
size=$(docker image ls | grep -c ago)
if [ -z $size ]; then
echo "无镜像(No mirror)"
else
read -p "输入保存路径(enter save path):" paths
for i in $(seq $size); do
name=$(docker image ls | sed 1d | awk '{print $1}' | head -$i | tail -1)
tag=$(docker image ls | sed 1d | awk '{print $2}' | head -$i | tail -1)
docker save -o $paths/$name.tar $name:$tag
done
echo "保存完成(Save complete)"
fi
#导入
#!/bin/bash
#
read -p "输入路径(enter path):" paths
for i in $(ls -al $paths | grep tar | awk '{print $9}'); do
docker load -i $paths/$i &> /dev/null
done
echo
echo ----------------------------------------------------------
docker image ls | sed 1d