У меня есть задача, которая использует with_subelements
но это ужасно медленно для большого списка (особенно потому, что у большинства элементов есть дубликаты, и мне не нужно запускать его несколько раз для них).
Поэтому я ищу способ как-то его оптимизировать. Я хочу получить все уникальные элементы из этого списка - скажем, settings
в примере ниже:
инвентарь:
my_list:
- { name: foo, settings: ['x', 'y', 'z'] }
- { name: bar, settings: ['x', 'y', 'q', 'w'] }
задачи:
- name: get all settings
set_fact:
all_settings="{{ my_list|map(attribute='settings')|list }}"
- name: show results
debug:
var=all_settings
полученные результаты:
"var": {
"all_settings": [
[
"x",
"y",
"z"
],
[
"x",
"y",
"q"
"w"
]
]
}
Я застрял на этом. Как я могу объединить эти списки вместе?
Я ищу способ получить ['x', 'y', 'z', 'q', 'w']
Вам нужно использовать union
.
С верхней части моей головы:
all_settings="{{ foo|map(attribute='settings')|union(bar|map(attribute='settings')) }}"
Как насчет этого ?
- name: get all settings
set_fact:
all_settings="{{ my_list|map(attribute='settings')|list|flatten|unique }}"
Похоже, это должно работать:
...
all_settings="{{ my_list|map(attribute='settings')|list | sum(start=[]) | unique }}"