Передать имя хоста в качестве аргумента в задачу Fabric

Я пытаюсь собрать скрипт фабрики, который создает виртуальный экземпляр через API, а затем запускает puppet для этого экземпляра. У меня есть задача, которая создает виртуальную машину, и задача, которая может "загрузить" виртуальную машину. Однако мне трудно связать их вместе, потому что я не уверен, как передать некоторые данные, сгенерированные в первом задании, во второе задание в качестве имени хоста. Например

def createVM():
    newhostname = local('/usr/bin/createVM')
    bootstrap(newhostname)

def bootstrap(hostname):
    env.hosts = [hostname]
    run('puppet agent -t')

Это не похоже на работу, и я получаю приглашение ввести имя хоста для сценария фабрики, если я просто выполню fab createVM,

Какой лучший способ сделать это?

2 ответа

Вы можете взглянуть на функцию execute(). Вы можете использовать его для переопределения хостов, на которых вы запускаете задачу, и передачи дополнительных аргументов.

Вам, вероятно, нужно что-то вроде

def createVM():
    newhostname = local('/usr/bin/createVM')
    execute(bootstrap, hosts=[newhostname])

def bootstrap():
    run('puppet agent -t')

Вы можете установить его в словаре среды (env), например:

env.newhostname = local('/usr/bin/createVM')

Или просто установить env.hosts:

env.hosts = [local('/usr/bin/createVM')]

Затем выполните fab createVM bootstrap

Вы можете увидеть более подробную информацию здесь:

http://docs.fabfile.org/en/1.10/usage/env.html

Другие вопросы по тегам