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 task
和 jinja
模板进行细微更改即可解决您的问题。
当我们添加一个 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
我想用 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 task
和 jinja
模板进行细微更改即可解决您的问题。
当我们添加一个 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