我的Ansible目录结构看起来像这样。
Ansible-Repo
|
+-- playbooks
| |
| +-- run_custom_module1
|
+-- library
| |
| +-- custom_module1
| +-- custom_module2
|
+-- bin
| |
| +-- usefulpythonfunctions.py
我希望能够从我的Ansible模块中的bin导入有用的pythonfunctions.py。我的模块顶部有一个import usefulpythonfunctions.py,但是当我运行playbook时收到以下错误。
\r\nImportError: No module named usefulpythonfunctions\r\n", "msg": "MODULE FAILURE", "parsed": false}
答案 0 :(得分:12)
幸运的是2.3 release引入了此功能。
现在,您可以将共享代码放在Playbook所在的module_utils
文件夹中,并通过ansible自动导出。您也可能有兴趣查看the directory structure documentation
您可以像访问标准工具
一样访问module_utils
中的模块
from ansible.module_utils.my_shared_code import MySharedCodeClient
<强>更新强>
现在,您可以使用ANSIBLE_MODULE_UTILS
env变量配置模块工具所在的路径。有关详细信息,请查看documentation
答案 1 :(得分:2)
我一直在研究如何做到这一点,并且在当前版本的Ansible中看起来不可能。
老实说,@ slackhacker提到的拉取请求似乎是最干净的选择,但看起来它可能在Ansible 2.1之后才可用......
您想要的库必须复制到您运行的每个系统。所以,让我们为我们安排一下。
---
tasks:
- name: Copy mylibrary
# Only requirement is that the dst path exists in the default system python path
copy: src=path-to-library dst=/usr/local/lib/python2.7/dist-packages
- name:
mymodule:
arg1: foo
arg2: bar
如果您正在运行的服务器(通过HTTP,SSH等)可以访问您的模块代码,您可以编写模块以便在python中直接获取依赖项,而不是将其作为单独的任务执行。 / p>
这具有增加的值,不需要来自最终用户的额外步骤,但由于必须进行额外的复制,可能会运行得更慢。
您也可以使用pip
或任何其他打包工具链滚动自己的包。这可能不适合胆小的人。
答案 2 :(得分:1)
根据我的理解,这在Ansible中是不可能的,但pending pull request提供了一些希望。
答案 3 :(得分:0)
尝试创建一个名为usefulpythonfunctions
的文件夹,创建一个__init__.py
并将所需的功能放在那里。
此外,您应该能够创建bin/foo/bar.py
并使用from foo import bar
来调用函数或类。