Fabric使用列表变量分配主机

时间:2013-01-09 23:28:25

标签: python fabric

我知道我可以通过执行以下操作为主机分配主机:

env.hosts = ['host1', 'host2']

但我可以这样做吗?

myList = ['host1', 'host2']
env.hosts = myList

我正在使用Boto(来自Amazon AWS)获取'public_dns_name'的列表,然后想要在这些服务器上运行命令。服务器列表可以是动态的,因此我需要能够分配hosts环境变量而不是静态。有人可以提出解决方案吗?

myHosts = []
for i in myInstances:
    publicDnsAddress = i.public_dns_name
    myHosts.append(i.public_dns_name)
    print ("public dns address: " + publicDnsAddress)

print ("myHosts = " + str(myHosts))        

env.hosts=myHosts
env.user='myUser'
run("/scripts/remote_script.py")

我收到此错误:

No hosts found. Please specify (single) host string for connection: 

如果主机名称不好,我预计至少会出现连接错误而不是消息说它找不到主机。当然,我可能会把这件事搞错,但话又说回来,这就是我寻求帮助的原因。

1 个答案:

答案 0 :(得分:0)

在代码中动态设置主机时,我需要使用此with settings模式:

user = 'root'
hosts = ['server1', 'server2']

for host in hosts:
    with settings(user=user, host_string=host):
        run(whatever_my_command_is)