Ansible模块开发:没有名为ansible.runner的模块?

时间:2015-06-26 20:18:27

标签: python module ansible

我试图在Ansible中编写我的第一个模块,它本质上是另一个模块的包装器。这是我的模块:

#!/usr/bin/python
import ansible.runner
import sys

def main():
    module.exit_json(changed=False)

from ansible.module_utils.basic import *
main()

这是它给我的错误(摘自' msg'):

  

ImportError:没有名为ansible.runner的模块

我在ubuntu上并使用aptitude安装了ansible,版本是1.9.1 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

模块必须基本上是独立的。样板在运行时被注入(样板文本替换底部的导入),模块+样板的组合文本被喷射到远程机器并在那里运行。因此,你不能从像运行器那样的ansible核心导入东西(除非你在远程机器上安装ansible-不是那个人)。 “module”是您必须根据样板中定义的内容创建的项目之一。这是我写的示例模块框架:

#! /usr/bin/python

import json

def main():
    module = AnsibleModule(
        argument_spec = dict(
            state     = dict(default='present', choices=['present', 'absent'])
        ),
        supports_check_mode = True
    )

    p = module.params

    changed = False

    state = p['state']

    if not module.check_mode:
        # do stuff
        pass

    #module.fail_json(msg='it broke')

    module.exit_json(changed=changed)

from ansible.module_utils.basic import *
main()

答案 1 :(得分:1)

我刚刚检查过我写过的模块,我没有这样的导入行。我唯一的导入是from ansible.module_utils.basic import *。我在module创建的main对象:

module = AnsibleModule(
    argument_spec=dict(
        paramA=dict(required=True),
        paramB=dict(required=False),
        paramC=dict(required=False),
    ),
    add_file_common_args=True,
    supports_check_mode=True
)