逆引きマニュアル: Ansibleでリブートする方法

投稿日: 更新日:

やりたいこと

Ansibleを使ってリブートする方法です。

Ansible 2.7でrebootモジュールが追加

まだプレビューですが、対応しました。

前提条件

以下の環境で確認しています。

  • Ansible 2.5.0
  • CentOS 7 on Vagarant

概要

単に以下のようにrebootコマンドを使うと、 リブートはできますが、エラーになります

- command: /usr/sbin/reboot
  become: true

手順

いろいろな方法がありますが、 Reboot and Wait for · Issue #14413 · ansible/ansibleの以下の方法でOKでした。

    - name: reboot
      shell: "sleep 5 && reboot"
      async: 1
      poll: 0

    - name: wait
      wait_for_connection:
        connect_timeout: 20
        sleep: 5
        delay: 5
        timeout: 60

async, pollは、非同期実行を表します。

タスクを実行したあと完了を待つ必要がない場合に、poll=0を実行します。

Alternatively, if you do not need to wait on the task to complete, you may run the task asynchronously by specifying a poll value of 0:

wait_for_connetionは、2.3から入ったモジュールで、 リモート接続が利用可能になるまで待ちます。

wait_for_connection - Waits until remote system is reachable/usable — Ansible Documentation

パラメータは以下になります。

  • connection_timeout: (1回の)接続のタイムアウト時間
  • delay: 問い合わせ(ポーリング)開始までの時間
  • sleep: チェック間隔
  • timeout: タイムアウト時間

すなわち、以下のようになります。

  • 最初の5秒間は何もしない(delay)。
  • それから接続確認をしに行く。その時のタイムアウトは20秒(connect_timeout)。
  • 失敗したら5秒待つ(sleep)。
  • 60秒経っても接続できないとエラー(timeout)

補足

Ansibleの開発者が、開発の意向を示しています。

Proper reboot module as action plugin · Issue #16186 · ansible/ansible

マニュアル