Ansible jinja 模板:可变数量的组键
Ansible jinja templating: variable number of group keys
我正在编写一个 shell ansible 脚本,我需要做的一件事是使用 jinja2 从清单文件中填充 ini 文件中的列表。
目前它接受变量 component_group_1 和 component_group_2 作为组键并从那里填充组件列表
components: "{{groups[component_group_1]+groups[component_group_2]}}"
我如何重写这一行,以便它可以只使用一个名为 all_component_groups 的变量,它具有此模式 'customers,vendors,products....' 中所有需要的组键,并且可以在哪里是任意数量的组密钥?
将 var 作为列表会容易得多:
all_component_groups_list:
- group1
- group2
- group3
同时,根据您的模式创建列表非常容易
all_components_groups: "customers,vendors,products"
all_components_groups_list: "{{ all_components_groups.split(',') }}"
一旦你明白了,剩下的也很简单:
- 使用
map
=> extract
从groups
字典中提取相关列表
flatten
获取包含所有值的单个列表的列表
- 使用
unique
过滤器删除可能的重复值
根据您的逗号分隔列表要求将它们放在一起
components: "{{ all_component_groups.split(',') | map('extract', groups) | flatten | unique }}"
我正在编写一个 shell ansible 脚本,我需要做的一件事是使用 jinja2 从清单文件中填充 ini 文件中的列表。
目前它接受变量 component_group_1 和 component_group_2 作为组键并从那里填充组件列表
components: "{{groups[component_group_1]+groups[component_group_2]}}"
我如何重写这一行,以便它可以只使用一个名为 all_component_groups 的变量,它具有此模式 'customers,vendors,products....' 中所有需要的组键,并且可以在哪里是任意数量的组密钥?
将 var 作为列表会容易得多:
all_component_groups_list:
- group1
- group2
- group3
同时,根据您的模式创建列表非常容易
all_components_groups: "customers,vendors,products"
all_components_groups_list: "{{ all_components_groups.split(',') }}"
一旦你明白了,剩下的也很简单:
- 使用
map
=>extract
从 flatten
获取包含所有值的单个列表的列表- 使用
unique
过滤器删除可能的重复值
groups
字典中提取相关列表
根据您的逗号分隔列表要求将它们放在一起
components: "{{ all_component_groups.split(',') | map('extract', groups) | flatten | unique }}"