For loop 如何将变量嵌套在ansible for中

For loop 如何将变量嵌套在ansible for中,for-loop,ansible,ansible-facts,ansible-template,For Loop,Ansible,Ansible Facts,Ansible Template,我正在使用Ansible,我需要显示主机网络接口的列表。在Jinja2格式模板中,我需要以下值:每个接口的名称、IP、掩码和网络。为了获得这些信息,我使用了ansible_事实,但我在为进行分析时遇到了一个问题 我从这里获得网络接口: "ansible_interfaces": [ "eth1", "eth0", "lo" ], 到目前为止,一切都很好,我做了一个很好的决定,它向我展示了这三

我正在使用Ansible,我需要显示主机网络接口的列表。在Jinja2格式模板中,我需要以下值:每个接口的名称、IP、掩码和网络。为了获得这些信息,我使用了ansible_事实,但我在为进行分析时遇到了一个问题

我从这里获得网络接口:

"ansible_interfaces": [
    "eth1",
    "eth0",
    "lo"
],
到目前为止,一切都很好,我做了一个很好的决定,它向我展示了这三个方面。我的问题是,我需要从每个接口获得的信息在jason中是分开的:

"ansible_eth0": {
    "active": true,
    "device": "eth0",
    "hw_timestamp_filters": [],
    "ipv4": {
        "address": "x.x.x.x",
        "broadcast": "x.x.x.x",
        "netmask": "255.255.192.0",
        "network": "x.x.x.x"
    },
    "ipv4_secondaries": [
        {
            "address": "x.x.x.x",
            "broadcast": "x.x.x.x",
            "netmask": "255.255.0.0",
            "network": "x.x.x.x"
        }
    ],
    "ipv6": [
        {
            "address": "",
            "prefix": "64",
            "scope": "link"
        }
    ],
    "macaddress": "",
    "module": "virtio_net",
    "mtu": 1500,
    "pciid": "virtio0",
    "promisc": false,
    "speed": -1,
    "timestamping": [
        "tx_software",
        "rx_software",
        "software"
    ],
    "type": "ether"
},
"ansible_eth1": {
    "active": true,
    "device": "eth1",
    "hw_timestamp_filters": [],
    "ipv4": {
        "address": "x.x.x.x",
        "broadcast": "x.x.x.x",
        "netmask": "255.255.240.0",
        "network": "x.x.x.x"
    },
    "ipv6": [
        {
            "address": "",
            "prefix": "64",
            "scope": "link"
        }
    ],
    "macaddress": "",
    "module": "virtio_net",
    "mtu": 1500,
    "pciid": "virtio1",
    "promisc": false,
    "speed": -1,
    "timestamping": [
        "tx_software",
        "rx_software",
        "software"
    ],
    "type": "ether"
},
为了获得此信息,我尝试以下方法:

{{% for interfaz in ansible_interfaces %}}
{{% for item in ansible_['interfaz'] %}}

Name: {{ item.device }}
IP: {{ item.ipv4.address }}
Netmask: {{ item.ipv4.metmask }}
Red: {{ item.ipv4.network }}

{{% endfor %}}
{{% endfor %}}
我试过不同的方法,但不知道怎么做。在我看来,返回给我的是字符串。我尝试了iteritems选项,但我也不能。如果有人能帮我解决这个问题,我将不胜感激。

使用查找插件变量。通过在shell
ansible doc-t lookup vars
中运行查看详细信息。比如说

-调试:
味精:|
{ansible_接口%中的i的%
{%set-dev=lookup('vars','ansible_'~i)%}
名称:{{dev.device}
IP:{dev.ipv4.address |默认值(无)}
网络掩码:{{dev.ipv4.Netmask}默认值(无)}
红色:{dev.ipv4.network |默认值(无)}
{%endfor%}
在我的笔记本电脑里

msg:|-
姓名:罗
IP:127.0.0.1
网络掩码:255.0.0.0
红色:127.0.0.0
姓名:wlan0
知识产权:
网络掩码:
红色:
姓名:eth0
IP:10.1.0.27
网络掩码:255.255.255.0
红色:10.1.0.0
属性ipv4可能丢失。使默认值适合您的需要