Назад | Перейти на главную страницу

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

Я пытаюсь собрать сценарий фабрики, который создает виртуальный экземпляр через 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

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

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