Ansible如何筛选JSON指定层级下含virtualAddresses字段的上层键
调整方案
你需要修改json_query的JMESPath查询逻辑,增加两步操作:先将ACS层级的对象转为键值对数组,再过滤出值对象中包含virtualAddresses字段的项,最后提取对应的键名即可。
首先确认你已经安装了json_query的依赖包:
pip install jmespath
然后修改playbook中Parse json 1任务的查询参数,调整后的完整任务代码如下:
- name : Parse json 1 debug: var: atc_AS3_status.msg.declaration | json_query(query_result) vars: query_result: '"ACS-AS3".ACS | items() | [?value.virtualAddresses != null] | [*].key' register: atc_AS3_status1
表达式说明
items():将ACS层级的JSON对象转为[{"key": "键名", "value": "对应值"}]格式的数组[?value.virtualAddresses != null]:过滤数组中值对象包含virtualAddresses字段的元素[*].key:提取所有过滤后元素的键名,即需要的虚拟服务名称
调整后运行任务的输出结果就是你期望的["vs_ubuntu_22", "vs_ubuntu_443", "vs_ubuntu_80"]。
内容的提问来源于stack exchange,提问作者sundrys1
相关产品推荐
相关产品推荐

