如何将.py文件导入Ansible模块?

时间:2016-02-10 23:42:28

标签: python ansible

我的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}

4 个答案:

答案 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之后才可用......

直到那时......

使用ansible

部署依赖项

您想要的库必须复制到您运行的每个系统。所以,让我们为我们安排一下。

---

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来调用函数或类。