Ansible版本:2.0.0.1
我已经看了很多遍了,我发现的大多数文档要么不完整,要么已弃用(this post is for version 1.8.4, ie)
我正在尝试通过Python API启动Ansible playbook。Ansible的文档似乎展示了如何生成和播放任务,但没有展示如何加载和运行PlaybookYML文件。我一直在深入研究代码,试图了解如何启动它,我想我已经取得了一些进展,但我真的遇到了困难。以下是我目前掌握的情况:
def createcluster(region, environment, cluster):
Options = namedtuple('Options', ['region','env', 'cluster'])
# initialize needed objects
variable_manager = VariableManager()
loader = DataLoader()
options = Options(region=region, env=environment, cluster=cluster)
options.listhosts = False
vault_password = getpass.getpass('Enter vault password :')
passwords = dict(vault_pass=vault_password)
#Getting hosts
hostsread = open('provisioning/inventory/hosts','r')
hosts = hostsread.read()
inventory = Inventory(loader=loader, variable_manager=variable_manager, host_list=hosts)
variable_manager.set_inventory(inventory)
#Create and load the playbook file
playbook = Playbook(loader)
playbook.load('provisioning/cluster.yml', variable_manager,loader)
#Create an executor to launch the playbook ?
executor = None
executor = PlaybookExecutor(playbook,inventory,variable_manager,loader,options,passwords)
try:
result = executor.run()
finally:
if executor is not None:
executor.cleanup()
我对执行器部分一点也不确定,当我尝试启动代码时,我一直收到一个“attributerror:”Options“object has no attribute‘listhosts’”错误(奇怪的是,它应该忽略它的不存在,我认为(line 60))
我应该如何加载一个YML文件并通过Python API启动它?我是走在好的道路上还是迷失了自我?为什么Ansible没有更好的文档?为什么42是7*7的答案?
免责声明
发布以完成。
我在为ansibe2.4设置详细信息时遇到问题。我主要谈谈这个。
TL;DR
Ansible在
__main__
文件(您启动的那个文件)中使用一个全局对象Display
如果它不存在,一些导入将创建它。这被认为是bad practice和not PEP8 compliant(第二个要点)
解释部分
版本:(我正在使用python virtualenv)
如何在ansible内部使用
几乎每个文件(108)都会调用它。 就像这样,在入口点中有一个新的显示,然后所有其他模块将检索这个第一次声明的显示。
以另一种冗长的方式运行
您只需声明如下显示对象:
您也可以在以下时间后使用它:
display.verbosity = 1000
问题
我希望能够完全删除ansible输出(负值=无输出)
解决
我最终创建了一个新的类,就像这样:
然后导入到我的
__main__
文件中只有在导入所有其他模块之后
示例
注释
listhosts=True, listtasks=False, listtags=False, syntax=False
import __main__
使调试变得不切实际,因为当使用调试器(在我的例子中是pudb)时,__main__
文件是调试器文件,因此from __main__ import display
将永远无法工作高温高压
[编辑1]:添加了注释
我写这篇文章时没有看到你想要版本2。留下来,尽管这不是正确的答案。
这将在1.9中起作用。您可以修改createcluster()命令来调用它。
下面是Ansible 2的一个例子:
使用Python2.7.10和ansible 2.0.1.0进行测试
相关问题 更多 >
编程相关推荐