使用和开发模块实用程序
Ansible 提供了许多模块实用程序,或共享代码片段,这些实用程序提供了在您开发自己的模块时可以使用的辅助函数。basic.py
模块实用程序提供了访问 Ansible 库的主要入口点,并且所有 Python Ansible 模块都必须从 ansible.module_utils
导入一些内容。一个常见的选项是导入 AnsibleModule
from ansible.module_utils.basic import AnsibleModule
ansible.module_utils
命名空间不是一个普通的 Python 包:它是为每个任务调用动态构建的,方法是提取导入并根据从活动配置派生的搜索路径解析那些与命名空间匹配的导入。
为了减少集合或本地模块的维护负担,您可以将重复的代码提取到一个或多个模块实用程序中,并将它们导入到您的模块中。例如,如果您有自己的自定义模块,它们导入一个 my_shared_code
库,您可以将其放置在 ./module_utils/my_shared_code.py
文件中,如下所示
from ansible.module_utils.my_shared_code import MySharedCodeClient
当您运行 ansible-playbook
时,Ansible 会按照Ansible 搜索路径定义的顺序,将您本地 module_utils
目录中的所有文件合并到 ansible.module_utils
命名空间中。
命名和查找模块实用程序
您通常可以从模块实用程序的名称和/或位置判断其功能。通用实用程序(许多不同类型的模块使用的共享代码)位于主 ansible/ansible 代码库中,位于 common
子目录或 lib/ansible/module_utils
的根目录中。特定模块集使用的实用程序通常与这些模块位于同一个集合中。例如
lib/ansible/module_utils/urls.py
包含用于解析 URL 的共享代码openstack.cloud.plugins.module_utils.openstack.py
包含用于处理 OpenStack 实例的模块的实用程序ansible.netcommon.plugins.module_utils.network.common.config.py
包含用于网络模块的实用函数
在您自己的模块实用程序中遵循此模式,可以使一切都易于查找和使用。
标准模块实用程序
Ansible 附带一个广泛的 module_utils
文件库。您可以在主 Ansible 路径下的 lib/ansible/module_utils
目录中找到模块实用程序的源代码。我们在下面描述了最广泛使用的实用程序。有关任何特定模块实用程序的更多详细信息,请参阅module_utils 的源代码。
注意
许可要求 Ansible 强制执行以下许可要求
- 实用程序(
lib/ansible/module_utils/
中的文件)可能具有以下两种许可证之一 在
module_utils
中,仅用于特定供应商的硬件、提供商或服务的文件可能在 GPLv3+ 下获得许可。在module_utils
下添加具有 GPLv3+ 的新文件需要经过核心团队的批准。所有其他
module_utils
必须在 BSD 下获得许可,以便获得 GPL 许可的第三方和 Galaxy 模块可以使用它们。如果对
module_utils
中文件的适当许可证有疑问,Ansible Core 团队将在 Ansible Core 社区会议期间做出决定。
- 实用程序(
随 Ansible 提供的所有其他文件,包括所有模块,都必须在 GPL 许可证(GPLv3 或更高版本)下获得许可。
现有的许可要求仍然适用于 ansible/ansible (ansible-core) 中的内容。
之前在 ansible/ansible 或集合中的内容,并且已移动到新集合的内容,必须保留其在先前存储库中拥有的许可证。
以前提交者的版权条目也必须保留在任何移动的文件中。
api.py
- 支持通用 API 模块basic.py
- Ansible 模块的通用定义和辅助实用程序common/dict_transformations.py
- 用于字典转换的辅助函数common/file.py
- 用于处理文件的辅助函数common/text/
- 用于转换和格式化文本的辅助函数common/parameters.py
- 用于处理模块参数的辅助函数common/sys_info.py
- 用于获取发行版和平台信息的函数common/validation.py
- 用于根据模块参数规范验证模块参数的辅助函数facts/
- 用于返回事实的模块的实用程序目录。有关更多信息,请参阅PR 23012json_utils.py
- 用于过滤模块 JSON 输出周围不相关输出的实用程序,例如前导和尾随行powershell/
- Windows PowerShell 模块的定义和辅助函数目录pycompat24.py
- Python 2.4 的异常解决方法service.py
- 用于使模块能够与 Linux 服务一起使用的实用程序(占位符,未使用)six/__init__.py
- Six Python 库的捆绑副本,以帮助编写与 Python 2 和 Python 3 兼容的代码splitter.py
- 用于处理 Jinja2 模板的字符串拆分和操作实用程序urls.py
- 用于处理 http 和 https 请求的实用程序
一些常用的实用程序已在 Ansible 2.10 中迁移到集合,包括
ismount.py
迁移到ansible.posix.plugins.module_utils.mount.py
- 修复 os.path.ismount 的单个辅助函数known_hosts.py
迁移到community.general.plugins.module_utils.known_hosts.py
- 用于处理 known_hosts 文件的实用程序
有关带有目标集合的迁移内容的列表,请参阅runtime.yml 文件。