てくなべ (tekunabe)

ansible / network / automation

[Ansible] user01、user02・・のように数値を任意の桁数にゼロパディングする

はじめに

なにか連番を生成する際に、user1、user2・・user10 ではなく、user01、user02・・のように 特定の桁数でゼロパディングしたいことはないでしょうか。

Jinja2 の filter でフォーマットするのが便利です。

  • 動作確認環境
    • Ansible 2.9.9
    • Jinja2 2.11.2

サンプル1: 簡単な例(単一の値)

10進数を2桁で揃えたいときは %02d です。

- hosts: localhost
  connection: local
  gather_facts: false

  tasks:
    - debug:
        msg: "{{ 'user%02d' | format(1) }}"

実行結果

TASK [debug] **********************************************************************************
ok: [localhost] => {
    "msg": "user01"
}

サンプル2: 連番

- hosts: localhost
  connection: local
  gather_facts: false

  tasks:
    - debug:
        msg: "{{ 'user%02d' | format(item) }}"
      loop: "{{ range(1, 10 + 1 , 1)| list }}"

実行結果

TASK [debug] **********************************************************************************
ok: [localhost] => (item=1) => {
    "msg": "user01"
}
ok: [localhost] => (item=2) => {
    "msg": "user02"
}
ok: [localhost] => (item=3) => {
    "msg": "user03"
}
ok: [localhost] => (item=4) => {
    "msg": "user04"
}
ok: [localhost] => (item=5) => {
    "msg": "user05"
}
ok: [localhost] => (item=6) => {
    "msg": "user06"
}
ok: [localhost] => (item=7) => {
    "msg": "user07"
}
ok: [localhost] => (item=8) => {
    "msg": "user08"
}
ok: [localhost] => (item=9) => {
    "msg": "user09"
}
ok: [localhost] => (item=10) => {
    "msg": "user10"
}