Я пытаюсь собрать сценарий фабрики, который создает виртуальный экземпляр через API, а затем запускает марионетку на этом экземпляре. У меня есть задача, которая создает виртуальную машину, и задача, которая может «загружать» виртуальную машину. Однако мне трудно связать их вместе, потому что я не уверен, как передать некоторые данные, созданные в первой задаче, во вторую задачу в качестве имени хоста. Например.
def createVM():
newhostname = local('/usr/bin/createVM')
bootstrap(newhostname)
def bootstrap(hostname):
env.hosts = [hostname]
run('puppet agent -t')
Кажется, это не работает, и мне предлагается указать имя хоста для запуска сценария структуры, если я просто выполню fab createVM
.
Как лучше всего это сделать?
Вы можете посмотреть на выполнить () функция. Вы можете использовать его, чтобы переопределить, на каких хостах вы запускаете задачу, и передать дополнительные аргументы.
Вам, вероятно, понадобится что-то вроде
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
Вы можете увидеть более подробную информацию здесь: