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

如何使用Ansible获取VMware虚拟机的UUID

用Ansible获取VMware虚拟机UUID的方法

嘿,这个需求我之前帮同事处理过,用Ansible的官方VMware模块就能完美解决,下面给你分场景拆解具体步骤:

前提准备

首先得确保你的Ansible控制节点满足以下要求:

  • 安装了 pyvmomi Python库(执行pip install pyvmomi即可安装)
  • 已经安装Ansible的VMware集合:ansible-galaxy collection install community.vmware
  • 拥有vCenter/ESXi的只读及以上权限,能正常读取虚拟机信息

场景1:刚部署完虚拟机后直接获取UUID

如果你是用Ansible的vmware_guest模块部署的虚拟机,那这个模块本身就会返回虚拟机的UUID信息,完全不用额外查询——直接注册变量就能拿到!

示例Playbook如下:

- name: 部署VMware虚拟机并获取UUID
  hosts: localhost
  gather_facts: no
  collections:
    - community.vmware
  vars:
    vcenter_hostname: "your-vcenter.example.com"
    vcenter_username: "administrator@vsphere.local"
    vcenter_password: "your-secure-password"
    vm_name: "new-deployed-test-vm"
    datacenter_name: "DC01"
    cluster_name: "Production-Cluster"
    datastore_name: "SSD-Datastore"
    template_name: "Ubuntu-22.04-Template"

  tasks:
    - name: 部署虚拟机并返回信息
      vmware_guest:
        hostname: "{{ vcenter_hostname }}"
        username: "{{ vcenter_username }}"
        password: "{{ vcenter_password }}"
        validate_certs: no  # 生产环境建议开启证书验证,这里为了测试简化
        name: "{{ vm_name }}"
        template: "{{ template_name }}"
        datacenter: "{{ datacenter_name }}"
        cluster: "{{ cluster_name }}"
        datastore: "{{ datastore_name }}"
        state: poweredon
      register: deployed_vm_result

    - name: 输出新虚拟机的UUID
      debug:
        msg: "刚部署的虚拟机UUID是: {{ deployed_vm_result.instance.hw_product_uuid }}"

这里的hw_product_uuid就是我们要找的UUID,拿到之后你可以直接用它来配置Inventory或者后续的Ansible连接操作。


场景2:查询已存在的虚拟机UUID

如果虚拟机已经部署完成,只是需要查询它的UUID,可以用vmware_guest_info模块精准获取,示例Playbook:

- name: 查询指定VMware虚拟机的UUID
  hosts: localhost
  gather_facts: no
  collections:
    - community.vmware
  vars:
    vcenter_hostname: "your-vcenter.example.com"
    vcenter_username: "administrator@vsphere.local"
    vcenter_password: "your-secure-password"
    target_vm_name: "existing-production-vm"
    datacenter_name: "DC01"

  tasks:
    - name: 获取目标虚拟机的详细信息
      vmware_guest_info:
        hostname: "{{ vcenter_hostname }}"
        username: "{{ vcenter_username }}"
        password: "{{ vcenter_password }}"
        validate_certs: no
        name: "{{ target_vm_name }}"
        datacenter: "{{ datacenter_name }}"
      register: target_vm_info

    - name: 输出目标虚拟机的UUID
      debug:
        msg: "虚拟机{{ target_vm_name }}的UUID是: {{ target_vm_info.instance.hw_product_uuid }}"

如果需要批量查询所有虚拟机的UUID,可以用vmware_vm_info模块:

- name: 批量查询所有虚拟机的UUID
  hosts: localhost
  gather_facts: no
  collections:
    - community.vmware
  vars:
    vcenter_hostname: "your-vcenter.example.com"
    vcenter_username: "administrator@vsphere.local"
    vcenter_password: "your-secure-password"
    datacenter_name: "DC01"

  tasks:
    - name: 获取数据中心内所有虚拟机信息
      vmware_vm_info:
        hostname: "{{ vcenter_hostname }}"
        username: "{{ vcenter_username }}"
        password: "{{ vcenter_password }}"
        validate_certs: no
        datacenter: "{{ datacenter_name }}"
      register: all_vms_list

    - name: 逐个输出虚拟机名称和UUID
      debug:
        msg: "虚拟机名称: {{ item.guest_name }} | UUID: {{ item.hw_product_uuid }}"
      loop: "{{ all_vms_list.virtual_machines }}"

用UUID连接虚拟机的小技巧

拿到UUID后,你可以在Ansible Inventory里用它来标识主机(避免重名虚拟机的混淆),比如:

[vmware_production_vms]
web_server_01 ansible_host=192.168.1.20 ansible_vmware_uuid="564d7a0a-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
db_server_01 ansible_host=192.168.1.21 ansible_vmware_uuid="564d7a0b-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

后续执行Ansible任务时,也可以直接用UUID指定虚拟机,比用名称更可靠哦!

内容的提问来源于stack exchange,提问作者Gowtham Nakulan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:15:25