Skip to content

Instantly share code, notes, and snippets.

@shichi-at-nttr
Last active September 20, 2017 15:07
Show Gist options
  • Save shichi-at-nttr/5a25151b2be9411af5b1be7569dcefd6 to your computer and use it in GitHub Desktop.
Save shichi-at-nttr/5a25151b2be9411af5b1be7569dcefd6 to your computer and use it in GitHub Desktop.

Ansibleにおける一般的なタスクのリトライ処理

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: で解決してもよかったが、待ち時間が明確でなかったために失敗時にリトライすることとした。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment