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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:57:04