qua*_*nta 14 python fabric exitstatus
我将通过编写一个简单的fabfile 来安装check_mk插件:
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)
Run Code Online (Sandbox Code Playgroud)
但是,正如您可以猜到的,如果xinetd已经安装了软件包,Fabric将停止并出现以下错误:
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.
Run Code Online (Sandbox Code Playgroud)
这种情况有什么解决方案吗?
pac*_*ist 18
因为stackoverflow不让我在没有更多代表的情况下支持摩根的答案,我将从http://docs.fabfile.org/en/1.4.1/api/core/context_managers.html#fabric.context_managers.settings提供更多细节.
在下面的代码中的'with settings'之外,行为将恢复正常:
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'
Run Code Online (Sandbox Code Playgroud)
这是可取的,因为你可以基本上"捕获"一个部分中的错误,而不会致命,但在其他地方留下致命的错误.
| 归档时间: |
|
| 查看次数: |
20717 次 |
| 最近记录: |