自动化运维利器Ansible [ 8 ] --- 扩展ansible:插件,自定义插件,回调插件

本文介绍了如何扩展自动化运维工具Ansible,通过自定义回调插件将playbook的执行结果输出到MySQL数据库中。详细讲述了配置回调插件、开发自定义插件`mysql_plays`的步骤,包括数据库和表的准备、插件编写、保存与启用,以及配置选项和使用先决条件。
摘要由CSDN通过智能技术生成

自动化运维利器Ansible-扩展ansible

一、使用插件

1 回调插件介绍

1.1 修改默认的回调插件

同时只能有一个回调插件作为主要的管理者,用于输出到屏幕。

ansible.cfg 中配置 stdout 插件。

[defaults]
stdout_callback = json  # 以 JSON 的格式输出结果

默认 情况下这仅对 playbook 生效,如果想让 ad-hoc 方式生效应该在 ansible.cfg 文件中做如下设置:

[defaults]
bin_ansible_callbacks = True

设置成功后,随意执行之前的一个 playbook 就会看到输出结果是 JSON 格式的数据。

1.2 启用其他内置的回调插件

大部分情况下,无论是内置的回调插件还是自定义的回调插件,都需要在 ansible.cfg 中添加到白名单中,从而才能启用。

callback_whitelist = timer, mail, profile_roles, custom_callback
  • timer 这个回调插件可以计算整个 playbook 的运行时间
  • mail 这个回调插件可以实现发送邮件的功能
  • profile_roles 这个插件是统计每个任务的用时时间
  • custom_callback 是自定义的插件,稍后会讲
1.3 获取帮助

ansible-doc -t callback -l 可以查看当前可用的回调插件列表

ansible-doc -t callback <callback plugins name> 可查看具体回调插件的帮助文档

比如:

[root@qfedu ~]# ansible-doc -t callback timer
> TIMER    (/usr/lib/python2.7/site-packages/ansible/plugins/callback/timer.py)

        This callback just adds total play duration to the play stats.

  * This module is maintained by The Ansible Community
REQUIREMENTS:  whitelist in configuration

CALLBACK_TYPE: aggregate
        METADATA:
          status:
          - preview
          supported_by: community


2 回调插件类型

回调插件类型在回调插件类中定义:

class CallbackModule(CallbackBase):
    CALLBACK_TYPE = 'notification'

不同的回调类型对于 playbook 的输出有不一样的效果

  • stdout 标准输出类型,用在回调的主管理者

  • aggregate 聚合类型, 把此类型插件处理的结果和 stdout 类型插件合并一起输出到标准输出。比如 :timerprofile_tasks 等。

  • notification 通知类型,不参与标准输出,也不影响标准输出插件的正常输出,只是会把执行 playbook 的返回值写的指定的媒介中。

    比如: log_playsmail。假如自定义把执行playbook 的结果输出到数据库中就可以使用此类型。

3 把返回结果输出到日志中

内置的回调插件 log_plays 会将 playbook 的返回信息输出到

/var/log/ansible/hosts 目录中。

可以在 ansible.cfg 中配置指定的目录,使用 log_folder

比如,把日志存到 /tmp/ansible/hosts/ 目录下

ansible.cfg 文件的最后添加如下配置

配置日志存放的目录

[callback_log_plays]
log_folder=/tmp/ansible/hosts/

配置到白名单

ansible.cfg

callback_whitelist = log_plays

**执行 playbook **

还是按照原来的方式执行任意一个 playbook

查看输出结果

[root@qfedu.com ~]# ls /tmp/ansible/hosts/
172.18.0.3  172.18.0.4  172.18.0.5
[root@qfedu.com ~]# cat /tmp/ansible/hosts/172.18.0.3
Apr 24 2020 06:43:57 - OK - {
   "module_args": {
   "data": "pong"}} => {
   "changed": false, "ping": "pong", "_ansible_no_log": false, "ansible_facts": {
   "discovered_interpreter_python": "/usr/bin/python"}}

Apr 24 2020 06:45:11 - OK - {
   "module_args": {
   "warn": true, "executable": null, "_uses_shell": true, "strip_empty_ends": true, "_raw_params": "date +\"%F %T\"", "removes": null, "argv": null, "creates": null, "chdir": null, "stdin_add_newline": true, "stdin": null}} => {
   "stderr_lines": [], "cmd": "date +\"%F %T\"", "end": "2020-04-24 06:45:11.110025", "_ansible_no_log": false, "stdout": "2020-04-24 06:45:11", "changed": true, "rc": 0, "start": "2020-04-24 06:45:10.878037", "stderr": "", "delta": "0:00:00.231988", "stdout_lines": ["2020-04-24 06:45:11"], "ansible_facts": {
   "discovered_interpreter_python": "/usr/bin/python"}}

二、开发自定义插件

1 开发插件规则

插件配置和文档标准

Ansible的在线帮助文档是根据每个模块的源代码中的DOCUMENTATION模块生成的。该DOCUMENTATION块必须是有效的YAML。

需要为您的插件定义可配置选项,在python文件的部分 DOCUMENTATION 中对其进行描述。

自Ansible 2.4版以来,回调和连接插件已经开始以这种方式声明配置要求了。现在大多数插件类型都执行相同的操作。这种方法可确保插件选项的文档始终是正确的和最新的。

DOCUMENTATION块中的所有字段均为小写。除非另有说明,否则所有字段都是必填字段:

DOCUMENTATION = '''
    callback: log_plays
    type: notification
    short_description: write playbook output to log file
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值