Não é possível fazer Ansible esperar que um servidor seja reinicializado e continuar o playbook para funcionar

4

Estou criando um manual para instalar um software e preciso reiniciar o servidor no meio do manual.

Eu preciso que meu host Ansible aguarde até que o servidor esteja de volta e execute o restante das minhas tarefas, mas isso não está acontecendo.

Estas são minhas tarefas Ansible relacionadas à reinicialização e espera:

...
- name: restart server
  shell: shutdown -r now
  async: 1
  poll: 0
  become: yes
  become_method: sudo
  ignore_errors: true
- name: waiting for server to come back after reboot
  local_action: wait_for host={{ ansible_ssh_host }} state=started port=22 delay=30 timeout=300 connect_timeout=15
....

Esta é a saída da execução do meu manual:

...

TASK [restart server] **********************************************************
fatal: [X.X.X.X]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true}
    to retry, use: --limit @ansible_pb.retry

PLAY RECAP *********************************************************************
X.X.X.X               : ok=2    changed=0    unreachable=1    failed=0

Alguma ideia do que está errado e como posso corrigi-lo?

    
por Manuel Sopena Ballesteros 29.07.2016 / 07:47

2 respostas

7

Este é um problema comumente conhecido. Consulte Reinicialize um servidor e espere que ele volte . Desde Ansible 1.9.4 SSH perde a conexão antes de prosseguir para a próxima tarefa.

Você precisa adicionar um atraso ( sleep ) antes do comando shutdown :

- name: restart server
  shell: sleep 2 && shutdown -r now
  async: 1
  poll: 0
  become: yes
  become_method: sudo
  ignore_errors: true
- name: waiting for server to come back after reboot
  wait_for_connection:
....
    
por 29.07.2016 / 07:52
0

No Ansible 2.7, o módulo reboot foi introduzido, o que resolve esse problema.

Você pode usar:

- name: restart server
  reboot:
    
por 08.11.2018 / 10:09

Tags