2017-09-01 76 views
1

我正在写一个小型的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以同样的方式,因为它会与source.dat.j2发生。 有没有一个可以在我的模块中重用的功能强大的功能/方法/模块,还是我必须实现自己的查找?

回答

0

我想答案比你想象的要深一点。

要使用本地文件,您必须为您的模块编写一个操作插件,以便在远程主机上执行模块之前在控制主机上执行所有准备工作。有一个关于它的细小音符the docs

对于像文件/复制/模板模块,一些工作需要的模块对目标执行之前要对主做。动作插件首先在主控上执行,然后可以根据需要在目标上执行正常模块。

而且还有ActionBase类的helper方法_find_needle预期路径(角色,包括等)来搜索文件。

您可以在template动作插件中看到示例用法。

+0

感谢您提及动作插件!这可能会花费我相当一段时间... – briconaut

0

看起来你想使用_find_needlelib/ansible/plugins/action/init.py

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. 
''' 
相关问题