通过
facts_cache 缓存的变量通常存储在由 Ansible 配置文件中指定的位置,具体位置取决于你使用的缓存插件。下面是几个常见的缓存插件和它们的存储方式,以及如何查询这些缓存变量。
1. 常见的缓存插件及其存储位置
jsonfile插件:- 存储位置:缓存变量会被存储为 JSON 文件,通常存放在你指定的文件路径中。你可以在
ansible.cfg文件中配置fact_caching_connection来指定缓存文件的目录。 - 配置示例:
[defaults] fact_caching = jsonfile fact_caching_connection = /tmp fact_caching_timeout = 86400 # 缓存过期时间(秒) - 存储方式:在指定的目录下,每个主机的 facts 会以 JSON 文件形式存储,每个文件名通常对应于主机名。
- 存储位置:缓存变量会被存储为 JSON 文件,通常存放在你指定的文件路径中。你可以在
少量节点的set_facts开启缓存并不会有效果,但对于大量节点,会有明显加速
#默认会获取变量
ansible ubuntu -m setup
#查看生成的配置文件,这就是setup模块获取的结果信息
ls /tmp/107.151.199.209
redis插件:- 存储位置:缓存变量存储在 Redis 数据库中。
- 配置示例:
[defaults] fact_caching = redis fact_caching_connection = localhost:6379 fact_caching_timeout = 86400 - 存储方式:Redis 数据库中,每个主机的 facts 会存储为键值对,键名通常是主机名,值是对应的 facts 数据。
#安装redis-server
apt install redis-server
systemctl status redis-server
#测试redis连接状态
redis-cli ping
#ansible使用redis需要pip安装redis包
pip3 install redis
#默认会获取变量
ansible ubuntu -m setup
#确实将内容缓存起来了,可惜找到半天资料,未能找到相关的ansible可以直接使用此缓存的方法,可能是水平不够吧
#原以为会存储到redis里生成大量的key,可以供ansible直接使用,结果是存储成string字符串类型,这样引用起来,势必要使用你正则或者其他转换工具介入,这样会更麻烦,后面再看看如何处理缓存的数据吧
redic-cli
>keys *
1) "ansible_cache_keys"
2) "ansible_facts107.151.199.209"
memcached插件:- 存储位置:缓存变量存储在 Memcached 中。
- 配置示例:
[defaults] fact_caching = memcached fact_caching_connection = 127.0.0.1:11211 fact_caching_timeout = 86400 - 存储方式:类似于 Redis,Memcached 中每个主机的 facts 存储为键值对。
pip3 install python-memcached
pip3 install pymemcache
#默认会获取变量
ansible ubuntu -m setup
# 这里很可惜,没有在 memcached中获取到指定的key,memcached真不太友好,也可能是我开发水平不够,后面再找找memcache的使用情况吧
总结
- 存储位置:缓存的变量存储位置取决于你使用的缓存插件,如
jsonfile插件会将变量存储在指定目录下的 JSON 文件中,而redis和memcached则将变量存储在各自的数据库中,redis是直接将变量存储为字符串,想直接使用可能有些麻烦,而memcached不知道为什么没有获取到对应key,后面再检查下 - 查询方式:可以直接访问存储目录或数据库来查询缓存的变量,也可以通过 Ansible Playbook 来加载和查看这些缓存的变量。
浙公网安备 33010602011771号