You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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自动删除:

  1. 进入vCenter UI,点击菜单 > 任务和事件 > 计划任务
  2. 点击新建 > 计划任务 > 删除虚拟机
  3. 在虚拟机选择环节,使用名称匹配规则筛选名称以Machine B_开头的VM
  4. 设置每日执行频率,结合vCenter警报功能添加日期判断逻辑:通过VM名称中的日期筛选出超过3天的VM后执行删除

3. 内容库模板克隆

将"Machine A"转为内容库模板,实现标准化克隆与自动命名:

  1. 创建内容库,将"Machine A"转为模板并上传至库中
  2. 创建计划任务,每日从内容库模板克隆新VM,命名规则设为Machine B_${date:yyyy-MM-dd}
  3. 配合上述计划任务删除旧VM,完成自动流转

内容的提问来源于stack exchange,提问作者Jose Fernando Gomez Davila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 18:44:58