Ansibleのtemplateにカスタムフィルタを追加
Ansibleのtemplateモジュールではjinja2が使われているため、カスタムフィルタを登録して好きな処理を書ける。
templateはplaybookのパース時にも使われるので、Ansibleロード時点でグローバルなプラグインとして導入する必要がある。今のところロードするフィルタの切り替えはansible.cfgで切り替えるしか無いようだ。 (ドキュメントには ./libraryに置くことでロードできるらしいのだがcfgで上書きされているっぽい)
フィルタの登録はFilterModule().filters()
が返す辞書。
import socket class FilterModule(object): def filters(self): return {"A": socket.gethostbyname}
このファイルを適当な名前でfilter_pluginsフォルダに置くとansibleロード中に読み込まれる。
実際のパス指定はansible.cfgの
filter_plugins = /usr/share/ansible_plugins/filter_plugins