#!/bin/bash
#本脚本针对 RHEL7.2 或 Centos7.2
#本脚本需要提前准备一个 qcow2 格式的虚拟机模板,名称为/var/lib/libvirt/images/.rh7_template 的虚拟机模板
#该脚本使用 qemu-img 命令快速创建快照虚拟机
#脚本使用 sed 修改模板虚拟机的配置文件,将虚拟机名称、UUID、磁盘文件名、MAC 地址

IMG_DIR=/var/lib/libvirt/images
BASEVM=rh7_template
read -p "Enter VM number: " VMNUM
if [ $VMNUM -le 9 ];then
     VMNUM=0$VMNUM #拼接
fi

if [ -z "${VMNUM}" ]; then #为空
     echo "You must input a number."
     exit 65
elif [ ${VMNUM} = ~ [a-z] ]; then #有字母
     echo "You must input a number."
     exit 66
elif [ ${VMNUM} -lt 1 -o ${VMNUM} -gt 99 ]; then # -o  or
     echo "Input out of range"
     exit 67
fi

NEWVM=rh7_node${VMNUM}  # node3..
if [ -e $IMG_DIR/${NEWVM}.img ]; then
   echo "File exists." #镜像已存在
   exit 68
fi

echo -en "Creating Virtual Machine disk image......\t" #提示正在创建...
qemu-img create -f qcow2 -b $IMG_DIR/.${BASEVM}.img $IMG_DIR/${NEWVM}.img &> /dev/null #创建前端盘
echo -e "\e[32;1m[OK]\e[0m" #提示OK
#virsh dumpxml ${BASEVM} > /tmp/myvm.xml #导出xml文件 或者
cat /var/lib/libvirt/images/.rhel7.xml > /tmp/myvm.xml

sed -i "/<name>${BASEVM}/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml
sed -i "/uuid/s/<uuid>.*<\/uuid>/<uuid>$(uuidgen)<\/uuid>/" /tmp/myvm.xml
sed -i "/${BASEVM}\.img/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml
#修改 MAC 地址,本例使用的是常量,每位使用该脚本的用户需要根据实际情况修改这些值
#最好这里可以使用便利,这样更适合于批量操作,可以克隆更多虚拟机sed -i "/mac /s/a1/0c/" /tmp/myvm.xml

echo -en "Defining new virtual machine......\t\t" #提示正在创建虚拟机
virsh define /tmp/myvm.xml &> /dev/null   #创建虚拟机
echo -e "\e[32;1m[OK]\e[0m"   #提示OK

最新文章

  1. 07. Web大前端时代之:HTML5+CSS3入门系列~H5 地理位置
  2. linux 安装jdk
  3. python设计模式
  4. UE4 通过HTTP 接受JPG并动态 构建 UTexture2D 简单例子
  5. android target unknown and state offline解决办法
  6. IT人学习方法论(二):学习误区
  7. redisb并发访问慢出现的问题
  8. Android设计模式—策略模式
  9. java数据结构系列——排列(2):有序阵列
  10. Java多维数组各轴长度可以不对齐
  11. Django-2- 模板路径查找,模板变量,模板过滤器,静态文件引用
  12. Spfa求最短路径
  13. C# 填充Excel
  14. Educational Codeforces Round 49 (Rated for Div. 2)A到C题
  15. bzoj 3993 星际战争 - 二分答案 - 最大流
  16. Go之go与channel组合使用
  17. 20155314 2016-2017-2 《Java程序设计》实验四 Android程序设计
  18. TP里where的查询方式,比如or应该怎么写?
  19. 如何使用android design support library
  20. selenium 之定位方法

热门文章

  1. Scratch 3.0,新在哪里?
  2. WINDOWS记事本的换行\r\n
  3. 待续:s5p6818移植 uboot 2014.07 移植
  4. jq获取元素偏移量offset()
  5. 面试经典算法:优先队列,最大堆,堆排序,左偏树Golang实现
  6. 三、eureka服务端获取服务列表
  7. SVN 问题解决之 Working copy path does not exist in repository
  8. C++ DLL debug版本在其他PC上缺少依赖的处理方式
  9. FlowPortal BPM流程中调用封装好的API如何调试
  10. C++ 容器一图以蔽之