我试图在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 有什么想法吗?
答案 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
)