在 Ansible json_query 中使用项目

Eam*_*wes 2 json ansible jmespath

我正在尝试循环遍历键列表以从某些 json 中获取关联名称:

- name: show names
  debug:
    msg: "{{ data.json | json_query(query) }}"
  vars:
    query: "[? key==item].name"
  with_items: "{{ keys.split() }}"
Run Code Online (Sandbox Code Playgroud)

但当我尝试运行它时,它永远不会正确显示。密钥正确,但没有返回数据:

TASK [get_help_on_SO: show] 
ok: [localhost] => (item=Key1) => {
    "msg": []
}
ok: [localhost] => (item=Key2) => {
    "msg": []
}
Run Code Online (Sandbox Code Playgroud)

手动输入代码效果很好,所以我的查询语法似乎是正确的:

query: "[? key==`Key1`].name"

TASK [get_help_on_SO : show] 
ok: [localhost] => (item=Key1) => {
    "msg": [
        "FooBar 1"
]
}
ok: [localhost] => (item=Key2) => {
    "msg": [
        "FooBar 1"
    ]
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能正确地将 传递item到 中json_query

β.ε*_*.βε 5

您没有item用任何 Jinja 分隔符包围该变量,因此不会解释它。
您结束测试 是否key等于字符串'item'而不是存储在变量 中的字符串item

- name: show names
  debug:
    msg: "{{ data.json | json_query(query) }}"
  vars:
    query: "[?key==`{{ item }}`].name"
  with_items: "{{ keys.split() }}"
Run Code Online (Sandbox Code Playgroud)