2012-02-05 1 views
3

Предоставление следующей fabfile:Есть ли способ провести развертывание развертывания в файлах ткани?

from fabric.api import env, run 

env.user = 'implicit_user' 
env.hosts = ['host1', '[email protected]', 'host3'] 

def print_user(): 
    with hide('running'): 
     run('echo "%(user)s"' % env) 

Когда мы запускаем fab print_user, мы получаем:

[host1] out: implicit_user 
[[email protected]] 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...> 
[[email protected]] 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. 

Есть ли способ сделать это? Как мне настроить свой файл для его достижения?

ответ

5

Ваш файл уже выполняется последовательно, если вы не указали параллель через командную строку. Чтобы быть явным в этом последовательном исполнении, используйте @serial decorator.

Вы хотите, чтобы эта задержка имела дело с отказом? warn_only=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 или просто спать в конце ваших задач.

+1

Спасибо. Это потрясающе;) Я даю ему попробовать. –