gpt4 book ai didi

python - 有没有办法在结构文件中进行滚动部署?

转载 作者:太空宇宙 更新时间:2023-11-03 14:31:57 26 4
gpt4 key购买 nike

提供以下 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 来实现它?

最佳答案

除非您通过命令行指定并行,否则您的文件已经按顺序执行。要明确说明此顺序执行,请使用 @serial decorator .

你想让这个延迟来处理失败吗? 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 秒或在任务结束时休眠的装饰器。

关于python - 有没有办法在结构文件中进行滚动部署?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9148443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com