当主机列表之一发生错误时,如何防止在其他主机上执行 Fabric 任务(串行模式)?

How to prevent Fabric task (in serial mode) from being executed on other hosts when error occurs on one of the hosts list?

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

怎么做?

代码示例:

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

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

在不知道您在 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"