Jinja2テンプレート
増えたらToolsとかに移すかも
Templating (Jinja2) — Ansible Documentation
オンラインパーサー
TTL255 J2Live - Live Jinja2 Parser
変数
変数宣言
変数
{% set hogehoge = 'foobar' %}
配列
{% set array = [] %}
配列要素の追加
↑のarray
に要素を追加したい場合、Ansibleではarray.append()
は使えるように見えて使えない。
↓のように書く。
{% set _ = array.append('item') %}
これに
do
を追加して{% do list.append(1) %}
と書けるようにする Expression Statement という拡張もあるらしいのですが Ansible では有効化されていませんので、面倒ですが{% if list.append(1) %}{% endif %}
や{% set _ = list.append(1) %}
のように他のステートメントの中で評価したい式を書く必要があります。
辞書をリストの要素として追加は普通にOK
{% set _ = host_list.append({'host': host, 'name': hostvars[host].tags.User }) %}
制御構文
ループ
リストに対するfor
構文は、foreach式で配列要素をループ毎に処理できる
{% for item in array_value %}
...
{% endfor %}
array_value
の配列要素がitem
にセットされてループ処理される。
ループインデックス
ループブロック内でloop.index0
という変数参照でループインデックスを取り出せる(ゼロオリジン)
コメント
{# comment #}
複数行もOK
{#
{% for item in list %}
{% endfor %}
#}
lookupプラグイン実行
playbook等で書くときと同じ要領で記述可能
{{ lookup('pipe', 'date +%s') }}
指定部分へのフィルタの実行
indent()
{% filter indent(4, true) %}
{{ sample_string }}
{% endfilter %}
---
- hosts: localhost
gather_facts: false
vars:
sample_string: |
int main() {
return 0;
}
tasks:
- name: j2 saple
template:
src: indent_sample.txt.j2
dest: /var/tmp/indent_sample.txt
実行結果は以下の通り、スペース4文字分のインデントが入る。
int main() {
return 0;
}