具有Jinja格式的Ansible模板

时间:2017-10-31 09:45:17

标签: templates ansible jinja2

我有一个在网络设备上运行一些命令的playbook,并将结果拉入单独的列表,然后使用Template + .j2文件将它们全部输出到一个单独的文件中。模板看起来像:

{% for i in ips %}
IP: {{ i }}
{% endfor %}

{% for j in intf %}
Intf: {{ j }}

{% for k in br_list %}
BR: {{ k }}
{% endfor %}

我的输出如下:

IP: 127.0.0.1
IP: 127.0.0.2
IP: 127.0.0.3
IP: 127.0.0.4

Intf: Vlan1
Intf: Vlan2
Intf: Vlan3
Intf: Vlan4

BR: False
BR: False
BR: False
BR: False

我想要的是输出表格如下:

IP            Intf            BR
127.0.0.1     Vlan1           False
127.0.0.2     Vlan2           False
127.0.0.3     Vlan3           False
127.0.0.4     Vlan4           False

我试过的任何嵌套循环都会返回每个列表的重复项。 Ansible / Jinja有可能吗?

1 个答案:

答案 0 :(得分:4)

使用zip过滤器:

{% for i in ips | zip(intf, br_list) %}
{{ "%-10s" | format(i[0]) }}{{ "%-10s" | format(i[1]) }}{{ "%-10s" | format(i[2]) }}
{% endfor %}

"%-10s" | format(i[0])是在右侧填充10个空格。

您甚至可以使用嵌套循环:

{% for i in l1 | zip(l2,l3) %}
{% for j in i %}
{{ "%-10s" | format(j) }}
{%- endfor %}

{% endfor %}