将更高级的过滤器与 ansible 设置模块一起使用

xeo*_*eor 7 ansible

我是 ansible 的新手,但我找不到这个问题的答案,我认为这个问题看起来很简单..

在剧本中,您可以使用示例{{ ansible_eth0["ipv4"]["address"] }}{{ ansible_eth0.ipv4.address }}.

如何使用类似的东西获取与仅信息命令相同的信息 ansible all -m setup -a "filter=???"

作为filter,我已经尝试了您想在剧本中使用的语法,以及一些与*.

这甚至是收集此类数据的正确方法吗?

daw*_*wud 6

遗憾的是,这不受支持。从在线文档

filter 选项仅过滤 ansible_facts 下的第一级子项。

由于ansible_interface事实是 JSON 文档结构中的第一级子键,因此您可以访问的最小值如下:

# ansible localhost -m setup -a 'filter=ansible_p5p1'
localhost | success >> {
    "ansible_facts": {
        "ansible_p5p1": {
            "active": true,
            "device": "p5p1",
            "ipv4": {
                "address": "10.0.0.2",
                "netmask": "255.255.255.0",
                "network": "10.0.0.0"
            },
            "ipv6": [
                {
                    "address": "fd6c:xxxx:xxxx::2",
                    "prefix": "64",
                    "scope": "global"
                },
                {
                    "address": "fe80::xxxx:xxxx:xxxx:5a56",
                    "prefix": "64",
                    "scope": "link"
                }
           ],
            "macaddress": "xx:xx:xx:xx:xx:xx",
            "module": "foo",
            "mtu": 1500,
            "promisc": false,
            "type": "ether"
        }
    },
    "changed": false
}
Run Code Online (Sandbox Code Playgroud)

如果您的系统已经facterohai已安装,您可以从ansible以下位置访问相同的信息:

# ansible localhost -m setup -a 'filter=facter_ipaddress_p5p1'
localhost | success >> {
    "ansible_facts": {
        "facter_ipaddress_p5p1": "10.0.0.2"
    },
    "changed": false
}
Run Code Online (Sandbox Code Playgroud)