如何使用jmespath在Ansible非数组结构中匹配key并返回对应值
正确实现方案
你当前查询失败的核心原因是 _meta.hostvars 是键值对结构而非数组,需要先通过*提取所有子对象组成数组后再执行过滤,完整的Playbook写法如下:
- hosts: ansibletower1.rh.pro tasks: - name: 匹配主机名提取对应name字段 set_fact: target_name: "{{ _meta | json_query(querystr) | first }}" vars: querystr: 'hostvars.*[?"guest.hostName" == ''{{ inventory_hostname }}''].name' - name: 验证结果 debug: var: target_name
语法说明
hostvars.*:提取hostvars下所有子对象,转换为数组供后续过滤[?"guest.hostName" == '{{ inventory_hostname }}']:过滤数组中guest.hostName和当前主机名相等的条目.name:提取匹配条目的name字段| first:过滤结果默认是数组,取第一个匹配到的元素(如果存在多匹配需求可自行调整取值逻辑)
内容的提问来源于stack exchange,提问作者sloweriang
相关产品推荐
相关产品推荐

