Я думаю, что добрался до конца.
Задача такова:
- name: Populate genders
set_fact:
genders: "{{ genders|default({}) | combine( {item.item.name: item.stdout} ) }}"
with_items: "{{ people.results }}"
Она пробивает каждый из dicts (item
) в поле people.results
, каждый раз создавая новый dict, такой как {Bob: "male"}
и combine()
s, что новый dict в массиве genders
, который заканчивается следующим образом:
{
"Bob": "male",
"Thelma": "female"
}
Он принимает ключи ( name
в этом случае) будет уникальным.
Затем я понял, что мне действительно нужен список словарей, так как кажется намного проще прокручивать с помощью with_items
:
- name: Populate genders
set_fact:
genders: "{{ genders|default([]) + [ {'name': item.item.name, 'gender': item.stdout} ] }}"
with_items: "{{ people.results }}"
Это позволяет комбинировать существующий список со списком, содержащим один dict. Мы получим массив genders
следующим образом:
[
{'name': 'Bob', 'gender': 'male'},
{'name': 'Thelma', 'gender': 'female'}
]