我有示例列表,我希望选择其类型在wanted_list中的项目。
- name: Get item based on anther list
vars:
samples:
- { item: 10, type: sample-1 },
- { item: 20, type: sample-11 },
- { item: 30, type: sample-2 }
wanted_list: [ sample-11, sample-2 ]
query: "[?contains('{{wanted_list|to_json}}', type)]"
debug:
var: samples | json_query(query)结果:
TASK: Get item based on anther list
ok: [localhost] => {
"samples|json_query(query)": [
{
"item": 10,
"type": "sample-1"
},
{
"item": 20,
"type": "sample-11"
},
{
"item": 30,
"type": "sample-2"
}
]
}我所期望的是它只会返回第20和第30项。但是它实际上返回了所有的3,它看起来像样本-1匹配列表项目样本的一部分-11。
但是基于JMESPath doc 包含
布尔包含(数组字符串$subject,任意$search) 如果$subject是数组,则如果数组中的元素之一等于提供的$search值,则此函数返回true。
因此,样本-1不等于样本-11,然后它不应该被选择。
发布于 2020-05-09 04:01:54
您将希望这样使用引用文字JSON的反勾符,因为单引号只适用于字符串
- name: Get item based on anther list
vars:
samples:
- { item: 10, type: sample-1 }
- { item: 20, type: sample-11 }
- { item: 30, type: sample-2 }
wanted_list: [ sample-11, sample-2 ]
query: "[?contains(`{{ wanted_list | to_json }}`, type)]"
debug:
msg: '{{ samples | json_query(query) }}'https://stackoverflow.com/questions/61690744
复制相似问题