shell:
の実行結果に基づくリトライ処理などのサンプルはよく見かけるが、
それ以外の各種のtaskがfailしたらリトライする場合のサンプルが見当たらなかったのでメモ。
- name: 何らかの処理とそのリトライ
XXXXX: name=XXXX state=present
register: result
until: result.failed is not defined
retries: 5
delay: 5
ここで2行目は何らかのansibleタスク。
taskの結果を register: result
すると、
changed
は必ずセットされる- 失敗した場合は
failed: true
がセットされる - 成功した場合は
failed:
自体がセットされない
アプリの初期セットアップで、RabbitMQのユーザ権限設定とExchange作成、Queue作成を 連続したtaskとして実行しようとしたが、失敗した。
ユーザ権限の設定後、Exchange作成までの間にwaitが必要。 Exchange作成後、Queue作成までにwaitが必要。
pause:
で解決してもよかったが、待ち時間が明確でなかったために失敗時にリトライすることとした。