はじめに
Ansible には、やや特殊な ansible.builtin.meta
というモジュールがあります。
このモジュールに、ロールの処理を正常のまま止めるキーワード end_role
が、ansible-core 2.18.0 で追加されました。
changelogから:
Add a new meta task end_role (#22286)
現状は、devel の公式ドキュメントの ansible.builtin.meta
のモジュールの説明に end_role
が記載れています。
end_role (added in Ansible 2.18) causes the currently executing role to end without failing the host(s).
せっかくなので試してみました。
検証環境:
- ansible-core 2.18.0
ansible.builtin.meta: end_role
を試す
まず2つのロールを用意します。それぞれ、ちょとした debug
を仕込んでいます。
role1
の方に ansible.builtin.meta: end_role
を挟んでいます。これで role1
の次のタスク Task 1-2
が実行されないことを期待しています。
roles/role1/tasks/main.yml
:
--- - name: Task 1-1 ansible.builtin.debug: msg: 1-1 - name: End role ansible.builtin.meta: end_role # 今回のポイント - name: Task 1-2 # これは実行されない想定 ansible.builtin.debug: msg: 1-2
roles/role2/tasks/main.yml
--- - name: Task 2-1 ansible.builtin.debug: msg: 2-1
Playbook はこちら。ただ上述の2つのロールをインポートするだけです。
--- - name: Test play for end_role hosts: localhost gather_facts: false tasks: - name: Import role role1 ansible.builtin.import_role: name: role1 - name: Import role role2 ansible.builtin.import_role: name: role2
それでは実行します。
% ansible-playbook -i localhost, import_role.yml PLAY [Test play for end_role] ************************************************************************************* TASK [role1 : Task 1-1] ******************************************************************************************* ok: [localhost] => { "msg": "1-1" } TASK [role1 : End role] ******************************************************************************************* TASK [role2 : Task 2-1] ******************************************************************************************* ok: [localhost] => { "msg": "2-1" } PLAY RECAP ******************************************************************************************************** localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
期待通り role1
内の Task 1-2
は実行されず、次のロールである role2
の処理は実行されました。
なお、今回 end_role
を仕込んだ場所に、代わりに end_play
を仕込むと、Task 1-2
はもちろん、role2
の処理も実行されません。この比較がわかりやすいと思います。
おわりに
完全に余談ですが 「エンドロール」と聞くと映画の最後とかの end roll を連想してしまいます。