Reboot in Ansible 2.1.1.0
Sep 26, 2016 22:35 · 264 words · 2 minute read
После обновления Ansible
до версии 2.1.1.0 перестал работать довольно простой набор инструкций для удаленной перезагрузки хостов, который успешно работал в Ansible
версии 1.9. Давайте разберемся!
Работавший ранее плейбук reboot.yml
выглядел так:
---
- hosts: test
sudo: yes
tasks:
- name: Reboot host
command: shutdown -r now "Ansible system reboot"
async: 0
poll: 0
- name: Wait for the host to finish rebooting
local_action: wait_for host={{ inventory_hostname }} state=started
sudo: false
После обновления версии Ansible
выполнение данного набора инструкций завершается следующим образом:
ansible-playbook playbooks/reboot.yml
PLAY [test] ********************************************************************
TASK [setup] *******************************************************************
ok: [test]
TASK [Reboot host] *************************************************************
fatal: [test]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true}
to retry, use: --limit @playbooks/reboot.retry
PLAY RECAP *********************************************************************
test : ok=1 changed=0 unreachable=1 failed=0
Примечание. При этом удаленный хост перезагружается — можем в этом убедиться с помощью пинга в соседней консоли (или просто проверить uptime
удаленной машины).
Для корректного выполнения данного набора инструкций (перезагрузки и ожидания пока удаленный хост вновь появится онлайн) в текущей версии Ansible
необходимо привести плейбук к следующему виду:
---
- hosts: test
become: yes
tasks:
- name: Reboot host
shell: sleep 2 && /sbin/shutdown -r now "Ansible system reboot"
async: 1
poll: 0
- name: Wait for the host to finish rebooting
local_action: wait_for host={{ inventory_hostname }} port=22 delay=20 connect_timeout=200
become: false
delegate_to: localhost
Теперь плейбук выполнится с ожидаемым результатом:
ansible-playbook playbooks/reboot.yml
PLAY [test] ********************************************************************
TASK [setup] *******************************************************************
ok: [test]
TASK [Reboot host] *************************************************************
ok: [test]
TASK [Wait for the host to finish rebooting] ***********************************
ok: [test -> localhost]
PLAY RECAP *********************************************************************
test : ok=3 changed=0 unreachable=0 failed=0