Ansible解析JSON时报variable is not defined错误问题求助
问题根因
报错是Jinja2内置方法与JSON键名冲突导致的:
在Python/Jinja2语法中,所有字典对象都自带items()内置方法,用于遍历字典的键值对。当你使用点符号pool_details.json.items访问变量时,Jinja2会优先将items识别为字典的内置方法对象,而非API返回结果中名为items的自定义键。你尝试对方法对象用[0]做索引,自然就抛出「内置函数/方法对象没有0号元素」的错误。
解决方案
有两种通用的解决方式:
方案1:用方括号语法明确指定键名
直接用方括号包裹字符串键名访问,避开Jinja2的内置属性匹配优先级,修改第二个debug任务写法即可:
- debug: var: pool_details.json['items'][0].address
方案2:使用json_query过滤器
如果需要保持和jq类似的点符号查询语法,可以使用Ansible的json_query过滤器(需要提前在控制节点安装jmespath依赖:pip3 install jmespath):
- debug: var: pool_details | json_query('json.items[0].address')
验证
两种写法都可以正常提取到目标值 10.200.136.22,和你用jq查询的结果一致。
内容的提问来源于stack exchange,提问作者Travis
相关产品推荐
相关产品推荐

