はじめに
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 を連想してしまいます。