Ansible自定义模块开发
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]