Try / Catch с rescue и always
Корректно обрабатывайте сбои
«Try / Catch с rescue и always» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Блоки получают защитный механизм
Сочетайте block с rescue и always, чтобы получить конструкции try, catch и finally для своих задач. Сбои становятся восстанавливаемыми. 🛟
Раздел rescue
Если какая-либо задача в блоке завершается с ошибкой, Ansible переходит к rescue и вместо неё запускает эти задачи — подобно предложению catch.
- block:
- ansible.builtin.command: /opt/risky-step
rescue:
- ansible.builtin.debug:
msg: "Step failed, recovering"always выполняется несмотря ни на что
Раздел always выполняется независимо от того, завершился блок успешно или с ошибкой. Он идеально подходит для очистки, например удаления временного файла.
- block:
- ansible.builtin.command: /opt/deploy
always:
- ansible.builtin.file:
path: /tmp/lock
state: absentВсе три элемента вместе
Используйте block, rescue и always как единую структуру: выполните работу, перехватите ошибки, а затем всегда завершите процесс корректно.
- block:
- ansible.builtin.command: /opt/deploy
rescue:
- ansible.builtin.debug:
msg: "Rolling back"
always:
- ansible.builtin.debug:
msg: "Done either way"Rescue сбрасывает состояние ошибки
Если rescue завершается успешно, узел больше не считается ошибочным. Плейбук продолжается так, будто блок выполнился успешно.
Порядок выполнения
Сначала выполняются задачи блока; при ошибке оставшаяся часть блока пропускается и запускается rescue. В любом случае always выполняется последним.
Если rescue тоже завершается с ошибкой
Если задача в rescue также завершается с ошибкой, узел помечается как ошибочный, но always всё равно выполняется до остановки плейбука для этого узла.
Изучение ошибки
Внутри rescue можно прочитать ansible_failed_task и ansible_failed_result, чтобы узнать, какая задача завершилась с ошибкой и почему.
- rescue:
- ansible.builtin.debug:
msg: "Failed task was {{ ansible_failed_task.name }}"Практическое применение: откат
Классический шаблон: выполнить развёртывание в block, отменить изменения в rescue, а затем перезапустить или разблокировать систему в always. Надёжное восстановление при каждом запуске.
Не просто скрытие ошибок
rescue предназначен для корректного восстановления, а не для замалчивания ошибок. Запишите сбой в журнал и исправьте состояние системы — не делайте вид, что ничего не произошло. ⚠️
Без rescue выполнение сразу останавливается
Без раздела rescue блок с ошибкой ведёт себя как любая задача с ошибкой: он немедленно останавливает выполнение плейбука для этого узла.
Быстрая проверка
Давайте проверим, как работает always.
Итоги
rescue перехватывает ошибки блока и восстанавливает узел, а always каждый раз выполняется для очистки. Try, catch и finally для Ansible. ✅
Часто задаваемые вопросы
Урок «Try / Catch с rescue и always» бесплатный?
Да — полный текст урока «Try / Catch с rescue и always» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Try / Catch с rescue и always»?
Корректно обрабатывайте сбои Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Try / Catch с rescue и always»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Группировка задач с block
- Try / Catch с rescue и always
- Управление сбоями: failed_when и ignore_errors
- Пользовательские проверки с модулем fail