Ansible jinja字典创建多个文件



我想用jinja模板创建多个可解析循环,比如:

模板_a

name = a
username = c

template_b

name = b
username = d

playbook.yml

- name: Create file from jinja
template:
src: "jinja.j2"
dest: "template_{{ item }}"
owner: "root"
group: "root"
with_items: "{{ jinja_var }}"

variables.yml

jinja_var:
a: c
b: d

jinja.j2

{% for (key,value) in jinja_var.iteritems() %}
name =  {{ key }}
username =  {{ value }}
{% endfor %}

我有两个相同的文件:

name =  a
username =  1
name =  b
username =  2

有几种方法可以实现上述输出。不过没有什么复杂的,只要对playbook taskjinja模板进行一些小的更改就可以解决您的问题。

当我们添加一个for循环进行迭代时,它会将变量中存在的每个字典对象添加到目标文件中。因此,通过在jinja中直接添加item并将with_dict传递给任务将缓解上述问题。

playbook.yml

- name: Create file from jinja
template:
src: "jinja.j2"
dest: "template_{{ item.key }}"
owner: "root"
group: "root"
with_dict: "{{ jinja_var }}"

jinja.j2

name =  {{ item.key }}
username =  {{ item.value }}

输出

template_a

name =  a
username =  c

template_b

name =  b
username =  d

最新更新