この記事は Ansible Advent Calendar 2024 の 12日目の記事です。
はじめに
タスクを loop
で実行する際、ループを抜ける条件を指定する break_when
というキーワードが、ansible-core 2.18.0 で追加されました。
changelogから:
loop_control - add a break_when option to to break out of a task loop early based on Jinja2 expressions (#83442).
公式ドキュメント: Breaking out of a loop
せっかくなので試してみました。
検証環境:
- ansible-core 2.18.0
break_when
を試す
以下の Playbook で試します。1 から 5 までループしですが、3 まででループを終わらせるものです。
--- - name: Test Play hosts: localhost connection: local gather_facts: false vars: tasks: - name: Test break_when ansible.builtin.debug: msg: "{{ item }}" loop: - 1 - 2 - 3 - 4 - 5 loop_control: break_when: - item == 3
実行結果は以下のとおりです。
$ ansible-playbook -i localhost, break_when.yml PLAY [Test Play] *************************************************************************************************** TASK [Test break_when] ********************************************************************************************* ok: [localhost] => (item=1) => { "msg": 1 } ok: [localhost] => (item=2) => { "msg": 2 } ok: [localhost] => (item=3) => { "msg": 3 } PLAY RECAP ********************************************************************************************************* localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
3「まで」ループして、4 と 5 は処理されませんでした。skipにもならないのでログがすっきりしていますね。
おわりに
これまでこういう機能を使いたいことがあったようななかったような、という感じですが、もしかしたら今後使いたいときがくるかもしれません。