Ansible查询VMware指定集群ESX主机列表报错及解决方案咨询
报错原因
你遇到的报错是Ansible 2.9版本vmware_host_facts模块的固有设计导致的:
- 该模块的定位是查询单台ESXi主机的详细信息,对接vCenter使用时必须传入
esxi_hostname参数指定目标主机,2.9版本的官方文档漏标了该参数在对接vCenter场景下的必填要求,高版本文档已补充该说明。 - 你使用的pyvmomi 7.0与Ansible 2.9的兼容性正常,报错和环境依赖无关。
替代实现方法
有两种成熟方案可以直接获取指定集群下的ESX主机列表,无需指定单台主机名:
方案1:复用已可用的vmware_cluster_info模块
该模块返回的集群信息中自带关联主机列表,示例用法:
- name: 获取指定集群的配置信息 vmware_cluster_info: hostname: "{{ vcenter_server }}" username: "{{ vcenter_user }}" password: "{{ vcenter_pass }}" validate_certs: false datacenter: "{{ 目标数据中心变量 }}" cluster_name: "{{ 目标ESX集群变量 }}" register: cluster_result
你需要的可用主机列表存储在cluster_result.clusters[你的集群名称].hosts字段中,可直接过滤维护模式、离线状态的主机。
方案2:使用vmware_host_info模块批量查询
Ansible 2.9版本已内置vmware_host_info模块,支持按集群批量拉取所有主机的完整信息,示例用法:
- name: 批量获取指定集群下所有ESXi主机信息 vmware_host_info: hostname: "{{ vcenter_server }}" username: "{{ vcenter_user }}" password: "{{ vcenter_pass }}" validate_certs: false datacenter: "{{ 目标数据中心变量 }}" cluster: "{{ 目标ESX集群变量 }}" register: host_list_result
返回的host_list_result.hosts为结构化的主机信息集合,包含主机状态、硬件配置、网络配置等全量数据。
注:2.9版本调用该模块时如果出现标签相关异常,可添加show_tag: no参数规避。
内容的提问来源于stack exchange,提问作者agit05
相关产品推荐
相关产品推荐

