###はじめに
<バージョン>
ansible 2.9.1
templateモジュールを使っていると、独自関数を作って呼び出したい場面が出てくると思います。
jinja2にはmacroという機能があり、独自関数を書いたファイルを他のj2ファイルから呼び出して
使えるようですが、templateモジュールでも使えるのか実際にやってみます。
###参考ファイル
(1)Playbook
template_sample.j2
---
- name: template TEST
hosts: localhost
gather_facts: no
vars:
ansible_python_interpreter: /usr/bin/python3
tasks:
- name: 'template'
template:
src: base.j2 # macroを呼び出す元となるplaybook
dest: result.txt
(2)j2ファイル(base.j2:呼び出し元となるファイル)
1行目:このj2ファイルと同じディレクトリに入っている、macro.j2内にあるmacroを読み込む
2行目:macro.j2内にあるtest1という独自関数に変数を引き渡す
3行目:macro.j2内にあるtest2という独自関数に変数を引き渡す
base.j2
{% import "macro.j2" as macro %}
{{ macro.test1("Taro", "Tokyo") }}
{{ macro.test2("Hanako", "tennis") }}
(3)j2ファイル(macro.j2:独自関数が書かれたファイル)
関数の書き始めは「macro 関数名(変数1, 変数2,…)」として、
最後に「endmacro」で閉じましょう
macro.j2
{% macro test1(var1, var2)%}
My name is {{ var1 }}
I live in {{ var2 }}
{% endmacro %}
{% macro test2(var1, var2)%}
My name is {{ var1 }}
I like {{ var2 }}
{% endmacro %}
###実行結果
想定通り実行することが出来ました。
同じような記述は、macroファイルに切り出してスマートなtemplateを作りましょう。
result.txt
My name is Taro
I live in Tokyo
My name is Hanako
I like tennis