web-dev-qa-db-ja.com

Ansible:タスクの失敗時にクリーンアップを実行する

私は現在、この一般的なフォーマットに従い、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スクリプトラッパーに頼ることなくこれを行う方法があると確信しています。

23
Mark

この機能は、Ansible 2.0で利用可能になりました。

これはドキュメントです 新しいスタンザマーカーblockrescue、およびalwaysの場合。

38
Marc Tamsky

ハンドラー( http://docs.ansible.com/ansible/playbooks_intro.html )を使用して設定する必要があります。

force_handlers:true

KubeNowの統合テストをご覧ください( https://github.com/kubenow/KubeNow/blob/master/test/integration-test.yml )。

1
Marco Capuccini