AnsibleCallbackBase()插件的用法和示例
AnsibleCallbackBase 是 Ansible 中的回调插件基类,用于在执行过程中获取执行结果、任务状态和执行日志等信息,并对执行过程进行自定义处理。拥有继承自 CallbackBase 的所有方法,并且提供了额外的一些钩子方法可以进行自定义处理。
使用 AnsibleCallbackBase 插件,首先需要创建一个继承自 AnsibleCallbackBase 的回调插件类,并根据需要重写其中的方法。下面我们以展示执行结果为例来说明 AnsibleCallbackBase 的用法和示例。
首先定义一个回调插件类 MyCallback,继承自 AnsibleCallbackBase:
from ansible.plugins.callback import CallbackBase
class MyCallback(CallbackBase):
def __init__(self, *args, **kwargs):
super(MyCallback, self).__init__(*args, **kwargs)
def v2_runner_on_ok(self, result, **kwargs):
# 获取任务执行结果
host = result._host
print(f"Host: {host.name}, Result: {result._result}")
上述代码中重写了 v2_runner_on_ok 方法,该方法在任务执行成功时被调用。在方法中,我们通过 result._host 获取任务执行的主机对象,通过 result._result 获取任务执行的结果。
接下来,在 Ansible 的配置文件 ansible.cfg 中添加以下内容:
[defaults] stdout_callback = yaml callbacks_enabled = my_callback
将上面定义的回调插件类 MyCallback 注册为 callbacks_enabled,表示启用该回调插件。
然后,我们可以编写一个简单的 playbook 文件来执行任务。示例如下:
---
- name: Show system information
hosts: localhost
tasks:
- name: Show hostname
command: hostname
运行上述 playbook 文件后,可以看到 MyCallback 插件会打印每个任务的执行结果,示例输出如下:
PLAY [Show system information] **********************************************
TASK [Show hostname] ********************************************************
ok: [localhost]
Host: localhost, Result: {"changed": true, "cmd": "hostname", "delta": "0:00:00.004378", "end": "2022-01-01 10:00:00.000000", "rc": 0, "start": "2022-01-01 10:00:00.000000", "stderr": "", "stderr_lines": [], "stdout": "localhost", "stdout_li
nes": ["localhost"], "warnings": []}
PLAY RECAP ******************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
以上示例演示了如何使用 AnsibleCallbackBase 插件自定义回调逻辑来获取任务执行结果。除了 v2_runner_on_ok 方法外,AnsibleCallbackBase 还提供了其他一些回调方法,根据需要可以重写并自定义处理。
另外,AnsibleCallbackBase 插件还可以用于实现其他自定义的处理逻辑,例如实时输出任务执行日志、记录执行过程中的异常信息等。根据具体需求,可以灵活利用 AnsibleCallbackBase 插件来扩展 Ansible 的功能。
总结来说,AnsibleCallbackBase 插件是 Ansible 提供的回调插件基类,通过继承该类并重写其中的方法,可以实现自定义的回调逻辑。结合 Ansible 的配置文件和 playbook 文件,可以实现对执行过程中的各种情况进行监听和处理,使 Ansible 执行更加灵活和定制化。
