Jinja2-for循环中的全局变量更新

时间:2019-07-15 11:33:04

标签: ansible jinja2

我正在为某种服务配置脚本,我想将其模板化为我们的配置管理工具(Ansible)。但是有一个特殊的动作,似乎是Jinja2的限制(如果在这种情况下可以接受该词),我无法克服:

{% set min = 0 %}
{% set max = 5500 %}
{% for item in list_of_items %}
    for i in {min..max}; do command {{ item }} --arg 1 commnand_stuff $i; done
    {% set min = max + 1 %}
    {% set max = max * 2 %}
#fi
{% endfor %}

预期(期望)结果是: -迭代1-min = 0max = 5500 -迭代2-min = 5501max = 11000 ..

实际结果是: -min和max在所有循环迭代中都为常数-min=0max=5500

那么,如何在Jinja2 for循环中修改全局变量?

1 个答案:

答案 0 :(得分:1)

set 在循环内不起作用。参见assigning a variable inside a loop

可以使用 loop.index 代替。下面的模板

flux1:10.10.10.10
flux2:10.10.10.102

给予

{% for item in list_of_items %}
     {{ 5500 * (loop.index-1) + 1 }}..{{ 5500 * loop.index }}
{% endfor %}