批量部署KVM

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值