ファブリック内のすべてのサーバー構成をループして、次のようなホスト名を取得しようとしています:
from fabric.api import env, run
def serv_foo():
env.hosts = ['bla@example.com']
def serv_bar():
env.hosts = ['bla@example2.com']
def get_all_servers():
return {(k,v) for k,v in globals().items() if k.startswith("serv_")}
def get_hostnames():
for serv_name, serv_fptr in get_all_servers():
print(env.hosts)
serv_fptr()
print(env.hosts)
hostname = run("hostname")
print(hostname)
ただし、これは失敗します。
>>> fab get_hostnames
>>> []
>>> ['bla@example.com']
>>> No hosts found. Please specify (single) host string for connection:
ファブリック内のホストを動的に更新するにはどうすればよいですか?
- 注 1: デフォルトの呼び出しが
fab serv_foo get_hostnames
. それには興味がありません。 - 注2:
execute(serv_fptr)
同じ問題が発生します。