我正在 Ansible 中编写一个特定于 Playbook 的自定义模块。是否可以直接访问剧本变量,而不需要将其作为参数传递给任务?
这是不可能的,因为模块是远程执行的,除非显式传递,否则所有变量都不可用。
我有同样的问题 https://stackoverflow.com/questions/29026094/ansible-access-host-group-vars-from-within-custom-module不久前,Pruce P 在他的回答中提供了一个有趣的解决方法。
虽然我同时有另一个想法,但这只是理论上的,从未经过测试:除了普通模块之外,Ansible 还有一种特殊的模块:动作插件。 (...未记录)它们的使用方式与模块完全相同,但在本地执行。由于它们在本地运行,因此它们确实可以访问包含所有组/主机变量等的 Ansibles 运行程序对象。
很酷的是,您可以从操作插件以编程方式调用模块。因此,您可以有一个小的包装器操作插件,然后它调用实际模块并将所有(必需的)变量传递给它。由于它没有记录,您需要查看可用的插件。例如,这是一个调用模块的例子:assemble https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/action/assemble.py#L136.
我写过一些东西here https://gist.github.com/udondan/b730206056a018cf9838#file-include_vars_merged-py-L34它与来自 runner 对象的变量交互。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)