Comments 14
Можно еще проверять конфиг
- name: "Validate configs"
ansible.builtin.shell: nginx nginx -t
Сами-то свой плейбук пробовали запускать?
Теперь, если Nginx не запустится, Ansible сам вернёт старую конфигурацию и перезапустит сервис.
Абсолютно нет, потому что handler'ы отработают только после полного завершения плейбука — намного позже чем выполнение этого block
Спасибо за замечание — вы абсолютно правы: по умолчанию Ansible действительно запускает хендлеры в конце плейбука — и если использовать notify
без flush_handlers
, то nginx
перезапустится слишком поздно, и rescue
не сработает вовремя.
Этот нюанс я учёл и обновил статью — теперь в примерах после notify
добавлен шаг meta: flush_handlers
, чтобы перезапуск происходил сразу, а не в конце.
Но свой плейбук вы так и не попробовали запустить, потому что он теперь выдаёт другую ошибку "dict object has no attribute"
(и даже если её исправить, потом будут ещё третья и четвёртая ошибки, про которые я специально не стану ничего писать, чтобы вы всё-таки сами запустили свой плейбук)
А раскатить с --check
и потом посмотреть выдачу (не ругается ли ансибл) не проще? Ошибки в конфиге nginx, по крайней мере, так вполне себе ловятся...
Я думал что все для nginx делают хендлеры сначала nginx -t, и если успешно то уже nginx -s reload. А systrmctl restart nginx даже вручную никто не делает. Для puppet, terraform у меня такой же подход - встроенными средствами самого приложения сделать валидацию и только если она успешна то принимать конфигурацию
Ну есть же у модуля параметр validate, и не нужно городить блоки. Блоки безусловно отличная и очень полезная штука, но в данном конкретном примере лучше вписывается validate
Возможно, я не совсем понимаю Ansible... Но, где там создание резервной копии перед обновлением конфигурации?
Но, где там создание резервной копии перед обновлением конфигурации?
backup: true в блоке ansible.builtin.copy. Перед тем как копируется новый конфиг, старый будет переименован с указанием даты в названии. Таким образом в папке будет 2 конфига, один новый, а второй - это переименованный старый.
Если захочется восстановить конфигурацию, то новый файл удаляется, а старый обратно переименовывается в nginx.conf
Как настроить автоматический откат в Ansible