Ansible 进阶 | facts 缓存

本文介绍了Ansible facts的概念,包括其包含的信息和在playbook中的应用。详细讲解了如何获取facts,以及facts缓存的重要性,特别是在大规模部署时。文章讨论了如何设置facts缓存,包括使用redis和jsonfile,并提供了配置示例。最后,通过效果测试展示了启用缓存后的性能提升。
摘要由CSDN通过智能技术生成

什么是 Ansible facts

Ansible facts 是远程系统的信息,主要包含IP地址,操作系统,以太网设备,mac 地址,时间/日期相关数据,硬件信息等信息。

Ansible facts 对于需要根据远程主机的信息作为执行条件操作的场景非常有用。例如,根据远程服务器使用的操作系统版本,可以安装不同版本的软件包。或者也可以显示与每台远程计算机相关的一些信息,例如每台设备上有多少 RAM 可用。

如何获取 Ansible facts

默认情况下,在使用 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 的缓存。

例如,我们可以在空闲的时候收集 facts,缓存下来,在需要的时候直接读取缓存进行引用。

Ansible 1.8 版本开始,引入了 facts 缓存功能。

Ansible 的配置文件中可以修改 gathering 的值为 smartimplicit 或者 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

在使用 redis 缓存后,出现异常(若未出现,请忽略):TypeError: the JSON object must be str, not 'bytes',加上 -vvv 打印出调试信息后

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值