Перезагрузка хоста с помошью Ansible не сложная задача.

Предполагаются следующие шаги:

  • SSH подключение на хост
  • Перезагрузите хост
  • Отключитесь, прежде чем хост закроет ваше ssh-соединение
  • Подождите некоторое количество секунд, чтобы убедиться, что хост действительно выключен
  • Попробуйте подключиться по ssh к хосту и выполнить команду
  • Повторите попытку ssh, пока она не сработает

Все кажется достаточно ясным, но если Вы гуглили этот вопрос, вы скорее всего оказались на StackExchange, где дают много не совсем правильных ответов с 2015 года (и один правильный ответ).

Некоторые люди предлагают проверить порт 22, но только потому, что ssh что-то слушает, не означает, что он находится в состоянии, когда он принимает соединения.

Правильный ответ-использовать Ansible версии 2.7 или выше. 2.7 где ввел команду перезагрузки — reboot, и теперь все, что вам нужно сделать, это добавить это в свой плейбук:

- name: Reboot host and wait for it to restart
  reboot:
    msg: "Reboot initiated by Ansible"
    connect_timeout: 5
    reboot_timeout: 600
    pre_reboot_delay: 0
    post_reboot_delay: 30
    test_command: whoami

Этот playbook выполнит следующее:

  • Перезагрузит хост
  • Подождет 30 секунд
  • Попытается подключиться через SSH и запустить whoami
  • Отключится через 5 секунд, если не сработает ssh
  • Будет продолжать пытаться подключиться в течение 10 минут (600 секунд)

Добавьте директиву:

  notify: Reboot host and wait for it to restart

… в любой команде Ansible, которая требует перезагрузки после изменения  хост будет перезагружен, когда playbook завершится, а затем Ansible будет ждать, пока хост не станет доступным, и ssh будет работать, прежде чем перейти к следующему playbookу.

Если вам нужно перезагрузиться на полпути через playbook вы можете заставить все задачи выполниться с помощью команды:

- name: Reboot if necessary
  meta: flush_handlers

Я иногда делаю это, чтобы что-то изменить, заставить машину перезагрузиться, а затем проверить, что изменения вступили в силу и все в том же playbook.

Надеюсь, вам это помогло.

 

 

Please follow and like us:

Добавить комментарий