Ansible 剧本中无法访问事实缓存内容

Ansible 剧本中无法访问事实缓存内容

我已经成功为 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

您只需调整使用缓存值的时间,然后它们将再次被远程收集。

更多文档

关于

如果每次为了访问该缓存仍然必须经过整个生成过程,那么持久缓存有什么用呢?

如果有gathering_facts,该模块setup将通过 SSH 连接到远程节点,以收集其配置的信息。

如果fact_cache启用,信息将另外“存储在内存中”并存储在控制节点本地的“文件中”。

下次运行时可能无需再次远程收集信息,因此无需远程连接,无需远程收集,执行时间更快,资源消耗更少。如果请求的信息已经在本地可用,则模块setup只需读取本地文件并将其传输到内存中,以便在控制节点上进一步处理。

更多问答熟悉该主题gather_facts

相关内容