我有一个使用的任务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']
答案1
您需要使用union
。
我首先想到的是:
all_settings="{{ foo|map(attribute='settings')|union(bar|map(attribute='settings')) }}"
答案2
那这个呢 ?
- name: get all settings
set_fact:
all_settings="{{ my_list|map(attribute='settings')|list|flatten|unique }}"
答案3
看起来这应该可行:
...
all_settings="{{ my_list|map(attribute='settings')|list | sum(start=[]) | unique }}"