如何在其中一个主机列表上发生错误时阻止Fabric任务(在串行模式下)在其他主机上执行?

时间:2015-10-22 07:55:40

标签: python fabric

在串行模式下,当我的某个主机检测到错误时,我想在所有其他主机上取消该任务,但不想退出整个代码。

怎么做?

代码示例:

target_hosts = [host1, host2, host3]
execute(function, hosts=target_hosts)
print "Hello world"

如果host2发生错误,我不希望function继续host3,但仍希望打印Hello world

1 个答案:

答案 0 :(得分:0)

如果不知道你在function内想要做什么,找到正确的方法有点困难。据我所知,Fabric execute并没有提供任何错误处理,所以你必须自己做。试试这样的事情

#!/usr/bin/env python
from fabric.api import run, execute, settings

def fce():
    with settings(warn_only=True):
        if run('echoo $HOSTNAME').failed: # this will fail
            return False

    return True

target_hosts = [host1, host2]
for host in target_hosts:
    out = execute(fce, host=host)
    if not out[host]:
        break

print "Hello world"