私は現在、この一般的なフォーマットに従い、cronジョブを介して実行されるAnsibleプレイを作成しています。
pre_tasks:
-Configuration / package installation
tasks:
-Work with installed packages
post_tasks:
-Cleanup / uninstall packages
上記の問題は、tasks
セクションのコマンドが失敗することがあり、実行するとpost_tasks
セクションが実行されず、システムが乱雑な状態になることです。失敗または致命的なエラーが発生した場合でも、post_tasks
のコマンドを強制的に実行することは可能ですか?
私の現在のアプローチは、tasks
セクションの下のすべてにignore_errors: yes
を適用し、次に各タスクにwhen:
条件を適用して、前のコマンドが成功したかどうかを個別にチェックすることです。
この解決策はハックのように見えますが、ignore_errors: yes
が設定されていても、タスクで致命的なエラーが発生した場合は、プレイ全体がすぐに失敗するため、さらに悪化します。リーチプレイの実行後に手動でチェックする。
tasks
が失敗した場合でも、post_tasks
が引き続き実行されるという保証が必要です。 bashスクリプトラッパーに頼ることなくこれを行う方法があると確信しています。
この機能は、Ansible 2.0で利用可能になりました。
これはドキュメントです 新しいスタンザマーカーblock
、rescue
、およびalways
の場合。
ハンドラー( http://docs.ansible.com/ansible/playbooks_intro.html )を使用して設定する必要があります。
force_handlers:true
KubeNowの統合テストをご覧ください( https://github.com/kubenow/KubeNow/blob/master/test/integration-test.yml )。