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

如何统计Ansible vmware_cluster_info返回JSON中集群的主机数量

解决方法

你可以用以下两种无报错的方案实现统计,适配动态集群名的场景:

方案1:使用Jinja2原生过滤器(无额外依赖)

不需要安装任何额外组件,直接用Ansible自带的过滤器处理嵌套字典结构:

# 统计所有集群的总主机数量
- debug:
    msg: "集群总主机数:{{ cluster_info.clusters | dict2items | map(attribute='value.hosts') | flatten | length }}"

# 如果需要逐个输出每个动态集群的主机数,用循环实现
- debug:
    msg: "集群{{ item.key }}主机数为:{{ item.value.hosts | length }}"
  loop: "{{ cluster_info.clusters | dict2items }}"

方案2:使用json_query过滤器(适配复杂查询场景)

需要先在Ansible控制节点安装jmespath依赖(执行pip install jmespath),再用jmespath语法查询:

- debug:
    msg: "集群总主机数:{{ cluster_info | json_query('clusters.*.hosts[]') | length }}"
报错原因说明

你之前的两种写法报错的核心原因:

  • cluster_info.clusters.[].hosts.name 写法不符合Jinja2语法规范,[]不是合法的字典取值通配符
  • cluster_info.clusters.*.hosts.name 里的*通配符只有jmespath语法支持,不能直接在普通Jinja2变量取值中使用
学习建议

针对JSON解析类的需求,可以按以下路径学习降低难度:

  • 先掌握Jinja2常用过滤器:优先练dict2items、map、flatten、selectattr这几个处理嵌套结构高频使用的过滤器,对着Ansible官方文档的内置过滤器示例多写几次调试,很快就能上手。
  • 有复杂查询需求再学json_query对应的jmespath基础语法,只需要掌握通配、属性选择、简单过滤三个核心逻辑就能覆盖90%的运维场景,不用学太深入的高阶语法。
  • 调试长表达式的时候拆成多步debug打印中间结果,比如先打印cluster_info.clusters | dict2items的输出,确认结构符合预期后再逐步追加后面的过滤器,出错更容易定位。

内容的提问来源于stack exchange,提问作者Julia L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:45:05