雑記

インフラのことだったりプログラムのことだったりどうでもいいこと書いたり。要は雑記。

Ansibleでリトライ処理をする

例えばAnsibleでTomcatを起動したとき、確認のためにhttpでアクセスして確認したいとします。 curlでローカルにアクセス、失敗したら数秒後に再度アクセスして確認という処理をしたかったのですが、 Ansibleでそんなのないよなーって思って探してみたらありましたよ。

Do-Until Loops

http://docs.ansible.com/playbooks_loops.html#do-until-loops

untilがloopから抜ける条件

retriesがリトライ回数

delayがスリープの秒数

ですね

サンプル

さっきの仕様を実現するとしたら以下ですね。

- shell: curl -o /dev/null -w %{http_code} http://localhost:8080/ 2> /dev/null
  register: result
  until: result.stdout.find('200') != -1
  retries: 6
  delay: 20

ステータスコードが200以外だったら20秒後に再度リトライします。 6回繰り返して全て失敗したらエラーです。

意外と利用シーンは多めかもですね。活用したいと思います。