Ansible jinja字典创建多个文件

Ansible jinja dictionary create multiple files

我想用 jinja 模板在 ansible 循环中创建多个,就像那样:

template_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