在 Ansible 中更新嵌套列表是一个常见的问题。以下演示如何使用 Ansible 修改嵌套列表中的元素。
假设我们有一个嵌套列表变量,其值为:
nested_list:
- name: item1
properties:
- key: prop1
value: value1
- key: prop2
value: value2
- name: item2
properties:
- key: prop3
value: value3
- key: prop4
value: value4
我们想要更新名为'item1”的'prop2”的值为'new_value”,可以使用以下 Ansible 代码:
- name: Update value in nested list
set_fact:
nested_list: "{{ nested_list|default([]) |
map(when(item.name == 'item1',
item|combine({'properties':
item.properties|map(when(prop.key == 'prop2',
prop|combine({'value': 'new_value'}))
|list)
})
default(item))
|list)
}}"
该代码使用 Ansible 的'set_fact”模块来创建一个名为'nested_list”的新变量。它通过将默认列表设置为空列表来创建初始值。随后,我们使用 Ansible 的'map”过滤器更新列表中的每个项目。对于名为'item1”的项目,我们使用'combine”函数更新'properties”列表中的名为'prop2”的项的值。然后返回修改后的项,否则返回未修改的项,并将结果作为新的'nested_list”变量。