この記事は Ansible Advent Calendar 2023 2日目の記事です。
はじめに
ある時、Jinja2 テンプレートを書いていて、試行錯誤しながら結果がどうなるか確認したい時がありました。
ansible.builtin.template
モジュールで、ファイルを生成してから確認する形でも良かったのですが、そのときはそれよりも Playbook の実行ログの中で確認したい気持ちが強かったです。ansible.builtin.template
モジュールの戻り値には生成結果が入りません。方法をその場で考えようととしたのですが、その時は思い浮かびませんでした。
少しあとで ansible.builtin.template
モジュールではなく、ansible.builtin.template
lookup プラグインの結果を ansible.buitlin.debug
モジュールで表示すればいいと気が付きました。
その方法を試したときのことをまとめます。
- 環境
- ansible-core 2.15.6
サンプル
Playbook は以下の通り。vars
で定義した変数を、テンプレートファイル test.j2
内で利用します。
--- - hosts: localhost gather_facts: false connection: local vars: fishes: - kingyo - ugui - oikawa tasks: - name: Debug Jinja2 template ansible.builtin.debug: msg: "{{ lookup('ansible.builtin.template', 'test.j2') }}"
Jinja2 テンプレートは以下の通り。
{% for i in fishes %} Hello {{ i }}. {% endfor %}
実行結果
まず普通に実行した結果です。
% ansible-playbook -i inventory.ini template.yml PLAY [localhost] ************************************************************************************************** TASK [Debug Jinja2 template] ************************************************************************************** ok: [localhost] => { "msg": "Hello kingyo.\nHello ugui.\nHello oikawa.\n" } PLAY RECAP ******************************************************************************************************** localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
一応生成結果が表示されてますね。が改行が入ると見にくいです。
コールバックプラグインを communitu.general.yaml
に変更します。ここでは アドホックな指定で。
% ANSIBLE_STDOUT_CALLBACK=community.general.yaml ansible-playbook -i inventory.ini template.yml PLAY [localhost] *************************************************************************************************** TASK [Debug Jinja2 template] ************************************************************************************** ok: [localhost] => msg: |- Hello kingyo. Hello ugui. Hello oikawa. PLAY RECAP ******************************************************************************************************** localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
改行されて見やすくなりました。
おわりに
今回は ansible.builtin.debug
モジュールと組み合わせましたが、ルックアッププラグインは他のモジュールのオプションや、vars
ディレクティブによる変数定義などにも組み込めるので、小回りが効きます。
Playbook 内に Jinaj2 構文を書くのを避けたい場合は、ansible.builtin.template
ルックアッププラグインを組み合わせるのも良さそうです。
参考
表示のさせ方あれこれ