使用 ansible 设置模块进行更高级的过滤

使用 ansible 设置模块进行更高级的过滤

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

在剧本中,您可以使用示例{{ ansible_eth0["ipv4"]["address"] }}或获取 ansible 中的事实{{ ansible_eth0.ipv4.address }}

我怎样才能使用类似这样的命令获取与仅显示信息的命令相同的信息ansible all -m setup -a "filter=???"

正如filter,我已经尝试了您想要在剧本中使用的语法,以及一些与的组合更奇特的语法*

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

答案1

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

过滤选项仅过滤 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
}

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

# ansible localhost -m setup -a 'filter=facter_ipaddress_p5p1'
localhost | success >> {
    "ansible_facts": {
        "facter_ipaddress_p5p1": "10.0.0.2"
    },
    "changed": false
}

相关内容