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(',') }}"

一旦你明白了,剩下的也很简单:

  1. 使用map => extract
  2. groups字典中提取相关列表
  3. flatten 获取包含所有值的单个列表的列表
  4. 使用 unique 过滤器删除可能的重复值

根据您的逗号分隔列表要求将它们放在一起

components: "{{ all_component_groups.split(',') | map('extract', groups) | flatten | unique }}"