从 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
不存在,所以你传递 False
。 your_module
然后在第一次执行时创建 your_fact
。所以在第二次调用时它会存在并在第二个任务中被传递。
Ansible 模块可以通过将自定义事实包含在其 JSON 输出中来生成自定义事实。下次在同一个 Ansible 运行 期间调用时,是否可以从同一个模块访问这些事实?这个想法是使用它们来预取某个东西的状态,呃...... class 的东西。在 Puppet 中称为 "resource type" 的东西。
或者是否有其他预取 Ansible 模块的方法?
不,除非你自己实现。模块只能访问那些已显式传递给模块的变量。这是因为模块是远程执行的,而客户端计算机上的 运行ner 中提供了所有事实。
在您的情况下,它可能更简单,因为如果在同一 运行 期间第二次调用模块,您希望获得可用的值。您可以简单地将数据存储在一个临时文件中。
我有另一个想法来解决这个问题,但还没有机会测试它:可以创建一个与模块一起工作的动作插件。动作插件就像一个模块,但在本地执行,因此可以访问所有事实。您可以从动作插件中执行模块并传递所有可用的事实。如果我没记错的话 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
不存在,所以你传递 False
。 your_module
然后在第一次执行时创建 your_fact
。所以在第二次调用时它会存在并在第二个任务中被传递。