将 Runner 状态和事件发送到外部系统
Runner 可以将事件和状态数据存储在本地以供检索,它也可以通过提供给模块接口的回调发出这些信息。
或者,Runner 可以配置为通过可安装插件将事件发送到外部系统。目前,有两个示例插件可用。
HTTP 状态/事件发射器插件 - ansible-runner-http GitHub 仓库
ZeroMQ 状态/事件发射器插件 - ansible-runner-zeromq GitHub 仓库
请参考相应的仓库来配置这些插件。
事件结构
通过插件发出两种类型的事件
状态事件
每当 Runner 的状态发生变化时,就会发送这些事件(请参阅 Runner.status_handler),例如
{"status": "running", "runner_ident": "XXXX" }
ansible 事件
在剧本执行期间,这些事件会为从 Ansible 收到的每个事件发送(请参阅 剧本和主机事件),例如
{"runner_ident": "XXXX", <rest of event structure> }
编写自己的插件
为了编写自己的插件接口并让 Runner 拾取并使用它,你需要做几件事。
在你的安装文件中声明模块作为 Runner 的入口点(ansible-runner-http 有一个很好的例子)
entry_points=('ansible_runner.plugins': 'modname = your_python_package_name'),
在包的顶部实现
status_handler()
和event_handler()
函数,例如,请参阅 ansible-runner-http events.py 以及__init__
导入 在模块包的顶部
安装完它后,Runner 将看到插件并在发送状态和事件时调用这些函数。如果你的插件中出现任何错误,它们将立即被引发,Runner 将失败。