Ansible如何用json_query从数组中过滤不含指定标签的displayName
错误原因
- 类型不匹配:你原查询中直接将进程组对象传入
contains()函数,该函数仅支持字符串/数组类型输入,因此触发received: "object"类型错误。 - 逻辑错误:你需要检查的是进程组
tags数组下的标签key字段是否包含指定字符串,而非直接检查进程组对象的根级键名。
修复后代码
- debug: msg: "{{ data_tags_prd.json | json_query(query) }}" vars: query: "[?!tags[?contains(key, 'Support Team')]].displayName"
逻辑说明
tags[?contains(key, 'Support Team')]:筛选当前进程组tags数组中,key字段包含Support Team的所有标签- 前缀
!:对上述筛选结果取反,匹配没有符合条件标签的进程组 - 末尾
.displayName:提取符合条件的进程组的displayName字段值,和你预期的输出结果一致。
依赖注意
如果执行仍报错,确认执行Ansible的节点已安装jmespath依赖:
- 系统包安装:
apt install python3-jmespath/yum install python3-jmespath - pip安装:
pip install jmespath
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

