やりたいこと
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