Skip to content

11. Facts 数据

什么是facts

TASK [Gathering Facts] ****************************************
ok: [192.168.1.3]

从内容来看,这是执行了一个名为Gathering Facts的TASK,但是即使在我们的命令中或者YAML中没有定义这个TASK,也会执行这个任务,这是什么道理?

facts组件是Ansible用于采集被管理机器设备信息的一个功能,采集的机器设备信息主要包含IP地址,操作系统,以太网设备,mac 地址,时间/日期相关数据,硬件信息等。
采集这些信息有什么用呢?有的时候我们需要根据远程主机的信息作为执行条件操作,例如,根据远程服务器使用的操作系统版本,可以安装不同版本的软件包;或者也可以显示与每台远程计算机相关的一些信息,例如每台设备上有多少RAM可用。

所以,在一些业务场景中,facts对我们是很有帮助的,省去了我们好多工作,大大提高了工作效率。

用法

我们可以使用setup模块获取被管理机器的所有facts信息,可以使用filter来查看指定的信息。setup模块获取的整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最外层的值。我们可以通过以下Ansible Ad-Hoc命令查看facts信息:


ansible server1 -m setup

192.168.1.3 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.1.3"
        ],
        "ansible_all_ipv6_addresses": [
            "2409:8a10:72:1c10:c59e:af39:7c72:6afb",
            "fe80::7107:62de:8cf8:db00"
        ],
        "ansible_apparmor": {
            "status": "disabled"
        },
        "ansible_architecture": "x86_64",
        "ansible_bios_date": "12/01/2006",
        "ansible_bios_version": "VirtualBox",
<--- 此处省略 --->
// 由于输出的内容实在是太多了,我们可以使用filter参数来查看指定的信息
ansible server1 -m setup -a 'filter=ansible_all_ipv4_addresses'

facts配置

在Ansible的配置文件中,关于facts的重要配置项有以下几个:

gathering:facts的开关,默认是开启的;有以下三个取值:

smart:开启facts信息收集,但是会优先使用facts缓存信息,可以使用gather_facts: False禁用facts收集;
implicit:开启facts信息收集,要禁止收集,必须使用gather_facts: False;
explicit:关闭facts信息收集,要显式收集,必须使用gather_facts: Ture。
fact_caching:缓存facts信息的方式;可以配置成jsonfile或者redis;

fact_caching_connection:缓存插件的配置,针对不同的fact_caching方式,取值含义则不同:

如果fact_caching为jsonfile,则此处应配置存储缓存文件的目录;
如果fact_caching为redis,则此处应按照host:port:database的格式配置redis的信息。
gather_timeout:收集超时时间,默认为86400;

fact_caching_timeout:设置facts缓存的过期时间,默认是86400秒。