一度に1つのホストでansibleを実行し、障害でブレークする方法


15

Ansible Playbookを手に入れて、いくつかの不安定なデバイスを順番に更新したいと思っています。を使用できますserial:1が、エラーが発生した場合はプレイブックを完全に停止し、エラーを蓄積する代わりに続行する前に修正できるようにします。

また、停止したホストと同じホストでプレイブックを再起動したいと思います。現在Ansible v2.0を使用していますが、そのような機能が新しいバージョンでのみ使用可能な場合は、新しいバージョンに切り替えることもできます。

回答:


15

障害が発生serial: 1し、ドキュメントに従って使用している場合、プレイブックは停止します

デフォルトでは、グループ内にまだ失敗していないホストがある限り、Ansibleはアクションの実行を継続します。

つまり、コミュニティではデフォルトの動作をめぐって混乱があり、1.8から2.1の間で変更された(またはバグがあった)ようです。

したがって、serial: 1十分でない場合は、次の追加設定を使用します。

max_failure_percentage: 0

上記のローリング更新など、状況によっては、障害の特定のしきい値に達したときに再生を中止することが望ましい場合があります。これを実現するために、バージョン1.3の時点で最大失敗率を設定できます...

==

プレイブックの再試行に関しては、次のようなエラーメッセージが表示されるはずです。

to retry, use: --limit @/home/user/site.retry

その--limitフラグを使用し、次回の実行時にansible-playbook、失敗した場所から続行します。

retry_files_enabled = False構成で設定しない限り、再試行ファイルが作成されます。

または、機能--start-at-taskする場合もあります。

ソース:

https://github.com/ansible/ansible/issues/1663

https://github.com/ansible/ansible/issues/16241

http://docs.ansible.com/ansible/playbooks_delegation.html#rolling-update-batch-size

http://docs.ansible.com/ansible/playbooks_delegation.html#maximum-failure-percentage

http://docs.ansible.com/ansible/intro_configuration.html#retry-files-enabled

http://docs.ansible.com/ansible/playbooks_startnstep.html#start-at-task


1
1.9と2.0の変更/バグに何が起こったのかをよく知っている人がいたら教えてください。この回答を更新します。
ウッドランドハンター

ええ、ansible 2.0が他のホストで障害が発生した場合、それらのホストで引き続き実行されることを知っています。シリアルを実行した場合、動作が異なるとは思わなかったと思います:1。それはあなたが言っていることですか?
ピーターターナー

それは正しいです。serial:1にその動作が必要であり、もしそうでない場合(??のため)max_failure_percentage:0も追加します。2.0には多くのバグがあったため、Ansibleをアップグレードすることもお勧めします。
ウッドランドハンター

実際、非常に多くのバグがあるため、2.0では.retryファイルが欠落しています!github.com/ansible/ansible/issues/13944
ウッドランドハンター

ええ、だから私はソースを常にパッチしている唯一の人ではありません。知っておくといいです。
ピーターターナー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.