如何在Ansible 2中将回调插件添加到PlaybookExecutor

Sam*_*m F 3 python ansible ansible-playbook ansible-2.x

通过其API调用ansible时如何指定回调?

我有一个database_write.py用于ansible 2.0.0.2 的回调插件,该插件在运行时登录数据库:

ansible-playbook -i inventory.txt playbook.yml # callback is fired ok
Run Code Online (Sandbox Code Playgroud)

这行得通,因为在我的$ PWD中我有ansible.cfg以下一行:

callback_plugins   = ./src/callback
Run Code Online (Sandbox Code Playgroud)

现在,我试图使用python API来执行我的剧本和回调。我基本上已经复制了ansible-playbook cli工具的功能

# based on https://github.com/ansible/ansible/blob/v2.0.0.2-1/lib/ansible/cli/playbook.py
pbex = PlaybookExecutor(playbooks=['../playbook.yml'],
                        inventory=inventory,
                        variable_manager=variable_manager,
                        loader=loader,
                        options=options,
                        passwords=passwords)

results = pbex.run()
Run Code Online (Sandbox Code Playgroud)

这样可以很好地执行剧本,但不会触发回调。

我猜在使用python API时,我的ansible.cfg文件没有被考虑在内吗?

如何为PlaybookExecutor指定回调插件?

(我发现的大多数文档适用于<2.0版的ansible版本)

先感谢您!

dem*_*ito 5

2.0 API非常原始,通常不适合最终用户。将来也可能会更改。请参阅邮件列表上的讨论,我在其中发布了类似的问题并提出了我自己的答案,该答案显然是正确的:您可以将回调分配给执行者的TaskQueueManager实例(PlaybookExecutor._tqm._stdout_callback)。

pbex = PlaybookExecutor(playbooks=playbooks, inventory=inventory,
                        variable_manager=variable_manager,
                        loader=loader, options=options,
                        passwords=passwords)
cb = ResultAccumulator()
pbex._tqm._stdout_callback = cb
results = pbex.run()
Run Code Online (Sandbox Code Playgroud)

(ResultAccumulator是此处的回调插件类。它应从ansible.plugins.callback.CallbackBase派生。