追加の接続を確立せずに、Fabricを使用してローカルでコマンドを実行したい。
fabric 2でこれを行うにはどうすればよいですか? ... documentation は、例を示すのに欠けているようです。
ファブリック2でlocal
コマンドを削除するという設計上の決定はPITA IMHOですが、Context
の代わりにInvokeのConnection
を使用してシミュレーションすることができました。
from fabric import Connection
from invoke.context import Context
@task
def hostname(c):
c.run('hostname')
@task
def test(c):
conn = Connection('user@Host')
hostname(conn)
local_ctx = Context(c.config) # can be passed into @task;
# Connection is a subclass of Context
hostname(local_ctx)
run、Sudo、およびlocalは同じように実行されます。
from fabric import Connection
cn = Connection('[email protected]') # presumes ssh keys were exchanged
cn.run('ls -al') # assuming ssh to linux server - as scott
cn.Sudo('whoami') # as root
cn.local('echo ---------- now from local')
cn.local('dir /w') # assuming client is windows
Connection.local
で問題が発生したため、@ TheRealChx101のコメントを回答者として追加しています。すべての環境変数がptyに入ったわけではないため、一部のスクリプトが正しく機能しませんでした。
import from invoke run as local
スタンザ(Fabricの代わりにInvokeのローカル)を使用すると、すべてが正常に機能しました。