Передать имя хоста в качестве аргумента в задачу 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
Вы можете увидеть более подробную информацию здесь: