2017-09-01 102 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. 
''' 
相關問題