ansible之三自定义模块

接上篇内容,等我们熟悉了ansible playbook后,已经能满足我们日常的运维工作了,而且大大减轻了我们的工作压力,在这个阶段,你已经熟练掌握了ansible的各种模块,并能快速根据业务配置playbook,那从运维角度我个人觉得对ansible掌握是比较不错的了,当然但如果想更深入的了解,那就要学习我们今天讲的ansible api了,了解api,就可以从底层了解ansible的运行机制,当然直接去看ansible源代码也是不错的选择,所以说api其实是为开发人员准备的,通过api接口,开发人员可以自定义一些ansible的模块,今天我们就来看一个小例子来学习如何自定义ansible模块,大家也别对自定义模块感到很深奥,其实深奥的业务逻辑,本身ansible api调用是比较容易的,基本思路是这样,先定义我们的模块脚本,然后通过ansible api来调用,开始前让我们先了解下我们例子的需求:

需求:我们有批机器,领导需要看到每台机器每个挂载点实时的磁盘可用空间和总的可用空间之和,其实这个需求我们脚本可能都实现烂了,不夸张的说闭着眼睛都能写出来,但我们今天来看看如何用ansible来实现,先写我们定义的模块mydf.py文件,内容如下:

这个mydf.py就是自定义的模块,脚本不解释了,如果有不理解的给我留言,完成这个模块后,我们将它拷贝到/usr/share/ansible/下,具体为什么放到这个目录我们待会说,我们先看如何调用这个模块,这就用到ansible的api,具体代码如下:

 

这个脚本中我们用到了ansible的runner api,在modle_name中指定了我们自定义模块的名字,其它内容不多说了,看注释就能明白了,如果有问题可以给我留言,这样就可以运行了吗?如果你在终端输入:

发现会报错,没有发现这个模块,这是因为自定义的模块需要在ansible配置文件中指定,打开/etc/ansible/ansbile.cfg文件,找到library,把注释去掉,修改成如下:

注:版本不同可能会有所差异

这样再运行就没有问题了,当然文中我只给了个比较简单的例子,主要是大家学会这种自定义模块的方法,实际工作中可以根据自己的业务编写符合自己的业务模块,到此呢,三篇关于ansible的学习之旅就全部结束了,经过这三篇的学习,希望对大家有所帮助,如果有什么疑问可以给我留言,当然如果觉得不错,还请帮忙转发,在此谢过。