我在group_vars中嵌套了这样的列表:
var_name:
- group1:
- variable1
- variable2
- group2:
- variable1
- variable2
并希望在jinja2模板中迭代它以形成像:
这样的xml<group>
<variable> <host>variable1</host> </variable>
<variable> <host>variable2</host> </variable>
</group>
<group>
<variable> <host>variable1</host> </variable>
<variable> <host>variable2</host> </variable>
</group>
所以我做了一个像
这样的嵌套noop{% for var in var_name %}
<group>
{% for host in var %}
<variable> <host>{{host}}</host> </variable>
{% endfor %}
</group>
{% endfor %}
但它没有用,我得到了
<group>
<variable> <host>group1</host> </variable>
<group>
<group>
<variable> <host>group2</host> </variable>
<group>
看起来像包含var变量值的主变量,我应该怎么做?
答案 0 :(得分:1)
你关闭了。试试这个。
首先,将group1和group2重命名为&#34; group&#34;像这样:
var_name:
- group:
- variable1
- variable2
- group:
- variable1
- variable2
然后,按如下方式更改循环:
{% for var in var_name %}
<group>
{% for host in var.group %}
<variable><host>{{ host }}</host></variable>
{% endfor %}
</group>
{% endfor %}
答案 1 :(得分:0)
问题在于您的{% for host in var %}
声明。 var
只在循环的第一次迭代中解析为字符串group1
,在第二次迭代中解析为group2
。这就是你得到你提到的输出的原因。
您要做的是使用该名称作为var_name
数据结构的参考。你想要的是这些方面:
{% for host in var_name[var] %}
这将引用您在var_name
中定义的变量。