我不明白为什么列表元素列表在 Jinja 模板内的 for 循环迭代之间没有改变。
例如,剧本:
- name: Create Config Files
hosts: localhost
gather_facts: false
vars:
conf_elements:
# Hostname|Octet|Mgmt|Location
- ["host-s01","100","10","999"]
- ["host-s02","100","20","999"]
- ["host-s03","100","30","999"]
- ["host-s04","100","40","999"]
tasks:
- name: Creata a New config file
ansible.builtin.template:
src: config-template_v0.1.j2
dest: "./CNFG/{{item.0}}.txt"
loop: "{{ conf_elements }}"
和模板(已编辑):
{% for hostname, octet, mgmtip, id in conf_elements %}
!
conf t
hostname {{ hostname }}
mgmt 10.{{ octet }}.10.10
ip address 10.{{ octet }}.10.{{ mgmtip }}
descr location {{ id }}
!
{% endfor %}
我期望在
CNFG
目录中有 4 个文件,其名称分别与主机名相同(每个列表中的第一个列表元素)。这实际上有效,但是所有 4 个文件都填充了第一个列表元素中的变量,基本上所有 4 个文件都是相同的,我不明白为什么 Jinja 中不使用过去的列表变量。
感谢您的阅读!
不确定您是否已经弄清楚,但您正在循环
conf_elements
变量两次。
一旦完成任务(
loop: "{{ conf_elements }}"
)
一旦使用模板(将打印文件中的所有 4 行)。
因此,解决方案是在模板文件中使用与命名文件时相同的点符号:
dest: "./CNFG/{{item.0}}.txt"