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

Ansible中无法通过索引访问JSON查询返回的列表值问题

解决Ansible中json_query结果列表索引报错问题

问题场景

已开启gather_facts: True,通过{{ ansible_facts['mounts']|json_query('[?mount==/home].size_available') }}获取到/home分区的可用空间,返回结果为列表格式(如[34545646])。尝试用[0]索引取第一个值时,触发模板错误:

"msg": "template error while templating string: expected token 'end of print statement', got '['. String: > {{ansible_facts['mounts']|json_query('[?mount==/home].size_available')[0]}}"

报错原因

Ansible使用的Jinja2模板引擎会将|视为过滤器分隔符,原写法中|后的[0]会被误判为非法过滤器,导致解析失败,即便实际结果是可索引的列表。

解决方案

方案1:在json_query中直接返回单个值

修改json_query表达式,直接定位到第一个匹配项的size_available字段,返回单个数值而非列表:

{{ ansible_facts['mounts'] | json_query('[?mount==`/home`][0].size_available') }}

方案2:用括号包裹管道表达式

通过括号将整个管道运算结果包裹,让模板引擎先计算出列表,再执行索引操作:

{{ (ansible_facts['mounts'] | json_query('[?mount==`/home`].size_available'))[0] }}

方案3:先通过set_fact存储结果

将json_query的结果存入变量,后续引用变量时再取索引:

- name: 存储/home分区可用空间列表
  set_fact:
    home_available_list: "{{ ansible_facts['mounts'] | json_query('[?mount==`/home`].size_available') }}"

- name: 检查/home空间是否充足
  debug:
    msg: "/home可用空间不足"
  when: home_available_list[0] < 500000000  # 替换为你的静态阈值

验证说明

以上三种方案均可正常获取单个数值,支持后续与静态值进行比较,从而控制Playbook的执行逻辑。

内容的提问来源于stack exchange,提问作者Cat Hariss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:10:24