在集合中使用共享资源
虽然开发包含在集合中的Ansible模块类似于开发独立的Ansible模块,但在集合中使用共享资源(如文档片段和模块工具)的方式有所不同。您可以在集合内部和跨集合使用文档片段。您可以使用可选的模块工具来支持集合中ansible-core的多个版本。集合也可以依赖于其他集合。
在集合中使用文档片段
要在集合中包含文档片段
创建文档片段:
plugins/doc_fragments/fragment_name
。使用其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的模块有效负载构建器通过将嵌套在块(例如if,try)中的任何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沟通指南