ansible playbook 中的变量在 Jinja for 循环的迭代之间不会持续存在

问题描述 投票:0回答:1

我不明白为什么列表元素列表在 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 中不使用过去的列表变量。

感谢您的阅读!

loops ansible jinja2 ansible-template
1个回答
0
投票

不确定您是否已经弄清楚,但您正在循环

conf_elements
变量两次。

一旦完成任务(

loop: "{{ conf_elements }}"
) 一旦使用模板(将打印文件中的所有 4 行)。

因此,解决方案是在模板文件中使用与命名文件时相同的点符号:

dest: "./CNFG/{{item.0}}.txt"

© www.soinside.com 2019 - 2024. All rights reserved.