2014-01-20 64 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问题的解决方案,则应该包含一个指向它的链接。 –