给出以下 fabfile:
from fabric.api import env, run
env.user = 'implicit_user'
env.hosts = ['host1', 'explicit_user@host2', 'host3']
def print_user():
with hide('running'):
run('echo "%(user)s"' % env)
当我们跑步时fab print_user
,我们得到:
[host1] out: implicit_user
[explicit_user@host2] out: explicit_user
[host3] out: implicit_user
Done.
Disconnecting from host1... done.
Disconnecting from host2... done.
Disconnecting from host3... done.
然而,我非常愿意进行整个fab print_user
按顺序进行,中间间隔 10 秒,以确保前一个主机在下一个主机开始操作之前完成其操作:
[host1] out: implicit_user
<10 seconds here...>
[explicit_user@host2] out: explicit_user
<10 seconds here...>
[host3] out: implicit_user
<10 seconds here...>
Done.
Disconnecting from host1... done.
Disconnecting from host2... done.
Disconnecting from host3... done.
有办法做到吗?我应该如何调整我的 fabfile 来实现它?
除非您通过命令行指定并行,否则您的文件已经按顺序执行。要明确此顺序执行,请使用@串行装饰器 .
您希望通过延迟来处理失败吗?warn_only=False
将导致您的顺序任务之一失败以终止该任务(其他主机将不会运行该任务)。这也可以在下面的示例中看到,其中一旦运行 false(它具有失败退出状态),其余主机就不会运行该任务。
from fabric.api import *
from fabric.decorators import hosts, parallel, serial
import random
@task
@serial
@with_settings(warn_only=False)
def maybe_fail():
if random.randint(0,3) == 0:
run("/bin/false")
else:
run("/bin/true")
如果你真的想要这 10 秒的延迟,我想你可以制作一个休眠 10 秒的装饰器,或者只是在任务结束时休眠。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)