1. ホーム
  2. ansible

[解決済み] Ansibleのタスクが失敗する可能性がある場合、どのように再試行するのですか?

2022-03-12 01:35:09

質問

Ansibleのプレイで、データベースを再起動し、それに対していくつかの操作を行おうとしています。Restartコマンドは、再起動が開始されるとすぐに返され、データベースが稼働しているときには返されません。次のコマンドは、データベースへの接続を試行します。このコマンドは、データベースが起動していないときには失敗します。

2番目のコマンドを数回リトライしたい。最後の再試行が失敗した場合、私は私のプレーを失敗させたいと思います。

以下のようにリトライをすると

retries: 3
delay: 5

そうすると、最初のコマンド実行がすべて失敗してしまうので、リトライはまったく実行されません。そこで ignore_errors: yes しかし、この方法では、すべてのリトライが失敗しても、プレイはパスされます。成功するまで失敗を再試行し、最後の再試行から成功しない場合は失敗する簡単な方法はありますか?

解決方法は?

というあなたの主張が理解できません。 最初のコマンドの実行に失敗した "。Ansibleがこのように動作するとしたら、それは意味がありません。

次のようなタスクです。

- command: /usr/bin/false
  retries: 3
  delay: 3
  register: result
  until: result.rc == 0

を生成します。

TASK [command] ******************************************************************************************
FAILED - RETRYING: command (3 retries left).
FAILED - RETRYING: command (2 retries left).
FAILED - RETRYING: command (1 retries left).
fatal: [localhost]: FAILED! => {"attempts": 3, "changed": true, "cmd": ["/usr/bin/false"], "delta": "0:00:00.003883", "end": "2017-05-23 21:39:51.669623", "failed": true, "rc": 1, "start": "2017-05-23 21:39:51.665740", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}

ということで、まさにお望み通りのようです。