2012-07-22 11 views
5

Piszę skrypt, aby uruchomić eksperyment generowania obciążenia na kilku hostach. Mógłbym napisać skrypt basha, aby uruchomić wiele sesji ssh, ale miałem nadzieję, że użyję czegoś bardziej uporządkowanego. Ponieważ używam Pythona do większości moich skryptów, pomyślałem, że Fabric wygląda na dobrą opcję.Przekazywanie różnych argumentów do różnych hostów w Fabric

Jedynym problemem jest to, że za każdym razem muszę przekazać niewielką ilość danych specyficznych dla hosta (tak naprawdę tylko identyfikator lub licznik), a ja chciałbym je uruchomić równolegle.

Innymi słowy, chciałbym zrobić coś takiego, jak poniżej, gdzie numer_hosta jest inny (prawdopodobnie tylko inkrementowany) dla każdego hosta.

@parallel 
def launch(): 
    with cd('/working/dir'): 
     run("./start/script -id=%d", host_num) 

Czy to możliwe w Fabric? Jeśli nie, czy istnieje inne narzędzie, które mógłbym wykorzystać do wykonania tego samego?

Odpowiedz

3

Można sprawdzić przed użytkownikiem/hostem. Każde zadanie wie o środowisku są obecnie prowadzone w:

env.hosts = ['[email protected]', '[email protected]'] 

@task 
def test(): 
    print '%(user)[email protected]%(host)s' % (env) 

    if env.host == 'host1.com': 
     id = 1 
    elif ... 

    run('echo "%s"' % (id)) 

Zapraszam do napisania go w bardziej elegancki sposób :) (jedna sugestia będące słowniki wykorzystywane podobny do przypadku oświadczenia dla odnośnika ID)

+2

Dzięki. Szkoda, że ​​nie ma lepszego mechanizmu - ta metoda nie działa zbyt dobrze, jeśli chcesz uruchomić ten sam skrypt na różnych zestawach hosta. – bsowell

+0

Czy nadal będzie działać równolegle? Mam to samo wyzwanie, ale mam 20 hostów, które są wirowane w czasie wykonywania (wystąpienia AWS EC2). Tak więc nie sądzę, żeby działało trudne kodowanie instrukcji "if-then" z wyprzedzeniem. –

2

Jeśli chcesz przeprowadzić introspekcję na temat hosta, na którym pracujesz w ramach zadania, zasugeruję odwołanie do zmiennej env.host. Każde zadanie wie o jego stanie, ale równolegle nie współużytkują tego stanu, ponieważ wszystkie one działają jak widły. Do Twojej dyspozycji jest również number of other env vars.

Powiązane problemy