これは Ansible Advent Calendar 2020 (Adventar版) の 8日目の記事です。
はじめに
Ansible ではループ処理する際に、with_sequence
や range
によって、連番を生成できます。
たとえば、user1
、user2
....user99
のようにユーザーを作成したいときに便利です。
通常は単一の範囲しか指定できませんが、工夫すると 101〜105
と 201〜205
のように、複数の範囲の連番を指定できます。
印刷範囲のページ数を指定するようなイメージです。
この記事では簡単なサンプルでご紹介します。
- 動作確認環境
- Ansible 2.9.14
サンプル Playbook
user101
〜 user105
と user201
〜 user205
を表示する Playbook です。
--- - hosts: localhost gather_facts: false connection: local tasks: - name: debug seq debug: msg: "user{{ item }}" with_items: - "{{ range(101, 105 + 1) | list }}" - "{{ range(201, 205 + 1) | list }}"
101
〜 105
の range と 201
〜 205
の range をリストで定義して、with_items
で flatten することで、複数の範囲の連番を指定できます。この書き方の場合は、with_items
は loop
に置き換えられませんのでご注意ください(参考)。
loop
にしたい場合は、以下のような書き方にします。
#...(略)... - name: debug seq debug: msg: "user{{ item }}" loop: "{{ (range(101, 105 + 1) | list) + (range(201, 205 + 1) | list) }}"
実行結果
Playbook を実行します。
$ ansible-playbook -i localhsot, loop.yml PLAY [localhost] **************************************************************************************************** TASK [debug seq] **************************************************************************************************** ok: [localhost] => (item=101) => { "msg": "user101" } ok: [localhost] => (item=102) => { "msg": "user102" } ok: [localhost] => (item=103) => { "msg": "user103" } ok: [localhost] => (item=104) => { "msg": "user104" } ok: [localhost] => (item=105) => { "msg": "user105" } ok: [localhost] => (item=201) => { "msg": "user201" } ok: [localhost] => (item=202) => { "msg": "user202" } ok: [localhost] => (item=203) => { "msg": "user203" } ok: [localhost] => (item=204) => { "msg": "user204" } ok: [localhost] => (item=205) => { "msg": "user205" } PLAY RECAP ********************************************************************************************************** localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
user101
〜 user105
と user201
〜 user205
が表示されました。