まず、コマンドが localhost で実行される理由envは、グローバル変数であり、それをローカルでオーバーライドしているためですが、ファブリックがコマンドを実行しているときには表示されません。関数の外で host_string を定義する必要があります。
env.host_string = 'remotehost'
env.user = 'remoteuser'
def download_backup():
run('ls -t /usr/local/lib/backups | head -1')
実行時にホストを変更するには、いくつかのオプションがあります。まず、rolesおよびroledefs機能を利用できます。
env.roledefs = {
"ex1": ["host1.example.com"],
"ex2": ["host2.example.com"],
}
env.roles = ["ex1"]
def download_backup():
run("ls -t /usr/local/lib/backups | head -1")
デフォルトでは、env.roles が に設定されているため、実行時fab download_backupにバックアップが取得されます。その設定を上書きしたい場合は、コマンドラインから役割を指定できます:host1.example.comex1
fab -R ex2 download_backup
これにより、ロールex2を使用してファブリックが開始され、代わりにバックアップが取得されhost2.example.comます。
他のオプションは、それenvが単なるグローバル変数であるという事実を利用することです。
def download_backup():
run("ls -t /usr/local/lib/backups | head -1")
def download_backup_ex1():
global env
env.host_string = "host1.example.com"
download_backup()
def download_backup_ex2():
global env
env.host_string = "host2.example.com"
download_backup()
個人的には、この場合に行われていることに明らかに適しているため、最初の方法を好みますが、2 番目の方法がより良い代替手段である可能性があることは想像できます。