てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] Jinja2 で同じ値のリピートを生成する

これは、Ansible Advent Calendar 2020(Adventor版)20日目の記事です。

はじめに

少しタイトルがわかりにくいかもしれませんが、例えばこうです。

  • abc という文字列を 3回繰り返し abcabcabc にする
  • [1, 2, 3] というリストを 3回繰り返し [1, 2, 3, 1, 2, 3, 1, 2, 3] にする

動作確認環境

  • Ansible 2.9.14
  • Jinja2 2.11.2

演算子 * を利用してリピート

言われてみればそりゃそうだという感じかもしれませんが、* を使います。

Jinja2 のドキュメントにも記載があります。 https://jinja.palletsprojects.com/en/master/templates/#math:titile

This can also be used to repeat a string multiple times. {{ '=' * 80 }} would print a bar of 80 equal signs.

おためし

---
- hosts: all
  gather_facts: false

  tasks:
    - name: repeat test1
      debug:
        msg: "{{ 'abc' * 3 }}"

    - name: repeat test2
      debug:
        msg: "{{ [1, 2, 3] * 3 }}"

    - name: repeat test3
      debug:
        msg: "{{ '-' * 20 }}"

実行結果

TASK [repeat test1] *********************************************
ok: [localhost] => {
    "msg": "abcabcabc"
}

TASK [repeat test2] *********************************************
ok: [localhost] => {
    "msg": [
        1,
        2,
        3,
        1,
        2,
        3,
        1,
        2,
        3
    ]
}

TASK [repeat test3] *********************************************
ok: [localhost] => {
    "msg": "------------------------------"
}

おわりに

Python 的にあれが使えるから Ansible (Jinja2)でも使えるかも」のと思いながら、Jinja2 のドキュメントを見ると新しい発見があるかもしれません。