我正在尝试编写一个结构脚本,该脚本通过 API 创建虚拟实例,然后在该实例上运行 Puppet。我有一个创建 VM 的任务和一个可以“引导”VM 的任务。但是,我很难将它们链接在一起,因为我不确定如何将第一个任务中生成的一些数据作为主机名传递到第二个任务中。例如
def createVM():
newhostname = local('/usr/bin/createVM')
bootstrap(newhostname)
def bootstrap(hostname):
env.hosts = [hostname]
run('puppet agent -t')
这似乎不起作用,如果我只是执行,系统会提示我输入运行结构脚本的主机名fab createVM
。
做到这一点的最好方法是什么?
答案1
您可以查看执行()函数。您可以使用它来覆盖运行任务的主机并传递额外的参数。
你可能需要类似的东西
def createVM():
newhostname = local('/usr/bin/createVM')
execute(bootstrap, hosts=[newhostname])
def bootstrap():
run('puppet agent -t')
答案2
您可能希望在环境字典中设置它(env
),例如:
env.newhostname = local('/usr/bin/createVM')
或者直接设置env.hosts
:
env.hosts = [local('/usr/bin/createVM')]
然后执行fab createVM bootstrap
您可以在此处查看更多详细信息: