Передача строки env.hosts в качестве переменной не работает в функции
Передача строки env.hosts в качестве переменной не работает в функции.
demo.py
#!/usr/bin/env python
from fabric.api import env, run
def deploy(hosts, command):
print hosts
env.hosts = hosts
run(command)
main.py
#!/usr/bin/env python
from demo import deploy
hosts = ['localhost']
command = 'hostname'
deploy(hosts, command)
python main.py
['localhost']
No hosts found. Please specify (single) host string for connection:
Но env.host_string работает!
demo.py
#!/usr/bin/env python
from fabric.api import env, run
def deploy(host, command):
print host
env.host_string = host
run(command)
main.py
#!/usr/bin/env python
from demo import deploy
host = 'localhost'
command = 'hostname'
deploy(host, command)
python main.py
localhost
[localhost] run: hostname
[localhost] out: heydevops-workspace
Но env.host_string нам недостаточно, этоодин хост. Может быть, мы можем использовать env.host_string в цикле, но этоне хорошо Потому что мы также хотим установить количество одновременных задач и запускать их параллельно.
Теперь в ddep (мой механизм развертывания) я использую только MySQLdb для получения параметров, затем выполняю команду fab, например:
os.system("fab -f service/%s.py -H %s -P -z %s %s" % (project,host,number,task))
Это простой способ, но не очень хороший. Потому что, если я использую команду FAB, я могупоймать исключения и сбои результатов в Python, чтобы мой ddep смог "повторите попытку» провальные хозяева. Если я используюиз демо-импорта развернуть "Я могу контролировать и получать их с помощью некоторых кодов в Python.
А сейчас "env.host " это проблема. Может кто-нибудь дать мне решение? Большое спасибо.