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

如何获取vmware.vmware_rest.vcenter_vm模块placement参数值及解决报错?

解决Ansible vmware_rest.vcenter_vm克隆VM的placement参数及权限问题

一、placement参数的取值与获取方法

placement中的datastore、resource_pool、folder必须传入对应资源的MOID(Managed Object ID),而非资源名称,以下是各参数MOID的具体获取方式:

1. 获取datastore的MOID

使用vmware.vmware_rest.vcenter_datastore_info模块查询并提取:

- name: 获取目标存储信息
  vmware.vmware_rest.vcenter_datastore_info:
  register: datastore_info

- name: 按名称提取存储MOID
  set_fact:
    target_datastore_moid: "{{ item.datastore }}"
  loop: "{{ datastore_info.value }}"
  when: item.name == "你的目标存储名称"

2. 获取resource_pool的MOID

使用vmware.vmware_rest.vcenter_resource_pool_info模块直接过滤名称:

- name: 获取目标资源池信息
  vmware.vmware_rest.vcenter_resource_pool_info:
    filter_names: ["你的资源池名称"]
  register: resource_pool_info

- name: 设置资源池MOID变量
  set_fact:
    target_resource_pool_moid: "{{ resource_pool_info.value[0].resource_pool }}"

3. 获取folder的MOID

使用vmware.vmware_rest.vcenter_folder_info模块,需指定文件夹类型为VIRTUAL_MACHINE:

- name: 获取VM文件夹信息
  vmware.vmware_rest.vcenter_folder_info:
    filter_type: VIRTUAL_MACHINE
    filter_names: ["你的目标VM文件夹名称"]
  register: folder_info

- name: 设置文件夹MOID变量
  set_fact:
    target_folder_moid: "{{ folder_info.value[0].folder }}"

二、权限不足问题的解决

报错提到的VirtualMachine.Inventory.CreateFromExisting和Resource.AssignVMToPool是克隆VM的核心权限,需为Ansible使用的vCenter账号配置以下权限:

  • 在目标资源池上:添加Resource -> Assign virtual machine to resource pool权限
  • 在源VM所在的文件夹/集群上:添加Virtual Machine -> Inventory -> Create from existing权限
  • 额外补充权限:Datastore -> Allocate space(用于存储克隆文件)、Virtual Machine -> Configuration(用于VM参数配置)

可先给账号分配VMware管理员角色验证权限问题是否解决,之后再按需细化权限范围。

三、placement参数值为空的排查

若参数仍为空,检查以下几点:

  • 用debug模块打印查询模块的返回值(如{{ datastore_info.value }}),确认目标资源存在于返回列表中
  • 核对资源名称的大小写和拼写,确保完全匹配
  • 确认vCenter账号拥有读取这些资源的基础Read权限

完整示例Playbook片段

- name: 克隆VM
  hosts: localhost
  gather_facts: no
  tasks:
    - name: 获取源VM信息
      vmware.vmware_rest.vcenter_vm_info:
        filter_names: ["源VM名称"]
      register: source_vm_info

    - name: 获取目标存储MOID
      vmware.vmware_rest.vcenter_datastore_info:
        filter_names: ["目标存储名称"]
      register: datastore_info

    - name: 获取目标资源池MOID
      vmware.vmware_rest.vcenter_resource_pool_info:
        filter_names: ["目标资源池名称"]
      register: resource_pool_info

    - name: 获取目标VM文件夹MOID
      vmware.vmware_rest.vcenter_folder_info:
        filter_type: VIRTUAL_MACHINE
        filter_names: ["目标文件夹名称"]
      register: folder_info

    - name: 执行克隆操作
      vmware.vmware_rest.vcenter_vm:
        state: cloned
        source: "{{ source_vm_info.value[0].vm }}"
        name: "新VM名称"
        placement:
          datastore: "{{ datastore_info.value[0].datastore }}"
          resource_pool: "{{ resource_pool_info.value[0].resource_pool }}"
          folder: "{{ folder_info.value[0].folder }}"
        guest_OS: "CENTOS_7_64" # 替换为源VM对应的OS类型
      register: clone_result

内容的提问来源于stack exchange,提问作者Kavisha Abeynayaka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:42:34