LoginSignup
2
2

More than 3 years have passed since last update.

【Ansible】templateモジュールから独自関数を呼び出したい(macro)

Last updated at Posted at 2020-07-08

はじめに

<バージョン>
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

関連記事

【Ansible×NW自動化】templateモジュールでNW機器の設定を作りたい

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2