有没有办法使用 Ansible 获取 vSphere 清单树?

Is there a way to get the vSphere Inventory Tree using Ansible?

我已经阅读了很多关于 VMWare 模块和插件的 Ansible 文档,但我仍然找不到一种方法来做我认为应该相对简单的事情。我正在寻找一个 vCenter 并提取清单树,所以我知道 vCenter 中的所有数据中心,每个数据中心中有哪些集群以及每个集群中有哪些虚拟机,但我似乎找不到办法这个。

我希望收集和整理有关 vCenter 上每个 VM 的信息,我几乎可以使用动态清单插件 community.vmware.vmware_vm_inventory 来做到这一点。但是,none 它收集的关于每个 VM 的数据似乎包括每个 VM 所在的数据中心和集群。

一些 VMWare 模块要求您指定 VM 所在的数据中心或集群,因此如果没有这些信息,就无法完全管理 vCenter。仍然需要外部信息源才能将整个 vCenter 转换为所需状态。

我错过了什么吗?有没有什么方法可以使用 Ansible 中的 VMWare 模块和插件来获取 vSphere Web 客户端提供的清单树结构?

使用 vmware_vm_info 模块怎么样?
vmware_vm_info可以得到每个vm的所属信息。

---
- name: Example Playbook
  hosts: localhost
  gather_facts: false
  tasks:
    - name: Gather all vm info
      vmware_vm_info:
        hostname: "{{ vcenter_hostname }}"
        username: "{{ vcenter_username }}"
        password: "{{ vcenter_password }}"
        validate_certs: false
      register: gather_all_vm_info_result

    - debug:
        msg:
          - "VM Name{% raw %}:{% endraw %} {{ item.guest_name }}"
          - "Datacenter Name{% raw %}:{% endraw %} {{ item.datacenter }}"
          - "Cluster Name{% raw %}:{% endraw %}: {{ item.cluster }}"
          - "ESXi Name{% raw %}:{% endraw %} {{ item.esxi_hostname }}"
          - "Folder Name{% raw %}:{% endraw %} {{ item.folder }}"
      loop: "{{ gather_all_vm_info_result.virtual_machines }}"

输出示例

    "msg": [
        "VM Name: test_vm1",
        "Datacenter Name: DC",
        "Cluster Name:: Cluster",
        "ESXi Name: esxi-host.example.com",
        "Folder Name: /DC/vm"
    ]