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

赋料扬雄敌,诗看子建亲。这篇文章主要讲述自动化运维工具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# 显式定义不收集



验证



缓存到 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)设置 facts 缓存】
[root@localhost ~]# pip install redis

提示报错:

curlhttps://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)


在安装即可


检查

使用get调用
192.168.19.100:6379> get ansible_facts192.168.19.103




    推荐阅读