python-2.7 - 如何获取 ansible.module_utils 来解析我的自定义目录

标签 python-2.7 ansible ansible-2.x

ansible.cfg 中的某些变量似乎没有生效。 安塞波 2.2.1.0 python 2.7.10 Mac 操作系统版本 10.12.5

我们已经创建了一个将在我们的自定义 Ansible 模块中使用的自定义类。类(class)住在这里:

/sites/utils/local/ansible/agt_module_utils/ldapData.py /sites/utils/local/ansible/agt_module_utils/init.py

ldapData.py 中的类命名为:

类 ldapDataClass(对象):

在所有情况下,init.py 都是零字节文件。 我们的 Ansible 模块位于此处:

/sites/utils/local/ansible/agt_modules/init.py /sites/utils/local/ansible/agt_modules/agtWeblogic.py

atgWeblogic 中的 import 语句如下所示:

from ansible.module_utils.ldapData import ldapDataClass

我也试过:

from ldapData import ldapDataClass

配置文件有以下几行:

library = /sites/utils/local/ansible/att_modules module_utils = /sites/utils/local/ansible/att_module_utils

运行我们的模块时,模块目录已解析,但 module_utils 目录未解析。当 include 是“from ansible.module_utils.ldapData import ldapDataClass”时,失败发生在 ansible 甚至连接到远程机器之前。当包含是“from ldapData import ldapDataClass”时,故障发生在远程机器上。下面我显示了“在远程机器上”的故障(向右滚动以查看完整错误):

nverkland@local>ansible ecomtest37 -m agtWeblogic -a "action=stop instances=tst37-shop-main" -vvv

ecomtest37 | FAILED! => {
    "changed": false, 
    "failed": true, 
    "invocation": {
        "module_name": "agtWeblogic"
    }, 
    "module_stderr": "", 
    "module_stdout": "Traceback (most recent call last):\r\n  File \"/tmp/ansible_FwHCmh/ansible_module_attWeblogic.py\", line 63, in <module>\r\n    from ldapData import ldapDataClass\r\nImportError: No module named ldapData\r\n", 
    "msg": "MODULE FAILURE"
}

如果我将 ldapData.py 文件移动到“ansible installed”module_utils 目录(/Library/Python/2.7/site-packages/ansible/module_utils/在我的 Mac 上),模块运行正常。我在阻止使用“自定义”module_utils 目录的配置文件中做错了什么?

谢谢。

最佳答案

module_utils 路径自 Ansible 2.3 起可配置:changelog , PR .

我猜你必须升级或重构模块。

更新:工作示例

项目树:

.
├── ansible
│   └── ansible.cfg
├── module_utils
│   └── mycommon.py
└── modules
    └── test_module.py

ansible.cfg:

[defaults]
library = ../modules
module_utils = ../module_utils

我的共同点:

class MyCommonClass(object):

    @staticmethod
    def hello():
        return 'world'

测试模块.py:

#!/usr/bin/python

from ansible.module_utils.basic import *
from ansible.module_utils.mycommon import MyCommonClass

module = AnsibleModule(
    argument_spec = dict()
)
module.exit_json(changed=True, hello=MyCommonClass.hello())

执行:

$ ansible localhost -m test_module
 [WARNING]: Host file not found: /etc/ansible/hosts

 [WARNING]: provided hosts list is empty, only localhost is available

localhost | SUCCESS => {
    "changed": true,
    "hello": "world"
}

Ansible 版本:

$ ansible --version
ansible 2.3.1.0
  config file = /<masked>/ansible/ansible.cfg
  configured module search path = [u'../modules']
  python version = 2.7.10 (default, Feb  7 2017, 00:08:15) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)]

关于python-2.7 - 如何获取 ansible.module_utils 来解析我的自定义目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44786473/

相关文章:

python - 在 MySQLdb 中使用变量作为字段名称,Python 2.7

ansible - 如何进入Digital Ocean代币?

ansible - "The specified collections path is not part of the configured Ansible collections paths"但我正在安装到相对目录

ansible - 为什么 ansible 默默地忽略一个角色?

python-2.7 - 对 pandas 数据帧重新采样并计算实例数

python - Pandas json_normalize 不会展平所有嵌套字段

python - cv2、cv、mahotas 和 SimpleCV 之间的图像转换

ansible:播放回顾:这些数字是什么意思?

Ansible:如何检查变量是否正在加载到剧本中?

ansible - 如何通过ansible将变量从一个角色下游传递给其他依赖角色?