我已经成功为 Ansible 启用了事实缓存,并且可以通过打开生成的 json 文件来验证内容,但是,当我运行一个将 playbook 级别 gather_facts 设置为关闭的任务时,我尝试了一些简单的操作,例如
tasks:
- name: should print cached facts..
ansible.builtin.debug:
var: ansible_facts
该值显示为未定义。我还尝试打印出来hostvars
以查看它们是否已在其他地方汇总。但我什么也没得到。
我实际上如何引用存储在事实缓存中的变量?
答案1
当我运行将剧本级别
gather_facts
设置为off
根据缓存插件
默认的缓存插件是内存插件,它仅缓存 Ansible 当前执行的数据。其他具有持久存储的插件可用于在运行期间缓存数据。
这意味着
事实缓存始终处于启用状态。但是,一次只能激活一个事实缓存插件
因此,如果您设置,gather_facts: false
您将无法访问文件中存储的事实。
启用事实缓存插件将使您能够配置插件、格式以及在本地文件中不再使用缓存事实并从远程节点重新读取的时间。
cat ansible.cfg
fact_caching = yaml
fact_caching_connection = /tmp/ansible/facts_cache
fact_caching_timeout = 129600 # in seconds
您只需调整使用缓存值的时间,然后它们将再次被远程收集。
更多文档
- Ansible 配置设置
CACHE_PLUGIN_TIMEOUT
默认值是86400
秒,一天
关于
如果每次为了访问该缓存仍然必须经过整个生成过程,那么持久缓存有什么用呢?
如果有gathering_facts
,该模块setup
将通过 SSH 连接到远程节点,以收集其配置的信息。
如果fact_cache
启用,信息将另外“存储在内存中”并存储在控制节点本地的“文件中”。
下次运行时可能无需再次远程收集信息,因此无需远程连接,无需远程收集,执行时间更快,资源消耗更少。如果请求的信息已经在本地可用,则模块setup
只需读取本地文件并将其传输到内存中,以便在控制节点上进一步处理。
更多问答熟悉该主题gather_facts