从 Ansible 中的自定义模块访问剧本变量

San*_*ino 7 ansible

我正在 Ansible 中编写一个自定义模块,特定于 Playbook。是否可以直接访问 playbook 变量,而无需将其作为参数传递给任务?

udo*_*dan 5

这是不可能的,因为模块是远程执行的,除非明确传递,否则所有变量都不可用。

不久前我遇到了同样的问题,Pruce P 在他的回答中提供了一个有趣的解决方法。

虽然在此期间我有另一个想法,但这只是理论上的,从未测试过:除了普通模块之外,Ansible 还有一种特殊的模块:action plugins。(...没有记录)它们的使用与模块完全一样,但在本地执行。由于它们在本地运行,因此可以访问 Ansibles runner 对象,该对象包含所有组/主机变量等。

很酷的是,您可以从操作插件中以编程方式调用模块。所以你可以有一个小的包装器动作插件,然后调用实际的模块并将所有(必需的)变量传递给它。由于它没有记录,您需要查看可用的插件。例如,这里有一个调用模块的方法:assemble

我在这里写了一些与来自 runner 对象的 vars 交互的东西。