python - 如何在 Ansible 2 中向 PlaybookExecutor 添加回调插件

标签 python ansible ansible-2.x

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

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

ansible-playbook -i inventory.txt playbook.yml # callback is fired ok

这工作正常,因为在我的 $PWD 中我有 ansible.cfg 和这一行:

callback_plugins   = ./src/callback

现在我正在尝试使用 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()

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

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

如何将我的回调插件指定给 PlaybookExecutor?

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

提前致谢!

最佳答案

2.0 API 非常原始,通常不适合最终用户。将来也可能会更改。参见 this discussion在邮件列表上,我发布了类似的问题并提出了我自己的显然是正确的答案:您可以将回调分配给执行程序的 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()

(ResultAccumulator 是来自 here 的回调插件类。它应该派生自 ansible.plugins.callback.CallbackBase。

关于python - 如何在 Ansible 2 中向 PlaybookExecutor 添加回调插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35019916/

相关文章:

ansible - 剧本检查

用于在整个应用程序中共享配置的 Python 模式

python - 关于GEKKO中条件语句('m.if3')的问题

logging - 如何获取 ansible-playbook 模块执行的日志/详细信息?

ansible - 从ansible中的列表中获取最新的字典

Ansible:覆盖额外变量中的字典变量

python - 在 Ansible 中以不同的用户身份执行不同的任务

python - 在运行时创建一个动态命名的函数

python - 从 Pandas 数据帧创建 BigQuery 表,无需明确指定架构

ansible - 从 ansible uri json 请求中获取值