2012-02-16 5 views
7

私はFabric(v1.3.4)を使用して、さまざまなサーバーでKarafインスタンスをプロビジョニングしようとしています。 KarafはSSHサーバーを実装しています。だから、私は2つのsshデーモンが同じサーバー上で動いている。 1つはポート22に、もう1つは8101にあります。Fabricのfabric.tasks.execute()メソッドを使用して、別のホスト:ポートに接続できます。Fabric to SSHを同じサーバ上の2つの異なるポートに使用するにはどうすればよいですか?

問題は、私の最初のセッションが、env.userの明らかなハイジャックのために、2番目の接続の指定ユーザーによってハイジャックされることです。ここで

は、簡略化さfabfile.py例です:

from fabric.api import env, run 
from fabric.tasks import execute 

env.hosts = ['192.168.5.250'] 

def firstSSH(): 
     run("echo first") 
     executeHosts = [] 
     for host in env.hosts: 
       executeHosts.append("[email protected]" + host + ":8101") 
     execute(secondSSH, hosts=executeHosts) 
     run("echo first again") 

def secondSSH(): 
    run("echo second", shell=False, pty=False) 

2つの異なるポート上の2人の異なるユーザーを可能にして両SSHサーバは、同じサーバー上にあります。 「再び第1のエコー」方法

~/fabric$ fab firstSSH 
[192.168.5.250] Executing task 'firstSSH' 
[192.168.5.250] run: echo first 
[192.168.5.250] Login password: 
[192.168.5.250] out: first 

[[email protected]:8101] Executing task 'secondSSH' 
[[email protected]:8101] run: echo second 
[[email protected]:8101] Login password: 
[[email protected]:8101] out: second 

[[email protected]:8101] run: echo first again 

Done. 
Disconnecting from 192.168.5.250:8101... done. 
Disconnecting from [email protected] done. 

注実行()コマンドのホストに対して厳密に指定されたnotmmaleyユーザとして実行される:ここで出力されます。私が欲しいのは、指定されたuser @ host:portのnamedユーザーとしてexecute()コマンドを実行し、残りのタスクについて元のユーザーを私に返すことです。これはFabric/execute()で可能ですか、どこで間違っていますか?

答えて

5

これはBug 568で修正された問題で、これはFabric 1.4.1以降で修正されていると思います。最新の状態に更新し、問題が解決するかどうか確認してください。ループはそれを埋めるために

execute(secondSSH, hosts=["[email protected]%s:8101" % h for h in env.hosts]) 

あなたはどんなVARSを行っていないとして、または単純なために:側では、あなたがより良いあなたのホスト操作のためにこれを行うことによって提供される可能性があります注意してください。

+0

このバグリファレンスへのリンクありがとうございます。私はbitprophetと連絡を取り合っており、この動作は意図された機能によるものであったことが再掲されました。修正プログラムが解決策を提供するかもしれないように見えますが、これを試してみます。コードを強化する方法の提案にも感謝します。私はPythonを初めて使うので、これはとても役に立ちます! – mmaley

関連する問題