vCenter 7.x VM自动克隆重名问题的脚本实现及替代方案咨询
解决vCenter每日克隆冲突的方案
一、脚本解决方案(基于Photon OS)
vCenter的Photon OS可借助VMware官方CLI工具govc实现需求,以下是完整落地步骤:
1. 安装依赖工具
在vCenter的Photon OS SSH会话中执行:
# 安装jq(用于解析JSON格式的VM信息) tdnf install -y jq # 从VMware官方govmomi项目获取对应架构的govc二进制包,上传至/usr/local/bin后添加执行权限 chmod +x /usr/local/bin/govc
2. 配置vCenter连接信息
在SSH会话中设置连接参数(也可写入脚本开头):
export GOVC_URL='https://你的vCenter地址/sdk' export GOVC_USERNAME='管理员账号' export GOVC_PASSWORD='管理员密码' export GOVC_INSECURE=true # 测试环境可忽略证书验证,生产环境建议配置合法证书
3. 自动化清理脚本
创建cleanup_cloned_vms.sh脚本,内容如下:
#!/bin/bash # 目标VM名称前缀 TARGET_VM_PREFIX="Machine B" # 保留VM的最大天数 RETENTION_DAYS=3 # 获取当前时间戳(秒级) CURRENT_TIMESTAMP=$(date +%s) # 遍历所有名称包含目标前缀的VM govc vm.ls -json | jq -r '.[] | select(.Name | startswith("'"$TARGET_VM_PREFIX"'")) | "\(.Name) \(.Config.CreateDate)"' | while read -r VM_NAME CREATE_DATE; do # 处理无日期后缀的原始"Machine B" if [ "$VM_NAME" = "$TARGET_VM_PREFIX" ]; then # 将创建日期转为YYYY-MM-DD格式 FORMATTED_DATE=$(date -d "$CREATE_DATE" +%Y-%m-%d) NEW_NAME="${TARGET_VM_PREFIX}_${FORMATTED_DATE}" echo "重命名VM: $VM_NAME -> $NEW_NAME" govc vm.rename "$VM_NAME" "$NEW_NAME" # 更新变量为新名称,统一后续删除逻辑 VM_NAME="$NEW_NAME" fi # 从VM名称中提取日期部分 if [[ "$VM_NAME" =~ ${TARGET_VM_PREFIX}_([0-9]{4}-[0-9]{2}-[0-9]{2}) ]]; then VM_DATE="${BASH_REMATCH[1]}" # 将VM日期转为时间戳 VM_TIMESTAMP=$(date -d "$VM_DATE" +%s) # 计算与当前日期的天数差 DIFF_DAYS=$(( (CURRENT_TIMESTAMP - VM_TIMESTAMP) / 86400 )) # 超过保留天数则删除VM if [ "$DIFF_DAYS" -gt "$RETENTION_DAYS" ]; then echo "删除过期VM: $VM_NAME (已创建$DIFF_DAYS天)" govc vm.destroy "$VM_NAME" else echo "保留VM: $VM_NAME (已创建$DIFF_DAYS天)" fi fi done
4. 设置定时任务
通过crontab让脚本在每日克隆任务前自动执行:
# 编辑定时任务列表 crontab -e # 添加一行(示例:每日凌晨2点执行,比克隆任务提前1小时) 0 2 * * * /bin/bash /path/to/cleanup_cloned_vms.sh >> /var/log/cleanup_vms.log 2>&1
二、UI端替代方案
若不想使用脚本,可通过vCenter原生UI功能实现需求:
1. 自定义克隆命名规则
修改每日克隆任务的命名设置,避免重名:
- 编辑克隆任务,在虚拟机名称字段使用动态格式,例如
Machine B_${date:yyyy-MM-dd} - 每次克隆会自动生成带当日日期的唯一VM名称,无重名冲突
2. 计划任务自动清理旧VM
通过vCenter计划任务实现过期VM自动删除:
- 进入vCenter UI,点击菜单 > 任务和事件 > 计划任务
- 点击新建 > 计划任务 > 删除虚拟机
- 在虚拟机选择环节,使用名称匹配规则筛选名称以
Machine B_开头的VM - 设置每日执行频率,结合vCenter警报功能添加日期判断逻辑:通过VM名称中的日期筛选出超过3天的VM后执行删除
3. 内容库模板克隆
将"Machine A"转为内容库模板,实现标准化克隆与自动命名:
- 创建内容库,将"Machine A"转为模板并上传至库中
- 创建计划任务,每日从内容库模板克隆新VM,命名规则设为
Machine B_${date:yyyy-MM-dd} - 配合上述计划任务删除旧VM,完成自动流转
内容的提问来源于stack exchange,提问作者Jose Fernando Gomez Davila
相关产品推荐
相关产品推荐

