在ansible模块中定位模板文件

时间:2017-09-01 08:31:38

标签: python ansible

我正在为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功能/方法/模块,或者我是否必须实现自己的查找?

2 个答案:

答案 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.
'''