在集合中使用共享资源

尽管开发包含在集合中的 Ansible 模块类似于开发独立的 Ansible 模块,但您在集合中以不同的方式使用共享资源,例如文档片段和模块实用程序。您可以在集合内和集合之间使用文档片段。您可以使用可选模块实用程序来支持您的集合中的多个 ansible-core 版本。集合还可以依赖于其他集合。

在集合中使用文档片段

要在您的集合中包含文档片段

  1. 创建文档片段:plugins/doc_fragments/fragment_name

  2. 使用其 FQCN 引用文档片段。

extends_documentation_fragment:
  - kubernetes.core.k8s_name_options
  - kubernetes.core.k8s_auth_options
  - kubernetes.core.k8s_resource_options
  - kubernetes.core.k8s_scale_options

文档片段 涵盖了文档片段的基础知识。这 kubernetes.core 集合包含一个完整的示例。

如果您使用 FQCN,则可以在一个集合中使用另一个集合的文档片段。

在集合中利用可选模块实用程序

可选模块实用程序使您能够在基于集合的模块中采用来自最新 ansible-core 版本的最新功能,而不会在旧版 Ansible 版本上破坏您的集合。使用可选模块实用程序,您可以在针对最新版本运行时使用最新功能,同时在针对旧版本运行时仍然提供回退行为。

这种实现(在 Python 编程中广泛使用)将可选导入包装在条件语句或防御性 try/except 块中,并为缺少的导入实现回退行为。Ansible 的模块有效载荷构建器通过将嵌套在块(例如,iftry)中的任何 module_utils 导入视为可选来支持这些模式。如果在有效载荷构建期间找不到请求的导入,它将简单地从目标有效载荷中省略,并假定导入代码将在运行时处理其缺失。缺少 module_utils 包的顶级导入(任何类型的块语句中都没有包装的导入)将导致模块有效载荷构建失败,并且不会在目标上执行。

例如,ansible.module_utils.common.respawn 包仅在 Ansible 2.11 及更高版本中可用。以下模块代码将在 Ansible 2.10 或更早版本上在有效载荷构建期间失败(因为请求的 Python 模块不存在,并且没有包装在块中以向有效载荷构建器发出信号表明它可以从模块有效载荷中省略)

from ansible.module_utils.common.respawn import respawn_module

通过将导入语句包装在 try 块中,有效载荷构建器将省略 Python 模块(如果找不到它),并假定 Ansible 模块将在运行时处理它

try:
    from ansible.module_utils.common.respawn import respawn_module
except ImportError:
    respawn_module = None
...
if needs_respawn:
    if respawn_module:
        respawn_module(target)
    else:
        module.fail_json('respawn is not available in Ansible < 2.11, ensure that foopkg is installed')

可选导入行为也适用于从集合导入的 module_utils。

列出集合依赖项

我们建议集合作为独立的、独立的单元工作,仅依赖于 ansible-core。但是,如果您的集合必须依赖于其他集合的功能和功能,请在您的集合的 galaxy.yml 文件的 dependencies 下列出其他集合或集合。使用 meta/runtime.yml 文件来设置您的集合所依赖的 ansible-core 版本。有关 galaxy.yml 文件的更多信息,请参见 集合 Galaxy 元数据结构.

您可以在本地开发和测试期间将 Git 存储库用于集合依赖项。例如

dependencies: {'[email protected]:organization/repo_name.git': 'devel'}

警告

不要将 Git 存储库用作已发布集合的依赖项。已发布集合的依赖项必须是其他已发布集合。

另请参见

使用 Ansible 集合

了解如何安装和使用集合。

为 Ansible 维护的集合做出贡献

为选定的集合做出贡献的指南

沟通

有疑问?需要帮助?想要分享您的想法?访问 Ansible 沟通指南