У меня есть список образцов, и я хочу выбрать элемент, тип которого находится в списке разыскиваемых.
- 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. Похоже, что часть элемента списка sample-11 соответствует выборке 1.
Но на основе JMESPath do c содержит :
boolean contains (array | string $ subject, any $ search)
Если $ subject является массивом, эта функция возвращает true, если один из элементов в массиве равен к предоставленному значению $ search.
Таким образом, sample-1 не равно sample-11, и его не следует выбирать.