How to make Fabric continue running the next command after getting the exit status: 1?
exitstatus, fabric, python
Solution
since stackoverflow doesn't let me upvote Morgan's answer without more rep, I'll contribute more detail from http://docs.fabfile.org/en/1.4.1/api/core/context_managers.html#fabric.context_managers.settings
Outside the 'with settings' in the code below, behaviour will return to normal :
def my_task():
with settings(
hide('warnings', 'running', 'stdout', 'stderr'),
warn_only=True
):
if run('ls /etc/lsb-release'):
return 'Ubuntu'
elif run('ls /etc/redhat-release'):
return 'RedHat'
This is desirable since you can essentially 'catch' what would've been an error in one section without it being fatal, but leave errors fatal elsewhere.
Problem
I'm going to install check_mk plugin by writing a simple fabfile like this: ``` from fabric.api import env, run, roles, execute, parallel env.roledefs = { 'monitoring': ['192.168.3.118'], 'mk-agent': ['192.168.3.230', '192.168.3.231', '192.168.3.232'] } @roles('monitoring') def mk(): run('[ -f check_mk-1.1.12p7.tar.gz ] || wget http://mathias-kettner.de/download/check_mk-1.1.12p7.tar.gz') run('[ -d check_mk-1.1.12p7 ] || tar zxvf check_mk-1.1.12p7.tar.gz') run('cd check_mk-1.1.12p7 && sudo ./setup.sh') @parallel @roles('mk-agent') def mk_agent(): run('[ `rpm -qa | grep -c xinetd` -eq 0 ] && sudo yum -y install xinetd.x86_64') run('sudo rpm -ivh http://mathias-kettner.de/download/check_mk-agent-1.2.0b2-1.noarch.rpm') def check_mk(): execute(mk) execute(mk_agent) ``` But, as you can guess, if the `xinetd` package is already installed, Fabric will be stopped with below errors: ``` Fatal error: run() received nonzero return code 1 while executing! Requested: [ `rpm -qa | grep -c xinetd` -eq 0 ] && sudo yum -y install xinetd.x86_64 Executed: /bin/bash -l -c "[ \`rpm -qa | grep -c xinetd\` -eq 0 ] && sudo yum -y install xinetd.x86_64" Aborting. ``` Is there any solution in this situation?