Python Fabric: сложная проблема с ssh

У меня есть система, которую я использую для запуска скрипта Fabric, который выполняет тестовые случаи в нескольких других клиентских системах (через launch_process.sh).

@task
@hosts('controller')
def run_script():
           run('/test/launch_process.sh')
           #below line didn't work 
           check_ps()


@task
@hosts('clients')
def check_ps():
           run('ps aux | grep myprocess')

когда мы делаем потрясающий run_script

он запускает процесс на других машинах (предположим, машина2, машина3). Теперь я хотел бы использовать команду «ps», чтобы подтвердить, запущен процесс или нет. Но check_ps() работает на самом «контроллере», а не на клиентах.

Любые мысли о том, как этого добиться?

(ищу решение, не используя вход без пароля и popen или paramiko)


person Aravindh    schedule 14.03.2012    source источник
comment
почему у вас разные аргументы для @hosts()?   -  person Dima Tisnek    schedule 14.03.2012
comment
Посмотрите здесь свой ответ: stackoverflow.com/questions/5346135/   -  person dhwthompson    schedule 14.03.2012


Ответы (1)


Теперь у Fabric есть функция execute(). http://docs.fabfile.org/en/1.4.0/api/core/tasks.html#fabric.tasks.execute

Это позволит вам сделать:

@task
@hosts('controller')
def run_script():
    run('/test/launch_process.sh')
    execute(check_ps, hosts=['client'])

И при этом @hosts на check_ps по-прежнему действителен в том случае, если вы хотите запустить его самостоятельно (без run_script())

person Morgan    schedule 14.03.2012