从 Ansible 模块访问 Ansible 事实。 Prefetch/Flush 在 Ansible 中?

Access Ansible facts from an Ansible module. Prefetch/Flush in Ansible?

Ansible 模块可以通过将自定义事实包含在其 JSON 输出中来生成自定义事实。下次在同一个 Ansible 运行 期间调用时,是否可以从同一个模块访问这些事实?这个想法是使用它们来预取某个东西的状态,呃...... class 的东西。在 Puppet 中称为 "resource type" 的东西。

或者是否有其他预取 Ansible 模块的方法?

不,除非你自己实现。模块只能访问那些已显式传递给模块的变量。这是因为模块是远程执行的,而客户端计算机上的 运行ner 中提供了所有事实。

Bruce P. suggested to use fact caching然后从模块中查询redis缓存

在您的情况下,它可能更简单,因为如果在同一 运行 期间第二次调用模块,您希望获得可用的值。您可以简单地将数据存储在一个临时文件中。

我有另一个想法来解决这个问题,但还没有机会测试它:可以创建一个与模块一起工作的动作插件。动作插件就像一个模块,但在本地执行,因此可以访问所有事实。您可以从动作插件中执行模块并传递所有可用的事实。如果我没记错的话 copy 就是一个很好的例子。有个copy module and a copy action plugin. The plugin then calls the module.

不过,最简单的事情就是将您的事实简单地传递给您的模块。

- your_module: your_fact={{ your_fact | default(False) }}
- your_module: your_fact={{ your_fact | default(False) }}

第一次执行时 your_fact 不存在,所以你传递 Falseyour_module 然后在第一次执行时创建 your_fact。所以在第二次调用时它会存在并在第二个任务中被传递。