List Ansible:如何对列表中的每个复杂参数应用默认值
我有以下列表和默认变量:List Ansible:如何对列表中的每个复杂参数应用默认值,list,dictionary,ansible,yaml,List,Dictionary,Ansible,Yaml,我有以下列表和默认变量: my_list_complex: - key1: val1 key2: val2 key3: val3 keyN: valN - key1: val1 key3: val3 keyN: valN key2: default2 key3: default3 key4: default4 我需要映射我的列表以将所有默认值应用于它。请注意以下事项: 复合体中的键列表是无限的,不可预测的。只有具有默认值且列表元素中不存在的键才应设置为默认值 预期产出为:
my_list_complex:
- key1: val1
key2: val2
key3: val3
keyN: valN
- key1: val1
key3: val3
keyN: valN
key2: default2
key3: default3
key4: default4
我需要映射我的列表以将所有默认值应用于它。请注意以下事项:
复合体中的键列表是无限的,不可预测的。只有具有默认值且列表元素中不存在的键才应设置为默认值
预期产出为:
my_list_complex_default_applied:
- key1: val1
key2: val2
key3: val3
key4: default4
keyN: valN
- key1: val1
key2: default2
key3: val3
key4: default4
keyN: valN
我已经研究了combine、map和with_项目,但我没有成功完成任务
对于Ansible任务或角色,我将如何执行此操作?对于Ansible的最新版本,您可以执行以下操作:
---
- hosts: localhost
gather_facts: no
vars:
my_list_complex:
- key1: val1
key2: val2
key3: val3
keyN: valN
- key1: val1
key3: val3
keyN: valN
my_template:
key2: default2
key3: default3
key4: default4
tasks:
- set_fact:
merged_list: "{{ (merged_list | default([])) + [ my_template | combine(item) ] }}"
with_items: "{{ my_list_complex }}"
- debug:
msg: "{{ merged_list }}"
我记不起来了,因为什么版本的Ansible可以增加带有集合事实和项目的列表,但我认为您应该可以使用Ansible 2.1+。对于Ansible的最新版本,您可以:
---
- hosts: localhost
gather_facts: no
vars:
my_list_complex:
- key1: val1
key2: val2
key3: val3
keyN: valN
- key1: val1
key3: val3
keyN: valN
my_template:
key2: default2
key3: default3
key4: default4
tasks:
- set_fact:
merged_list: "{{ (merged_list | default([])) + [ my_template | combine(item) ] }}"
with_items: "{{ my_list_complex }}"
- debug:
msg: "{{ merged_list }}"
我不记得什么版本可以用set\u fact和\u项来增加列表,但我觉得你应该可以使用Ansible 2.1+。Skilly,所以你可以将复杂项应用到默认键,这是个好主意。这应该是某种标准化的功能:鬼鬼祟祟,所以您可以将复杂项应用于默认键,这是一个好主意。这应该是某种标准化的功能: