ansible开发(3)
发布日期:2021-06-29 11:37:46
浏览次数:2
分类:技术文章
本文共 3814 字,大约阅读时间需要 12 分钟。
插件自定义开发
插件的执行优先级是高于模块的,且和模块的使用有很大的区别
- 和模块使用不同,插件是在ansible 服务器上执行的
- 由于是在ansible 服务器上执行的,所以需要遵循ansible 和 本地python的版本做匹配,且开发语言只能是python
使用场景
- 除Paramiko, SSH, Local, Winrm连接方式外,希望Ansible基于新的通信方式与远程主机交互,比如需要支持SDN的一些协议,比如netconf等。
- 基于Connection类型插件进行编写,在配置文件/api 参数内会有ansible_connection=xxx,默认是smart,可以自己定义自己需求的连接方式进行插件的开发。
- 除Ansible内置的with_items、with_fileglob循环体外,希望有新的遍历方式
- 基于Lookup类型插件进行编写。
- 除了Ansible内置的host_vars、group_vars等变量调用方式外,希望有新的变量定义方式
- Vars类型插件,其实一般用不到,因为一般动态inventory 就可以满足对应需求了。
- 除了Ansible的内置的Jinja2模板渲染、to_yaml、to_json等过滤器外,希望有新的过滤器
- 基于Filter类型插件进行编写,Filter类型插件其实是Jinja2模板引擎的Filter,Jinja2的常用的Filter实现有to_yaml、to_json,官网实现的Filter Plugins代码全合并在core.py脚本中,新Filter插件需在该脚本的基础上编写
- 定义新的回调机制,即捕获响应事件后自定义新的响应形式。
- Callback类型插件是用的比较多的一个插件,一般是基于callbackbase 进行继承后再编写,可以在自己定义的callback 里添加类似数据落库,邮件/短信告警等功能。
所有的插件类型
所有的插件类型可以在配置文件里看到
# set plugin path directories here, separate with colons#action_plugins = /usr/share/ansible/plugins/action#become_plugins = /usr/share/ansible/plugins/become#cache_plugins = /usr/share/ansible/plugins/cache#callback_plugins = /usr/share/ansible/plugins/callback#connection_plugins = /usr/share/ansible/plugins/connection#lookup_plugins = /usr/share/ansible/plugins/lookup#inventory_plugins = /usr/share/ansible/plugins/inventory#vars_plugins = /usr/share/ansible/plugins/vars#filter_plugins = /usr/share/ansible/plugins/filter#test_plugins = /usr/share/ansible/plugins/test#terminal_plugins = /usr/share/ansible/plugins/terminal#strategy_plugins = /usr/share/ansible/plugins/strategy
插件编写实例
注意事项:
- 使用Python语言编写
- 可以抛出异常
- 返回unicode类型的字符串
- 符合Ansible的配置和文档标准
举个callback 重写的例子, 该代码意思是将所有的callback 返回全部pass掉,之前的api 开发里,也有类似的callback 重新处理的代码。
from ansible.plugins.callback import CallbackBaseclass CallbackModule(CallbackBase): ''' Magic black hole, nothing will show up. ''' CALLBACK_VERSION = 2.0 CALLBACK_TYPE = 'stdout' CALLBACK_NAME = 'BlackHole' # only needed if you ship it and don't want to enable by default CALLBACK_NEEDS_WHITELIST = True def v2_on_any(self, *args, **kwargs): pass def v2_runner_on_failed(self, result, ignore_errors=False): pass def v2_runner_on_ok(self, result): pass def v2_runner_on_skipped(self, result): pass def v2_runner_on_unreachable(self, result): pass def v2_runner_on_async_poll(self, result): pass def v2_runner_on_async_ok(self, result): pass def v2_runner_on_async_failed(self, result): pass def v2_playbook_on_start(self, playbook): pass def v2_playbook_on_notify(self, handler, host): pass def v2_playbook_on_no_hosts_matched(self): pass def v2_playbook_on_no_hosts_remaining(self): pass def v2_playbook_on_task_start(self, task, is_conditional): pass def v2_playbook_on_cleanup_task_start(self, task): pass def v2_playbook_on_handler_task_start(self, task): pass def v2_playbook_on_vars_prompt(self, varname, private=True, prompt=None, encrypt=None, confirm=False, salt_size=None, salt=None, ault=None, unsafe=None): pass def v2_playbook_on_import_for_host(self, result, imported_file): pass def v2_playbook_on_not_import_for_host(self, result, missing_file): pass def v2_playbook_on_play_start(self, play): pass def v2_playbook_on_stats(self, stats): pass def v2_on_file_diff(self, result): pass def v2_playbook_on_include(self, included_file): pass def v2_runner_item_on_ok(self, result): pass def v2_runner_item_on_failed(self, result): pass def v2_runner_item_on_skipped(self, result): pass def v2_runner_retry(self, result): pass def v2_runner_on_start(self, host, task): pass
个人公众号, 分享一些日常开发,运维工作中的日常以及一些学习感悟,欢迎大家互相学习,交流
转载地址:https://blog.csdn.net/zyxpaomian/article/details/116530815 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月19日 02时45分18秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
无人再提华强北
2019-04-29
千万不要小瞧那些不好好写代码的程序员
2019-04-29
80后,天才程序员, Facebook 第一任 CTO,看看开挂的人生到底有多变态?
2019-04-29
「第四篇」电赛控制题可以准备一些什么?
2019-04-29
「第五篇」全国电子设计竞赛-电源题设计方案总结
2019-04-29
「第六篇」对于电赛,我们应该看重什么?
2019-04-29
树莓派翻车了
2019-04-29
垃圾分类背后的数据和真相
2019-04-29
PID算法搞不懂?看这篇文章就够了。
2019-04-29
这位电子工程师,你不能错过。
2019-04-29
十八般武艺教你如何解决问题
2019-04-29
「权威发布」2019年大学生电子设计竞赛,仪器设备和主要元器件清单
2019-04-29
「重磅猜题之第二篇」2019年大学生电子设计竞赛
2019-04-29
知乎:硬件和软件哪个吃香?
2019-04-29
中国深圳,600架无人机的盛典!
2019-04-29
干货分享 JVM 之第 3 篇 —— Java 内存结构相关
2019-04-29
干货分享 JVM 之第 5 篇 —— 类加载器
2019-04-29
干货分享 JVM 之第 6 篇 —— SpringBoot2.0 框架性能调优
2019-04-29
基于 Hystrix 高并发服务限流第 1 篇 —— 必须了解的相关概念
2019-04-29