2014-01-20 62 views
0

我想通過Python腳本在多個遠程主機上並行運行一個方法。 我有他們的證件(ip,usr,pass)。 爲了做到這一點,我用@parallel來裝飾方法,並通過​​在那裏給所有主機。 我的問題是如何爲每個任務設置env.usr,env.password? 這裏是我的代碼示例:並行運行在結構python

class deployment() 

    __init__(): 
     self.hosts = read_ips_from_csv 

    def do_something(self) 
     run(remote_command) 

    def run_remote(self,func): 
     execute(func,hosts = self.hosts) 

    def deploy(self): 
     run_remote(self.do_something) 

main(): 

my_deploy = deployment() 
my_deploy.deploy() 

的問題是如何設置每個主機的env參數do_something()

非常感謝您的回答!

回答

0
  • 至少對於登錄,這可以與主機名一起發送,如How to set target hosts in Fabric file中所述。
  • 我還沒有找到一個簡單的方法來做到這一點的密碼。這當然是猴子可以修補的。

注意首選的方式做到這一點是使用SSH密鑰以幫助你在一個非常簡單的方法擺脫這一切

+0

請注意,首選方法是使用SSH密鑰,以幫助您以非常簡單的方式擺脫所有這些情況。你能澄清嗎? – Nuvi

+0

SSH密鑰允許您使用您決定的相同密碼登錄多個受密碼保護的ssh帳戶。 ssh密鑰的使用歸結爲生成一個ssh密鑰,將其公共版本放在每個服務器上,並將'env.key_filename =「〜/ .ssh/id_rsa」'添加到你的fabfile中。有關ssh密鑰的更多信息,Google是你的朋友(這個盒子對於這樣的討論感覺太小了))... – Oct

+0

謝謝!我這次解決了它,但一定會看你的建議。 – Nuvi

2

好了,我這是怎麼解決這個問題(發現它在另一問題https://stackoverflow.com/a/5568219/3216763): 我調用execute這樣前加入env.hosts和env密碼:

def run_remote(self,func): 
    env.hosts = ['[email protected]:port1', '[email protected]'] 
    env.passwords = {'[email protected]:port1': 'password1', '[email protected]': 'password2'} 
    execute(func) 

花了相當的時間就可以了,所以也許這將幫助別人。

+0

如果您發現另一個stackoverflow問題的解決方案,則應該包含一個指向它的鏈接。 –