做下面操作之前需要安装上 git,因为下面虚拟机管理脚本使用的是 bash。
1、将 VMWare 的安装目录添加到 PATH
环境变量,我这里的安装目录如下:
所以在 PATH
环境变量中添加该目录如下:
2、添加虚拟机管理脚本,我这里将脚本命名为 auto_vm
,将其保存在 C:/scripts/
中:
然后赋予它执行权限:
脚本内容如下:
#!/bin/bash
#
#########################################################################
# File Name: auto_vm.sh
# Author: 张种恩
# mail: 632404164@qq.com
# Created Time: 2020-03-30 13:21:19
# Description: VMware 虚拟机管理
#########################################################################
OLD_IFS=$IFS
IFS=$'\n\n'
if [ $# -gt 3 -o $# -eq 0 ];then
echo "支持操作如下:
clone <host>:从模板机链接克隆一台主机;
start <host>:启动指定虚拟机;
set_ip <host> <ip_suffix>:设置初始克隆主机的 IP 和主机名;
stop <host>:关闭指定虚拟机;
stop_all:停止所有当前正在运行的主机;
start_select:启动所有在 auto_vm.conf.d 目录下已配置的主机;
stop_select:停止所有在 auto_vm.conf.d 目录下已配置的主机;
revert_all:恢复所有在 auto_vm.conf.d 目录下的主机到初始状态;
shot <host> <shot_name>:给指定的主机打快照;
shot_revert <host> <shot_name>:恢复到指定快照;
shot_del <host> <shot_name>:删除指定主机的指定快照;
shot_list <host>:查看指定主机的快照列表;
auto_create:根据 auto_create.conf 配置文件自动创建主机并设置 IP、主机名、打快照;"
exit 1
fi
# 第一个参数为要执行的函数名
# 第二个参数为要操作的主机
# 第三个参数为扩展参数,在如下场景使用:
# 1. 给指定主机打快照时作为快照的名称;
# 2. 指定恢复的快照名称;
# 3. 指定删除的快照名称;
# 4. 给指定主机设置 IP 时作为主机的 IP 后缀,如传入 12;
func_cmd=$1
hostname=$2
ext=$3
# 虚拟机文件存放目录
vm_dir_path='/c/Users/Administrator/Documents/Virtual Machines'
# 模板机路径
vm_template_path="${vm_dir_path}/centos7_template_100/centos7_template_100.vmx"
# 被控虚拟机配置文件目录,此配置文件仅用来配置需要自动克隆并配置的虚拟机,格式如下:
# web01 7
# web02 8
# 第一列为主机名,第二列为 IP 后缀
vm_autoconf_path="/c/vm"
# 当前操作的虚拟机路径
curr_vm_path="${vm_dir_path}/${hostname}/${hostname}.vmx"
# 模板机初始 IP
vm_template_ip='10.0.1.100'
# 连接模板机的密码
passwd='root1234'
# 带时间输出信息
date_msg(){
echo "[$(date +%H:%M:%S)] $1"
}
# 批量配置文件中的虚拟机
op_select(){
for line in $(cat ${vm_autoconf_path}/*.conf);do
IFS=' ' arr=($line)
hostname=${arr[0]}
curr_vm_path="${vm_dir_path}/${hostname}/${hostname}.vmx"
$1
done
}
# 启动 auto_create.conf 已配置的所有虚拟机
start_select(){
op_select start
}
# 关闭 auto_create.conf 已配置的所有虚拟机
stop_select(){
op_select stop
}
# 还原配置文件中的所有虚拟机到初始状态
revert_select(){
ext='CLEAN'
op_select shot_revert
}
# 关闭当前运行的所有虚拟机
stop_all(){
for run_vm in $(run_list | awk 'NR>1');do
vm_name="$(basename ${run_vm})"
hostname="${vm_name%.vmx*}"
curr_vm_path=${run_vm}
stop
done
}
# 查看正在运行的虚拟机列表
run_list(){
vmrun list
}
# 关闭指定的虚拟机
stop(){
date_msg "正在关闭:${hostname}"
vmrun stop "${curr_vm_path}" soft
}
# 给指定虚拟机打快照
shot(){
date_msg "正在给 ${hostname} 打快照"
vmrun -T ws snapshot "${curr_vm_path}" $ext
}
# 启动指定虚拟机
start(){
date_msg "正在启动:${hostname}"
vmrun -T ws start "${curr_vm_path}"
}
# 设置模板机的主机名和 IP
set_ip(){
date_msg "正在设置 ${hostname} 的 IP 和主机名"
# 此种方式需要在虚拟机中准备一个 modify_ip_hostname.sh 脚本文件,该脚本的功能是修改 IP 和主机名,并且需要在虚拟机安装上 VMWare Tools
vmrun -T ws -gu root -gp ${passwd} runProgramInGuest "${curr_vm_path}" '//scripts/modify_ip_hostname.sh' "\'${hostname}\'" "\'${ext}\'"
}
# 查看指定主机的快照列表
shot_list(){
date_msg "${hostname} 的快照列表如下:"
vmrun listSnapshots "${curr_vm_path}"
}
# 恢复到指定快照
shot_revert(){
date_msg "正在恢复:${hostname}"
vmrun -T ws revertToSnapshot "${curr_vm_path}" $ext
}
# 删除指定快照
shot_del(){
date_msg "正在删除 ${hostname} 的 ${ext} 快照"
vmrun -T ws deleteSnapshot "${curr_vm_path}" $ext
}
# 克隆主机
clone(){
date_msg "正在克隆:${hostname}"
vmrun -T ws clone "${vm_template_path}" "${curr_vm_path}" linked -cloneName=${hostname}
}
# 自动创建虚拟机
auto_create(){
for line in $(cat ${vm_autoconf_path}/*.conf);do
echo '---------------------------'
IFS=' ' arr=($line)
hostname=${arr[0]}
ip_suffix=${arr[1]}
curr_vm_path="${vm_dir_path}/${hostname}/${hostname}.vmx"
if [ -e "${curr_vm_path}" ];then
echo "${hostname} 已存在"
continue
else
clone
start
ext=$ip_suffix && set_ip
while [ $? -ne 0 ];do
sleep 1
echo '失败重试...' && set_ip
done
stop && sleep 2
ext='CLEAN' && shot
fi
done
}
# 执行函数
$func_cmd
IFS=$OLD_IFS
3、为方便的可以在任意位置使用该脚本,将 C:/scripts
目录也添加到 PATH
环境变量:
4、创建模板机,对应上面脚本的模板机名称为 centos7_template_100
,如下:
其文件在虚拟机存放目录下如下:
5、将模板机的 IP 设置为 10.0.1.100
,ROOT 用户密码为 root1234
,当然你也可以修改上面脚本中使用你自己喜欢的模板机 IP 和 ROOT 密码。
6、在虚拟机中安装上 VMWare Tools。安装 VMWare Tools 的方法很简单,选中 VMWare 【虚拟机】菜单,然后点击【安装VMware Tools】:
接下来挂载 CD 设备:
将安装压缩包复制出来解压然后安装:
按照提示输入 yes
或 no
即可安装成功。
7、创建一个目录存放需自动管理的虚拟机配置文件,我这里就创建在 C:/vm
目录下,添加一个后缀为 .conf
的文件:
其内容如下:
该配置将会创建主机名分别为 test01
和 test02
的虚拟机,它们对应的 IP 后缀分别为 101
、102
。
IP 和主机名的修改还需要依赖于一个脚本,我将该脚本存放在模板机的 /scripts
目录下,命名为 modify_ip_hostname.sh
,其内容如下:
$ cat /scripts/modify_ip_hostname.sh
#!/bin/bash
hostname=$1
ip_suffix=$2
hostnamectl set-hostname ${hostname}
sed -i "/^IPADDR/c IPADDR=10.0.1.${ip_suffix}" /etc/sysconfig/network-scripts/ifcfg-eth0
systemctl restart network
sync
所以上面的配置配合该脚本执行后最终设定 test01
和 test02
主机的 IP 分别为 10.0.1.101
和 10.0.1.102
。
8、测试一下,自动创建虚拟机执行 auto_create
子命令即可(更多子命令可参考脚本开头注释),如下:
查看 VMware 会发现对应创建了这两个虚拟机:
大功告成~~~
评论区