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