Fork me on GitHub


通过 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 文件形式存储,每个文件名通常对应于主机名。

少量节点的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 文件中,而 redismemcached 则将变量存储在各自的数据库中,redis是直接将变量存储为字符串,想直接使用可能有些麻烦,而memcached不知道为什么没有获取到对应key,后面再检查下
  • 查询方式:可以直接访问存储目录或数据库来查询缓存的变量,也可以通过 Ansible Playbook 来加载和查看这些缓存的变量。
posted on 2024-08-17 23:37  anyux  阅读(104)  评论(0)    收藏  举报