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

Ansible对接多ESXi主机vCenter如何查找指定虚拟机所在的宿主机?

方案说明

首先明确两点:

  1. 无需提前知晓虚拟机所属的ESXi服务器,有两种实现路径,优先推荐对接vCenter的方案,可完全避免维护ESXi列表的成本
  2. 若当前环境无vCenter,可通过遍历ESXi列表+提前终止的逻辑实现需求,无需手动感知虚拟机位置

方案1:对接vCenter(优先推荐)

只要你的所有ESXi都纳管到同一vCenter下,不管后续新增多少台ESXi,都无需维护ESXi列表,直接调用community.vmware.vmware_guest_info模块即可直接查询到虚拟机所属ESXi:

- name: 查询虚拟机所属ESXi信息
  community.vmware.vmware_guest_info:
    hostname: "{{ vcenter_address }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: false
    name: "{{ target_vm_name }}"
  register: vm_info

- name: 输出虚拟机所属ESXi主机名
  debug:
    msg: "目标虚拟机所在ESXi为:{{ vm_info.instance.hw_esxi_host }}"

该方案优势是完全不需要感知ESXi集群的扩缩容,只要vCenter纳管了所有主机就能自动覆盖所有虚拟机。

方案2:无vCenter时遍历ESXi列表实现

如果没有vCenter,可按照你提到的遍历逻辑实现,Ansible原生支持动态修改参数、匹配到结果后终止遍历,具体实现代码如下:

- name: 初始化查询状态标记
  set_fact:
    vm_found: false
    target_esxi: ""

- name: 遍历ESXi列表查询目标虚拟机
  community.vmware.vmware_guest_find:
    hostname: "{{ item }}"
    username: "{{ esxi_username }}"
    password: "{{ esxi_password }}"
    validate_certs: false
    name: "{{ target_vm_name }}"
  register: find_result
  loop: "{{ esxi_host_list }}"
  failed_when: false
  when: not vm_found
  loop_control:
    label: "正在查询ESXi主机:{{ item }}"

- name: 匹配到虚拟机后更新状态标记
  set_fact:
    vm_found: true
    target_esxi: "{{ item.item }}"
  loop: "{{ find_result.results }}"
  when: item.found | default([]) | length > 0

- name: 输出查询结果
  debug:
    msg: "目标虚拟机所在ESXi为:{{ target_esxi }}"
  when: vm_found

- name: 未查询到虚拟机时报错
  fail:
    msg: "所有ESXi主机中未找到目标虚拟机{{ target_vm_name }}"
  when: not vm_found

核心逻辑说明

  • 通过vm_found标记控制遍历执行:一旦匹配到虚拟机,后续的ESXi遍历任务会因为when: not vm_found条件不满足自动跳过,等价于提前终止遍历
  • hostname参数直接取循环变量item即可实现动态修改为当前遍历的ESXi地址
  • failed_when: false避免单台ESXi未查询到虚拟机时直接中断整个playbook执行
  • 所有ESXi的账号建议统一运维,若存在不同账号可将esxi_host_list定义为字典列表,同时存储主机地址、账号、密码信息即可

内容的提问来源于stack exchange,提问作者João Olavo Vasconcelos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:57:00