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

Ansible使用json_query过滤器无法匹配id_old获取对应id_new的问题

问题原因

你的写法存在两个核心错误:

  1. 筛选对象类型不匹配:对old_new_nodes调用first过滤器后得到的是单个字典对象,而你写的[?id_old==xxx]是JMESPath的数组筛选语法,只能作用于数组类型变量,自然无法返回结果。
  2. 变量未正确注入:json_query的查询字符串默认不会自动解析Ansible变量,直接写original_node.id会被JMESPath识别为常量字符串,而不是你提前定义的变量值2263,匹配条件永远不成立。

修复方案

直接对old_new_nodes数组做查询,正确注入变量值即可,示例如下:

- name: Get id of the new node
  set_fact:
    new_node_id: "{{ old_new_nodes | json_query('[?id_old==`' ~ original_node.id ~ '`].id_new') | first }}"

语法说明

  • 去掉first过滤器,直接把完整的old_new_nodes数组传给json_query做全量匹配
  • 用Ansible字符串拼接符~将original_node.id的实际值注入到查询语句中,数值类型的匹配值需要用反引号`包裹,符合JMESPath语法规范。如果你的id_old是字符串类型,将反引号替换为单引号即可
  • 最后追加的first过滤器用于提取json_query返回结果数组中的第一个匹配值,最终得到单个id值而非数组

执行上述任务后,new_node_id会得到你预期的2430。

内容的提问来源于stack exchange,提问作者Hector Esteban

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:36:04