默认情况下,Ansible 每次执行 playbook 时的第一个 Task 就是 获取每台主机的 facts 信息。假如不需要可以设置 `gather_facts = no` 进行关闭,以提高执行 playbook 的效率。 假如想获取 facts 信息
默认情况下,Ansible 每次执行 playbook 时的第一个 Task 就是 获取每台主机的 facts 信息。假如不需要可以设置 `gather_facts = no` 进行关闭,以提高执行 playbook 的效率。
假如想获取 facts 信息,同时又想加速这个 task 的效率,就需要设置 facts 缓存。
缓存 facts 信息可以存档 JSON 文件中,也可以方式 redis 和 memcached 中。
测试playbook 文件
- hosts: allgather_facts: yes
tasks:
- name: check hosts
ping:
- name: debug
debug:
var: ansible_facts
缓存facts信息
缓存到文件(JSON格式的数据)
在ansible.cfg 文件中设置
[root@localhost home]# vim /etc/ansible/ansible.cfggathering = 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: allgather_facts: yes # 显式定义收集
ather_facts: no # 显式定义不收集
验证
缓存到 redis
在任一机器或者ansible 控制主机上部署 Redis 服务
[root@localhost home]# yum -y install redis假如 Redis 服务不在 ansible 控制主机上,还应该设置 redis 监听地址
[root@localhost ~]# vim /etc/redis.confbind 0.0.0.0 //监听任意端口
在 ansible.cfg 文件中配置缓存到 redis
gathering = smartfact_caching = redis # 缓存到 redis
fact_caching_connection = 192.168.1.37:6379:0
fact_caching_timeout = 86400 # 缓存数据时间是一天
在控制主机 python 的 redis 库
[root@localhost ~]# pip install redis提示报错:
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.pypython 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