Передача строки 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 " это проблема. Может кто-нибудь дать мне решение? Большое спасибо.

Ответы на вопрос(2)

Ваш ответ на вопрос