Есть ли способ провести развертывание покатого в файлах матрицы? - PullRequest
3 голосов
/ 05 февраля 2012

Предоставляя следующий файл:

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 для его достижения?

1 Ответ

5 голосов
/ 08 февраля 2012

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

Вы хотите, чтобы эта задержка имела дело с отказом?warn_only=False вызовет сбой в одной из ваших последовательных задач для завершения задачи (другие хосты не будут запускать задачу).Это также видно из приведенного ниже примера, где, как только запускается false (он имеет статус выхода из-за сбоя), оставшийся хост не запускает задачу.Вы могли бы сделать декоратор, который спит на 10 или просто спать в конце ваших задач.

...