本文共 1644 字,大约阅读时间需要 5 分钟。
一个模块整体的框架为:
#!/usr/bin/env python# -*- coding=utf-8 -*-from ansible.module_utils.basic import *def do(): ... return result,outputdef main(): module = AnsibleModule( argument_spec = dict() ) do() if status == 0: result = dict(module='modulename',stdout=output,changed=False,rc=0 module.exit_json(**result) else: result = dict(msg='execute failed',rc=status) module.fail_json(**result)
#!/usr/bin/env python# -*- coding=utf-8 -*-from ansible.module_utils.basic import *import commands
创建一个AnsibleModule的实例,argument_spec初始化参数为空字典。如下
module = AnsibleModule( argument_spec = dict())
如果你的模块需要参数传入,则要定义实例中的参数传入。如下是几种参数的定义方式
module = AnsibleModule( argument_spec = dict( state = dict(default='present', choices=['present', 'absent']), name = dict(required=True), enabled = dict(required=True, type='bool'), something = dict(aliases=['whatever']) ) )
这是开发ansible模块的难点,需要自己使用python去操作被控机。具体操作就是在do函数里面填充定制化的操作。
def do(): ...
引入传入的变量
name = module.params['name']
按照ansible 的返回格式定义返回内容,stdout为标准输出,changed代表系统有没有东西被变更,rc=0代表执行成功,使用ansible规则的module实例下的exit_json
返回正常内容
当调用失败返回错误信息的时候,数据字典只要传递msg信息就可了,然后调用module实例的fail_json
方法给返回
if status == 0: result = dict(module='modulename',stdout=output,changed=False,rc=0) module.exit_json(**result)else: result = dict(msg='execute failed',rc=status) module.fail_json(**result)
转载地址:http://tqugn.baihongyu.com/