Memo/Ansible/Jinja2

http://dexlab.net/pukiwiki/index.php?Memo/Ansible/Jinja2
 

Jinja2 template

  • pythonのテンプレートエンジン

loopコントロール

  • 通常の言語のような「break」「continue」が無いようだ。
  • 代わりに「for var in list if var == '' 」の構文がある
  • list中の'aa'だけを出力
  1. {% set list_var1 = ['aa','bb','cc'] %}
  2. {% for var1 in list_var1 if var1 == 'aa' %}
  3. {{ var1 }}
  4. {% endfor %}

jinja2での正規表現

regex_search, regex_findallが使えるようだ

  • 記事

jinja2テンプレートでの三項演算子

  • example_enabledがbooleanの場合、{{ example_enabled }} と記載すると 'True/False' が出力される。'yes/no'を出力するようにしたい。
  1. lineinfile:    dest=/tmp/example.conf    line={{ item }}    with_items:    - 'example_enabled={{ "yes" if example_enabled else "no" }}'
  • または example_enabled: 'yes' と明示的に文字列して定義する
  • playbook内での例: yum_proxy変数によって、present, absentを切り替える。
  1. ini_file:    dest: /etc/yum.conf    section: main    option: proxy    value: "{{ yum_proxy }}"    state: "{{ 'present' if yum_proxy != None else 'absent' }}"    backup: yes
  • v2.2.1.0: 「yum_proxy:」のように空変数だと、valueに「None」が入るのでabsentにしている。

Template テンプレート

  • 例: stateが未定義の時のデフォルトを「present」にする
  1. debug: msg="{{ item.state | default('present') }}"
  • 変数が空の場合。
  • 変数:「var1:」
  • template:「{{ var1 }}」
  • v1.9: 「None」
  • v2.0: 「」
  • ini_fileはv2.2.1.0でも「None」になる。モジュールによって違うようだ
  • コメント: {# ... #}
  • roles/example/tasks/main.yml
  1. - name: config file  template:    src: example.conf.j2    dest: /etc/example/example.conf    owner: root    group: root    mode: 0644    backup: yes
  • roles/example/templates/example.conf.j2
  1. {{ ansible_distribution }}
  • 他roleのテンプレートも参照できる。例:role:test1 から role:test2のテンプレートを参照
  1. cat roles/test1/tasks/main.yml
  2. - template: src=roles/test2/templates/text2.j2 dest=/tmp/test2.conf mode=0644
  • ansible_managed テンプレート展開時にansibleのシグネチャが入る。ファイルをansibleが管理しているというコメントを埋め込む事ができる。
  1. # {{ ansible_managed }}
  • 展開前
    1. {% if item1 != "" %}    item1={{ item1 }}{% endif %}{% if item2 != "" %}    item2={{ item2 }} {% endif %}
  • 展開後
    1.     item1=aaa
    2.     item2=bbb
  • ホワイトスペースの制御。制御構文の前後をそれぞれ別々に制御できる
  • {%- , -%} : ホワイトスペースを削除
  • {%+ , +%} : ホワイトスペースを追加
  • 変数の前後の空白削除: {{ var1 | trim }}

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-17 (金) 14:26:05 (4d)