List 基于条件的可分解合并列表
我有两份清单:List 基于条件的可分解合并列表,list,merge,ansible,List,Merge,Ansible,我有两份清单: list1: - file: f1 perm: '777' - file: f2 perm: '677' - file: f3 perm: '755' - file: f4 perm: '700' 我必须将它们合并到新列表中,如下所示: list3: - file: f1 perm: '777' - file: f2 perm: '677' - file: f3 perm: '755'
list1:
- file: f1
perm: '777'
- file: f2
perm: '677'
- file: f3
perm: '755'
- file: f4
perm: '700'
我必须将它们合并到新列表中,如下所示:
list3:
- file: f1
perm: '777'
- file: f2
perm: '677'
- file: f3
perm: '755'
t_perm: '677'
- file: f4
perm: '700'
t_perm: '755'
正常合并由
- set_fact:
list3: "{{ (list1 + list2)|
groupby('file')|
map('last')|
map('combine')|
list }}"
但我还有一个条件。如果文件存在于列表1中而不存在于列表2中,则合并。如果文件存在于列表2中而不存在于列表1中,则不要合并,忽略它。为了满足条件,我们需要从列表2中删除列表1中不存在的项目
my_键
。使用列表1和列表2中的文件创建my\u列表
,并将其用于已测试的任务set\u fact
-设置事实:
列表3:“{(列表1+my_列表)|
groupby('文件')|
映射('last')|
映射('combine')|
列表}”
变量:
my_键:“{list2 | map(attribute='file')|
相交(列表1 |映射(属性='file'))|
列表}”
my_列表:“{{list2 | selectattr('file','in',my_键)|
列表}”
-调试:
变量:列表3
给予
list3:
-档案:f1
烫发:“777”
-档案:f2
烫发:“677”
-档案:f3
烫发:“755”
t_perm:'677'
-档案:f4
烫发:“700”
t_perm:'755'
为了满足条件,我们需要从列表2中删除列表1中没有的项
my_键
。使用列表1和列表2中的文件创建my\u列表
,并将其用于已测试的任务set\u fact
-设置事实:
列表3:“{(列表1+my_列表)|
groupby('文件')|
映射('last')|
映射('combine')|
列表}”
变量:
my_键:“{list2 | map(attribute='file')|
相交(列表1 |映射(属性='file'))|
列表}”
my_列表:“{{list2 | selectattr('file','in',my_键)|
列表}”
-调试:
变量:列表3
给予
list3:
-档案:f1
烫发:“777”
-档案:f2
烫发:“677”
-档案:f3
烫发:“755”
t_perm:'677'
-档案:f4
烫发:“700”
t_perm:'755'
我已更新。我已更新。
- set_fact:
list3: "{{ (list1 + list2)|
groupby('file')|
map('last')|
map('combine')|
list }}"