使用和开发模块工具

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 核心团队将在 Ansible 核心社区会议期间做出决定。

  • 所有其他与 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 23012

  • json_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 文件