如何解决在Ansible json_query中使用项目
我正在尝试遍历键列表以从json中获取关联名称:
- name: show names
debug:
msg: "{{ data.json | json_query(query) }}"
vars:
query: "[? key==item].name"
with_items: "{{ keys.split() }}"
但是当我尝试运行它时,它永远无法正确显示。密钥正确,但是没有返回数据:
TASK [get_help_on_SO: show]
ok: [localhost] => (item=Key1) => {
"msg": []
}
ok: [localhost] => (item=Key2) => {
"msg": []
}
手动输入代码效果很好,所以我的查询语法似乎是正确的:
query: "[? key==`Key1`].name"
TASK [get_help_on_SO : show]
ok: [localhost] => (item=Key1) => {
"msg": [
"FooBar 1"
]
}
ok: [localhost] => (item=Key2) => {
"msg": [
"FooBar 1"
]
}
如何正确地将item
传递到json_query
中?
解决方法
您没有用任何Jinja分隔符将item
变量括起来,因此不会对其进行解释。
您将结束测试key
是否等于字符串'item'
,而不是等于存储在变量item
中的字符串。
- name: show names
debug:
msg: "{{ data.json | json_query(query) }}"
vars:
query: "[?key==`{{ item }}`].name"
with_items: "{{ keys.split() }}"
,
提供数据
keys: 'key1 key3'
data:
json: [{
"key": "key1","name": "name1"
},{
"key": "key2","name": "name2"
},{
"key": "key3","name": "name3"
}
]
预期结果是
- name1
- name3
可以避免同时出现 loop 和 json_query 并简化解决方案。下面的任务
- name: show names
debug:
msg: "{{ data.json|
selectattr('key','in',my_keys)|
map(attribute='name')|
list }}"
vars:
my_keys: "{{ keys.split() }}"
给予
msg:
- name1
- name3