设为首页 收藏本站
查看: 1326|回复: 0

[经验分享] Ansible自定义模块开发

[复制链接]
累计签到:224 天
连续签到:4 天
发表于 2019-11-29 09:33:00 | 显示全部楼层 |阅读模式
Ansible中的模块众多,已经可以满足我们大多的需求了,在之前的文章中也已经对Ansible的常用模块进行了介绍,
但如果碰到一些特殊的需求,就需要通过自定义模块的方式来实现了。本章就介绍下如何开发Ansible的模块。

Ansible本身是使用Python语言开发的,所以使用Python来开发Ansible的模块最为便捷。开发前需要安装ansible的python包,直接
使用pip install ansible安装即可。开发时需要使用AnsibleModule来初始化Ansible的模块对象,例如,一个模块的结构如下:

#!/usr/bin/env python

import os

from ansible.module_utils.basic import AnsibleModule

DOCUMENTATION = '''
---
module: list_dir
short_description: View a list of files in the specified directory
description:
     - A module targeting at list files for specified directory.
options:
  dir:
    description:
      - The directory to view
    required: False
    type: str
'''

EXAMPLES = '''
- hosts: all
  tasks:
    - name: List /home
      space_usage:
        dir: "/home"
'''


def main():
    argument_spec = dict(
        dir=dict(required=False, type='str', default='./'),
    )
    module = AnsibleModule(argument_spec=argument_spec)

    results = dict(changed=False)
    dir = module.params.get('dir')
    results['file_list'] = os.listdir(dir)

    module.exit_json(**results)


if __name__ == "__main__":
    main()


该模块的功能为查看一个指定目录下的文件列表,具体结构为:

在模块的开头,使用DOCUMENTATION写明该模块简介,使用EXAMPLES写明模块的使用实例,这样就可以使用ansible-doc
来查看模块的帮助信息了
使用AnsibleModule来初始化Ansible的模块对象,需传入argument_spec参数来说明该模块的参数信息。模块有一个名
为dir的参数,类型为str,默认值为"./"
使用AnsibleModule的params.get方法就可以获取调用该模块传入的参数
模块执行结束返回一个json的结果,使用AnsibleModule的exit_json方法返回结果。changed=False说明改模块没有修改操作,只是
查看,file_list是返回的文件列表


模块定义后,将其放到playbook的library目录下,文件名即为模块名,就可在playbook中使用了,使用方法和ansible内置模块一样:
- hosts: all
  tasks:
    - name: List /home
      list_dir:
        dir: "/home"

查看/home目录下的文件列表


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-989049-1-1.html 上篇帖子: ansible的常用模块的介绍和使用 下篇帖子: ansible的playbook编写
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则  允许回帖邮件提醒楼主

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 在线客服QQ:点击这里给我发消息


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud bjyun

快速回复 返回顶部 返回列表