Когда я определяю задачу для запуска на нескольких удаленных серверах, если задача выполняется на сервере 1 и завершается с ошибкой, Fabric остановит и прервет задачу. Но я хочу, чтобы ткань игнорировала ошибку и запускала задачу на следующем сервере. Как я могу это сделать?
Например:
$ fab site1_service_gw
[site1rpt1] Executing task 'site1_service_gw'
[site1fep1] run: echo 'Nm123!@#' | sudo -S route
[site1fep1] err:
[site1fep1] err: We trust you have received the usual lecture from the local System
[site1fep1] err: Administrator. It usually boils down to these three things:
[site1fep1] err:
[site1fep1] err: #1) Respect the privacy of others.
[site1fep1] err: #2) Think before you type.
[site1fep1] err: #3) With great power comes great responsibility.
[site1fep1] err: root's password:
[site1fep1] err: sudo: route: command not found
Fatal error: run() encountered an error (return code 1) while executing 'echo 'Nm123!@#' | sudo -S route '
Aborting.
from fabric.api settings
Начиная с Fabric 1.5, есть ContextManager, который упрощает это:
Обновление: я еще раз подтвердил, что это работает в ipython, используя следующий код.
источник
with hide('everything'):
Вы также можете установить значение true для параметра warn_only всего скрипта с помощью
источник
Вы должны установить
abort_exception
переменную окружения и поймать исключение.Например:
Вы также можете установить его в блоке with. См. Документацию здесь .
источник
fabric.api.env
внутри своегоexcept
блока?env.abort_exception=MyException
чтобы я мог запустить свой собственный сбой. Это вроде как «работает», если я использую функцию вместо класса (удовлетворяет вызываемому запросуabort_exception
), но я все еще работаю над некоторыми другими проблемами с этим подходом.fabric.api.env
есть.По крайней мере, в Fabric 1.3.2 вы можете восстановить исключение, перехватив
SystemExit
исключение. Это полезно, если у вас есть более одной команды для запуска в пакете (например, развертывание) и вы хотите очистить, если одна из них не работает.источник
SystemExit
сообщение или код пользователя для получения более подробной информации.SystemExit
, установитьabort_exception
другое исключение, чтобы случайно не перехватить исключения, не имеющие ничего общего с Fabric. См. Мой ответ для примера: stackoverflow.com/a/27990242/901641В ткани 2.x вы можете просто использовать Invoke «s бежать с предупредит = True аргумент. В любом случае, invoke - это зависимость Fabric 2.x :
Изнутри задачи:
источник
В моем случае на Fabric> = 1.4 этот ответ был правильным.
Вы можете пропустить плохие хосты, добавив это:
Или передать
--skip-bad-hosts
флаг /источник