欢迎访问宙启技术站
智能推送

AnsibleCallbackBase()插件的用法和示例

发布时间:2023-12-16 08:15:37

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 执行更加灵活和定制化。