如何在本地Ansible集合的Python模块中导入自定义复用函数?
Ansible集合中模块复用代码的正确实现方式
第一步:调整目录结构
将可复用的工具库文件放在集合的plugins/module_utils目录下,这是Ansible官方规定的集合内模块工具类标准存放位置,调整后的完整结构如下:
/ |_ collections | |_ ansible_collections | |_ my # Namespace | |_ tools # Collection | |_ plugins | |_ modules | |_ my_module.py # 业务模块 | |_ module_utils | |_ my_lib.py # 可复用工具库 |_ my_playbook.yml
第二步:正确导入工具库
在my_module.py中使用集合完整路径导入工具类/函数,无需手动修改sys.path,示例代码:
# 完整路径导入(兼容所有Ansible版本) from ansible_collections.my.tools.plugins.module_utils.my_lib import my_func # 简洁写法(Ansible 2.10及以上版本支持) from my.tools.module_utils.my_lib import my_func
常见错误说明
- 不要将工具库放在
plugins/modules目录下:该目录仅用于存放可直接调用的Ansible模块,而非复用代码 - 避免手动修改
sys.path:Ansible运行时会自动识别集合的标准目录结构并加载路径,手动修改容易引发环境兼容性问题 - 不要使用
from module_utils.my_lib import my_func:这种写法仅适用于Ansible核心模块的工具类导入,集合内模块必须指定完整的命名空间路径
内容的提问来源于stack exchange,提问作者jeremywat
相关产品推荐
相关产品推荐

