自动化运维工具Ansible(13)设置 facts 缓存

Posted 资本家的鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维工具Ansible(13)设置 facts 缓存相关的知识,希望对你有一定的参考价值。

默认情况下,Ansible 每次执行 playbook 时的第一个 Task 就是 获取每台主机的 facts 信息。假如不需要可以设置  `gather_facts = no` 进行关闭,以提高执行 playbook 的效率。

假如想获取 facts 信息,同时又想加速这个 task 的效率,就需要设置 facts 缓存。

缓存 facts 信息可以存档 JSON 文件中,也可以方式 redis 和 memcached 中。

测试playbook 文件

- hosts: all
gather_facts: yes
tasks:
- name: check hosts
ping:

- name: debug
debug:
var: ansible_facts

缓存facts信息


缓存到文件(JSON格式的数据)

在ansible.cfg 文件中设置

[root@localhost home]# vim /etc/ansible/ansible.cfg
gathering = smart

ansible的配置文件中可以修改gathering的值为 `smart`、`implicit` 或者 `explicit`。

  • `smart`; --> 表示默认收集facts,但facts已有的情况下不会收集,也就是会使用缓存facts;
  • `implicit`--> 表示默认收集facts,要禁止收集,必须使用gather_facts: False;
  • `explicit`--> 则表示默认不收集,要显式收集,必须使用gather_facts: Ture

还可指定搜集其他信息,比如只搜集 network,virtual

  • gather_subset = network,virtual  # 只搜集 网络信息和虚拟化信息
  • fact_caching = jsonfile       # 缓存到 json 文件
  • fact_caching_connection= /dev/shm/ansible_fact_cache
  • fact_caching_timeout = 86400  # 缓存数据时间是一天

`fact_caching_connection` 是一个放置在可写目录(如果目录不存在,ansible会试图创建它)中的本地文件路径,文件名是在 Inventory 中保存的 IP 或者  hostname .

在playbook 中设置

- hosts: all
gather_facts: yes # 显式定义收集
ather_facts: no # 显式定义不收集


验证

自动化运维工具Ansible(13)设置


缓存到 redis

在任一机器或者ansible 控制主机上部署 Redis 服务

[root@localhost home]# yum -y install redis

假如 Redis 服务不在 ansible 控制主机上,还应该设置 redis 监听地址

[root@localhost ~]# vim /etc/redis.conf
bind 0.0.0.0 //监听任意端口

在 ansible.cfg 文件中配置缓存到 redis

gathering = smart
fact_caching = redis # 缓存到 redis
fact_caching_connection = 192.168.1.37:6379:0

fact_caching_timeout = 86400 # 缓存数据时间是一天

在控制主机  python 的 redis 库

自动化运维工具Ansible(13)设置

[root@localhost ~]# pip install redis

提示报错:

自动化运维工具Ansible(13)设置

curl  https://bootstrap.pypa.io/pip/2.7/get-pip.py  -o get-pip.py
python get-pip.py
ln -s /home/kali/.local/bin/pip2 /usr/bin/pip2
pip2 --version
pip 20.3.4 from /usr/lib/python2.7/site-packages/pip (python 2.7)

自动化运维工具Ansible(13)设置

在安装即可


检查

自动化运维工具Ansible(13)设置

使用get调用

192.168.19.100:6379> get ansible_facts192.168.19.103


以上是关于自动化运维工具Ansible(13)设置 facts 缓存的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维工具-Ansible Jinja2模板

自动化运维工具Ansible实战playbook

自动化运维工具ansible实战第三章(Playbook高级应用技巧)

如何限制Ansible的设置模块(gather_facts)只检索服务器的主机名,例如?=? [重复]

Ansible自动化运维管理工具的概述与部署

Ansible自动化运维管理工具的概述与部署