创建集合

要创建集合

  1. 使用 ansible-galaxy collection init 命令创建新的集合,可以选择使用自定义的集合模板

  2. 将模块和其他内容添加到集合中。

  3. 使用 ansible-galaxy collection build 将集合构建为集合工件。

  4. 使用 ansible-galaxy collection publish 将集合工件发布到 Galaxy。

然后,用户可以在其系统上安装您的集合。

命名您的集合

集合名称由命名空间和名称组成,两者之间用句点 ( . ) 分隔。命名空间和名称都应该是有效的 Python 标识符。这意味着它们应该由 ASCII 字母、数字和下划线组成。

注意

通常,命名空间和名称使用小写字母、数字和下划线,但不使用大写字母。

您应该通过检查 Ansible Galaxy 的命名空间列表,确保您使用的命名空间未被其他人注册。如果您选择的命名空间甚至完整的集合名称与 Galaxy 上的另一个集合冲突,则当您或其他人使用您的集合名称运行 ansible-galaxy collection install 时,您最终可能会得到另一个集合。即使该命名空间目前不存在,也可能会被其他人稍后创建。

如果您想在 Ansible Galaxy 上请求新的命名空间,请在 github.com/ansible/galaxy 上创建一个 issue

有一些特殊的命名空间

ansible:

ansible 命名空间由 Red Hat 拥有,并保留用于官方 Ansible 集合。两个特殊的成员是合成的 ansible.builtinansible.legacy 集合。这些在 Ansible Galaxy 上找不到,但已内置到 ansible-core 中。

community:

community 命名空间由 Ansible 社区拥有。来自此命名空间的集合通常位于 GitHub ansible-collection 组织中。如果您想在此命名空间中创建集合,请在论坛上请求

local:

local 命名空间在 Ansible Galaxy 上不包含任何集合,并且目的是永远不会改变。您可以将 local 命名空间用于本地计算机或 Git 存储库中的集合,而不必担心与 Ansible Galaxy 上实际存在的集合发生冲突。

创建新的集合

在包含 ansible_collections 的路径中创建您的集合框架,例如 collections/ansible_collections/

要启动新的集合,请在您的集合目录中运行以下命令

ansible_collections#> ansible-galaxy collection init my_namespace.my_collection

注意

命名空间和集合名称都使用相同的严格要求集。有关这些要求,请参阅 Galaxy 文档站点上的 Galaxy 命名空间

它将创建结构 [my_namespace]/[my_collection]/[collection skeleton]

提示

如果 Git 用于版本控制,则应在集合目录中初始化相应的存储库。

集合存在后,您可以使用您希望在集合中包含的内容填充目录。请参阅 ansible-collections GitHub 组织,以更好地了解您可以将哪些内容放入集合中。

参考:ansible-galaxy collection 命令

目前,ansible-galaxy collection 命令实现了以下子命令

  • init:基于 Ansible 附带的默认模板或您自己的模板创建基本集合。

  • build:创建可以上传到 Galaxy 或您自己的存储库的集合工件。

  • publish:将构建的集合工件发布到 Galaxy。

  • install:安装一个或多个集合。

要了解有关 ansible-galaxy 命令行工具的更多信息,请参阅 ansible-galaxy 手册页。

从自定义模板创建集合

内置的集合模板是一个使用 ansible-core 的简单集合示例,但是如果您想简化开发过程,您可能需要创建自定义集合模板以传递给 ansible-galaxy collection init

集合框架是一个看起来像集合目录的目录,但是任何 .j2 文件(不包括 templates/roles/*/templates/ 中的文件)都将由 ansible-galaxy collection init 进行模板化。框架的 galaxy.yml.j2 文件应使用变量 namespacecollection_name,它们派生自 ansible-galaxy init namespace.collection_name,并且将填充初始化集合的 galaxy.yml 文件中的元数据。默认情况下有一些附加变量可用(例如,version1.0.0),这些变量可以使用 --extra-vars 进行补充/覆盖。

一个接受可选字典变量 dependenciesgalaxy.yml.j2 文件示例如下所示

namespace: {{ namespace }}
name: {{ collection_name }}
version: "{{ (version|quote) is version("0.0.0", operator="gt", version_type="semver")|ternary(version, undef("version must be a valid semantic version greater than 0.0.0")) }}"
dependencies: {{ dependencies|default({}, true) }}

要使用新模板初始化集合,请使用 ansible-galaxy collection init 传递框架的路径

ansible_collections#> ansible-galaxy collection init --collection-skeleton /path/to/my/namespace/skeleton --extra-vars "@my_vars_file.json" my_namespace.my_collection

注意

ansible-core 2.17 之前,集合框架模板化仅限于少数硬编码变量,包括 namespacecollection_nameversion

注意

默认的集合骨架使用一个内部过滤器 comment_ify,该过滤器无法通过 --collection-skeleton 访问。使用 ansible-doc -t filter|test --list 查看可用的插件。

使用 ansible-creator 创建集合

ansible-creator 旨在快速搭建 Ansible 集合项目。

注意

Ansible 开发工具软件包提供了一种便捷的方式来安装 ansible-creator 以及一套精选的用于开发自动化内容的工具。

安装 ansible-creator 后,您可以通过以下方式之一初始化项目

  • 使用 init 子命令。

  • 在 Visual Studio Code 中使用带有 Ansible 扩展ansible-creator

另请参阅

使用 Ansible 集合

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

集合结构

集合骨架中包含的目录和文件

Ansible 开发工具 (ADT)

用于创建和测试 Ansible 内容的 Python 工具包。

交流

有问题吗?需要帮助吗?想分享你的想法吗?请访问 Ansible 交流指南