Como posso testar se uma reinicialização foi concluída?

3

Atualmente, estou construindo uma ferramenta de gerenciamento de infra-estrutura que provisiona bare-metal e VMs etc. Temos uma VM de trabalho que executa comandos (via ansible) nos nós remotos por SSH.

Um dos passos requer a reinicialização de nós para aplicar algumas configurações. O processo de trabalho precisa executar mais comandos nos nós após a conclusão da reinicialização (deve ser feito de forma síncrona).

Minha pergunta é: como posso verificar se a reinicialização foi concluída?

Eu poderia adicionar um temporizador de espera (para esperar até que a reinicialização seja concluída), mas sinto que essa é uma solução ruim por vários motivos.

Outra opção é tentar o SSH para o nó remoto, do meu processo de trabalho, a cada 5 segundos ou mais, se falhar, continue tentando novamente até obter uma conexão bem-sucedida.

Existe outra maneira de fazer isso?

    
por grizzthedj 06.03.2017 / 15:55

2 respostas

0

Como você mencionou que está executando comandos via ansible, aqui está o que eu uso para reinicializações em um playbook (estou gerenciando máquinas do Ubuntu 14 / 16.04):

---
# execute like:
# ansible-playbook reboot.yaml --inventory hosts --extra-vars "hosts=all user=admin"
# or
# ansible-playbook reboot.yaml -i hosts -e "hosts=all user=admin"
- hosts: "{{ hosts }}"
  remote_user: "{{ user }}"
  become: yes
  tasks:
    # add this to to guard you from yourself ;)
    #- name: "ask for verification"
    #  pause:
    #    prompt: "Are you sure you want to restart all specified hosts?"

    # here comes the juicy part
    - name: "reboot hosts"
      shell: "sleep 2 && shutdown -r now 'Reboot triggered by Ansible'" # sleep 2 is needed, else this task might fail
      async: "1" # run asynchronously
      poll: "0" # don't ask for the status of the command, just fire and forget
      ignore_errors: yes # this command will get cut off by the reboot, so ignore errors
    - name: "wait for hosts to come up again"
      wait_for:
        host: "{{ inventory_hostname }}"
        port: "22" # wait for ssh as this is what is needed for ansible
        state: "started"
        delay: "120" # start checking after this amount of time
        timeout: "360" # give up after this amount of time
      delegate_to: "localhost" # check from the machine executing the playbook
...

Atualizar

O Ansible 2.7 agora tem um módulo de reinicialização , para que você não precise criar comandos por si só. O manual de cima se traduziria em:

---
# execute like:
# ansible-playbook reboot.yaml --inventory hosts --extra-vars "hosts=all user=admin"
# or
# ansible-playbook reboot.yaml -i hosts -e "hosts=all user=admin"
- hosts: "{{ hosts }}"
  remote_user: "{{ user }}"
  become: yes
  tasks:
    # add this to to guard you from yourself ;)
    #- name: "ask for verification"
    #  pause:
    #    prompt: "Are you sure you want to restart all specified hosts?"

    - name: "reboot hosts"
      reboot:
        msg: "Reboot triggered by Ansible"
        reboot_timeout: 360
...
    
por 07.03.2017 / 08:07
-2

Se você quiser verificar o status dos hosts, o tempo em que eles foram reinicializados e muitos outros parâmetros, então você deve usar um software de monitoramento como Zabbix , Nagios e etc.

O tempo de reinicialização pode ser verificado pelo parâmetro uptime system. Mostra o tempo desde a última inicialização. Você pode obtê-lo pelo comando uptime no host Linux / UNIX ou pelo protocolo SNMP remotamente quando o serviço snmpd está sendo executado no host:

snmpget -v2c -c public host_name_or_ip_address sysUpTime.0
    
por 06.03.2017 / 19:06

Tags