如何使用Ansible获取VMware虚拟机的UUID
用Ansible获取VMware虚拟机UUID的方法
嘿,这个需求我之前帮同事处理过,用Ansible的官方VMware模块就能完美解决,下面给你分场景拆解具体步骤:
前提准备
首先得确保你的Ansible控制节点满足以下要求:
- 安装了
pyvmomiPython库(执行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
相关产品推荐
相关产品推荐

