可以使用Ansible的combine
过滤器来合并两个列表,并根据属性进行合并。下面是一个示例代码:
- hosts: localhost
vars:
list1:
- name: item1
value: 10
- name: item2
value: 20
list2:
- name: item1
description: description1
- name: item3
description: description3
tasks:
- name: Combine lists based on name attribute
set_fact:
merged_list: "{{ list1 | combine(list2, recursive=True) }}"
vars:
list1: "{{ list1 | items2dict(key_name='name', value_name='value') }}"
list2: "{{ list2 | items2dict(key_name='name', value_name='description') }}"
- name: Print merged list
debug:
var: merged_list
这个示例中,我们有两个列表list1
和list2
,它们都有一个name
属性。我们使用items2dict
过滤器将这两个列表转换为字典,键是name
属性的值,值是整个列表项。然后,我们使用combine
过滤器将两个字典合并为一个字典,并将结果存储在merged_list
变量中。最后,我们使用debug
模块打印合并后的列表。
运行这个示例代码,输出将会是:
TASK [Print merged list] *****************************************************************************************************************************
ok: [localhost] => {
"merged_list": {
"item1": {
"description": "description1",
"value": 10
},
"item2": {
"value": 20
},
"item3": {
"description": "description3"
}
}
}
可以看到,合并后的列表根据name
属性进行了合并。如果两个列表中都存在同一个name
属性的项,它们将会被合并到一个字典中。如果只有一个列表中存在某个name
属性的项,它将保持不变。
下一篇:Ansible根据条件合并列表