Назначение хостов Fabric с использованием переменной списка

Я знаю, что могу назначать хосты с тканью, делая это:

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

Но смогу ли я это сделать?

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

Я получаю список «public_dns_name», используя Boto (от Amazon AWS), а затем хочу запускать команды на этих серверах. Список серверов может быть динамическим, поэтому мне нужно иметь возможность назначать переменную среды 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: 

Если бы имена хостов были неправильными, я бы ожидал, по крайней мере, ошибки соединения, а не сообщения о том, что хосты не найдены. Конечно, я могу называть это неправильно, но опять же, поэтому я прошу о помощи.


person Bill Rosmus    schedule 09.01.2013    source источник
comment
Ты это пробовал? Это не сработало?   -  person girasquid    schedule 10.01.2013
comment
Нет, я вижу ожидаемые хосты, когда печатаю myHosts.   -  person Bill Rosmus    schedule 10.01.2013


Ответы (1)


При динамической настройке хостов в коде мне нужно было использовать этот шаблон with settings:

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

for host in hosts:
    with settings(user=user, host_string=host):
        run(whatever_my_command_is)
person klenwell    schedule 18.01.2013