我正在为ansible写一个小python模块。我在其中一个参数中传递了一个文件名,我希望找到'此文件的方式与模板模块的src参数相同。
示例:
- name: Standard template usage
template:
src: source.dat.j2
dest: /home/user/target.dat
- name: My task using my own module
mynewmodule:
src: source.dat
dest: /home/user/target.dat
在这里,我想以与source.dat.j2相同的方式找到文件source.dat。 是否有可以在我的模块中重用的ansible功能/方法/模块,或者我是否必须实现自己的查找?
答案 0 :(得分:0)
我猜答案比你想象的要深一些。
要使用本地文件,您必须为模块编写一个动作插件,以便在远程主机上执行模块之前在控制主机上执行所有准备工作。在the docs中有一个关于它的小记:
对于文件/复制/模板等模块,在模块在目标上执行之前,需要在主服务器上完成一些工作。动作插件首先在主设备上执行,然后可以在必要时执行目标上的普通模块。
还有ActionBase
类的辅助方法_find_needle来搜索预期路径中的文件(角色,包括等)。
您可以在template动作插件中看到示例用法。
答案 1 :(得分:0)
您希望使用lib/ansible/plugins/action/init.py中的_find_needle
。
def _find_needle(self, dirname, needle):
'''
find a needle in haystack of paths, optionally using 'dirname' as a subdir.
This will build the ordered list of paths to search and pass them to dwim
to get back the first existing file found.
'''