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

Ansible插件CallbackBase()的使用示例

发布时间:2023-12-25 21:49:08

CallbackBase是Ansible的插件类型之一,用于扩展并自定义Ansible的回调行为。回调是Ansible执行任务过程中的事件通知机制,可以在任务执行过程中获取各种信息并进行处理。

CallbackBase是一个抽象基类,用于定义自定义回调插件的基本结构。可以通过继承CallbackBase类来编写自己的回调插件,并根据需要重写其中的方法。

下面是CallbackBase的一个简单使用示例:

from ansible.plugins.callback import CallbackBase
from ansible import constants as C

class MyCallback(CallbackBase):
    def __init__(self, *args, **kwargs):
        super(MyCallback, self).__init__(*args, **kwargs)
        self.task_ok = []
        self.task_failed = []
        self.playbook_ok = []
        self.playbook_failed = []

    def v2_playbook_on_task_start(self, task, is_conditional):
        # 处理任务开始事件
        pass

    def v2_playbook_on_task_failed(self, result, ignore_errors=False):
        # 处理任务失败事件
        pass

    def v2_playbook_on_play_start(self, play):
        # 处理playbook开始事件
        pass

    def v2_playbook_on_play_failed(self, play, results):
        # 处理playbook失败事件
        pass

    def v2_runner_on_ok(self, result, **kwargs):
        # 处理任务成功事件
        self.task_ok.append(result._host)

    def v2_runner_on_failed(self, result, **kwargs):
        # 处理任务失败事件
        self.task_failed.append(result._host)
        
    def v2_playbook_on_stats(self, stats):
        # 处理统计信息事件
        for h in self.task_ok:
            print('Host %s task succeeded' % h)
        for h in self.task_failed:
            print('Host %s task failed' % h)
        for h in self.playbook_ok:
            print('Host %s playbook succeeded' % h)
        for h in self.playbook_failed:
            print('Host %s playbook failed' % h)

# 在ansible.cfg中设置stdout_callback为mycallback,如下:
# stdout_callback = mycallback

# 执行ansible命令时,指定自定义回调插件
# ansible-playbook playbook.yml -c localhost -v -e 'ansible_python_interpreter=/usr/bin/python3' -k

上述代码中,首先导入了所需的模块和类。然后创建了一个自定义的回调插件类MyCallback,继承自CallbackBase。在__init__方法中初始化了一些空的列表用于存储任务和playbook的执行结果。

接下来,根据需要重写了一些回调方法。例如,v2_runner_on_ok方法用于处理任务成功事件,将成功的主机添加到self.task_ok列表中;v2_runner_on_failed方法用于处理任务失败事件,将失败的主机添加到self.task_failed列表中;v2_playbook_on_stats方法用于处理统计信息事件,打印出执行结果。

最后,在ansible.cfg配置文件中将stdout_callback设置为mycallback,可以让Ansible使用自定义的回调插件。

执行ansible-playbook命令时,可以通过-v选项查看详细的执行过程,并在结果中输出自定义的回调信息。例如:

PLAY [all] *********************************************************************

GATHERING FACTS ***************************************************************
ok: [localhost]

TASK: [debug msg="Hello, Ansible!"] ********************************************
changed: [localhost]

TASK: [debug msg="Goodbye, Ansible!"] *****************************************
changed: [localhost]

PLAY RECAP ********************************************************************
localhost                  : ok=3    changed=2    unreachable=0    failed=0   

Host localhost task succeeded

以上是一个简单的使用示例,示例中的回调插件只是将任务结果打印在控制台上。实际使用时,可以根据需求对回调方法进行处理,比如将结果保存到文件、发送邮件等。根据实际情况,可以在回调方法中添加更多的逻辑代码以满足需求。