2017年12月9日土曜日

Ansibleで OS再起動後も task(playbook)を続ける

CentOSで  
yum: name='*' update_cache=yes state=latest
の後に再起動をしたくて、方法を探してました。
ググると、すぐにいくつかの方法が見つかるんだけど、こんなエラーが出てうまく動かせなかった。

TASK [common : restart system] *************************************************
fatal: [cent7-2]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Shared connection to 192.168.1.82 closed.\r\n", "unreachable": true}

その時の task の書き方がこんな感じ

- name: restart system
  command: shutdown -r now "Ansible triggered"
  async: 0
  poll: 0
  ignore_errors: true 
- name: wait for server to comeback
  local_action: wait_for host={{ inventory_hostname }} state=started delay=30 timeout=300 
で、問題を解決するため、さらに探して見つかった方法がこれ

https://stackoverflow.com/questions/29955605/how-to-reboot-centos-7-with-ansible
- name: restart system
  shell: |
    set timeout 10
    nohup bash -c "sleep 2s && reboot" &
- name: wait for server to comeback
  local_action: wait_for host={{ inventory_hostname }} state=started delay=30 timeout=60
- name: wait for comeback
  wait_for_connection:
    delay: 30
    timeout: 600

とりあえず、いい感じに動いてくれてます。

環境は
ansibleサーバ、ターゲットサーバ共に CentOS7.4
ansibleは ansible-2.4.1.0-1.el7.noarch