我有一个在网络设备上运行一些命令的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有可能吗?
答案 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 %}