1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| facts 是远程系统的信息,主要包含IP地址,操作系统,以太网设备,mac 地址,时间/日期相关数据,硬件信息等信息. 默认情况下,在使用 Ansible 对远程主机执行任何一个 playbook 之前,总会先通过 setup 模块获取 facts,并暂存在内存中,直至该 playbook 执行结束。 (这意味着,想要在 playbook 中引用主机变量,至少先与该主机通信一次,以便 Ansible 能够访问其 facts,尽管有时候只需要来自该主机的少量信息)
Ansible 提供了 setup 模块来收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用。 如果想查看 setup 模块获取到的数据,可以在命令行上通过调用 setup 模块命令查看: ansible all -m setup #将会返回一大大堆数据 获取这么多数据是非常耗时的,通过 time 指令可以看出,获取一台主机的 facts 数据就用了 3 秒多时间: time ansible localhost -m setup real 0m3.321s user 0m1.797s sys 0m0.205s
在被控主机较少的情况下,收集信息还可以容忍,如果被控主机数量非常大,收集 facts 信息会消耗掉非常多时间。那怎么办呢?优化 Ansible 运行速度,最简单的莫过于设置 facts 缓存了 设置 facts 缓存:我们可以设置 gather_facts: no 来禁止 Ansible 收集 facts 信息,但是有时候又需要使用 facts 中的内容,这时候可以设置 facts 的缓存。 Ansible 1.8 版本开始,引入了 facts 缓存功能。 Ansible 的配置文件中可以修改 gathering 的值为 smart、implicit 或者 explicit。 - smart 表示默认收集 facts,但 facts 已有的情况下不会收集,即使用缓存 facts; - implicit 表示默认收集 facts,要禁止收集,必须使用 gather_facts: False; - explicit 则表示默认不收集,要显式收集,必须使用 gather_facts: Ture。 在使用 facts 缓存时(即设置为 smart),Ansible 支持两种 facts 缓存:redis 和 jsonfile。 - 使用 redis 缓存: gathering = smart fact_caching_timeout = 86400 fact_caching = redis fact_caching_connection = 127.0.0.1:6379
# 若 redis 设置了密码 # fact_caching_connection = localhost:6379:0:admin - 使用 json 文件缓存 fact_caching = jsonfile fact_caching_connection = /tmp/mycachedir #注意:这个目录需要是一个可读写的目录。
|