将 Ansible 内容迁移到不同的集合

你可能决定将内容从一个集合移动到另一个集合;例如,从 community.generalcommunity.network 中提取一组相关的模块以创建一个更集中的集合。当你在集合之间迁移内容时,必须采取某些步骤以确保用户能够跟踪过渡。

迁移内容

如果要从中迁移内容的集合包含在 Ansible 社区包 中,请确保目标集合满足 Ansible 社区包集合要求。满足要求后,可以按如下方式迁移内容

  1. 将内容从源(旧)集合复制到目标(新)集合。

  2. 更改 M()、示例、seealsoextended_documentation_fragments 以在移动的内容、旧集合以及引用该内容的其他集合中使用实际的 FQCN。

  3. 移动所有相关的 issue、pull request 和 wiki 页面。

  4. 查看 ansible-documentation GitHub 仓库docs/docsite 目录(例如,使用 grep 命令行实用程序)以检查是否存在使用移动的模块和插件的示例,以便你可以更新这些 FQCN。

  5. 使用 removal_version 将模块/插件弃用,该版本计划在旧集合的 meta/runtime.yml 中的下一个主要版本中删除。在已将复制的内容包含在新集合的版本中之后,必须发布弃用。

  6. 准备旧集合的下一个主要版本时

  • 从旧集合中删除模块/插件

  • 删除相关的单元和集成测试

  • 删除特定模块实用程序(如果它们未被其他模块/插件或 module_utils 使用)

  • 如果旧集合中存在任何特定文档片段,则删除它们

  • 添加一个包含 removed_featuresbreaking_changes 条目的变更日志片段;你可以在此 pull request 中看到变更日志片段的示例

  • 更改旧集合中的 meta/runtime.yml

    • redirect 添加到相应模块/插件的条目中

    • 特别是,如果适用,请为已删除的模块实用程序和文档片段添加 redirect

    • 从此处删除 removal_version

  • 如果存在,则删除 tests/sanity/ignore.txt 文件中的相关条目

  • 删除尚未成为变更日志一部分的已删除内容的变更日志片段(换句话说,不要修改 changelogs/changelog.yaml 并且不要删除其中提到的文件)

  • 删除 tests/unit/requirements.txttests/requirements.ymlgalaxy.yml 中不再需要的需求

要实现这些更改,你需要创建至少三个 PR

  1. 针对新的集合创建一个 PR 以复制内容。

  2. 在旧集合中弃用模块/插件。

  3. 稍后针对旧集合创建一个 PR,以根据计划删除内容。

将内容添加到新的集合

在新集合中创建一个 PR 以

  1. 从旧集合复制所有相关文件。

  2. 如果是操作插件,请包含带有文档的相应模块。

  3. 如果是模块,请检查它是否具有应与其一起移动的相应操作插件。

  4. 如果存在,请仔细检查 meta/ 中对 runtime.yml 的相关更新。

  5. 仔细检查已移动的 tests/integrationtests/units 并更新 FQCN。

  6. 查看旧集合中的 tests/sanity/ignore-*.txt 条目。

  7. 更新旧集合中的 meta/runtime.yml

从旧集合中删除内容

针对源集合存储库创建一个 PR 以删除与此次迁移相关的模块、module_utils、插件和 docs_fragments

  1. 如果删除操作插件,请删除包含文档的相应模块。

  2. 如果删除模块,请删除任何应与其一起保留的相应操作插件。

  3. meta/runtime.yml 中删除关于已删除插件的任何条目。确保它们已添加到新存储库中。

  4. tests/sanity/ignore*.txt 中删除完整性忽略行

  5. tests/integrations/targets/ 中删除相关的集成测试,从 tests/units/plugins/ 中删除单元测试。

  6. 如果从 community.generalcommunity.network 中删除内容,请从 .github/BOTMETA.yml 中删除条目。

  7. 仔细查看 meta/runtime.yml 中可能需要删除或更新的任何条目,特别是已弃用的条目。

  8. 更新 meta/runtime.yml 以包含每个插件的重定向,指向新的集合名称。

警告

旧集合的维护者必须确保以不会破坏用户体验和语义版本控制的方式合并 PR

  1. 包含已合并 PR 的新版本必须在包含该内容的集合再次发布之前发布。否则,重定向将无法工作,依赖于该内容的用户将遇到中断。

  2. 一旦发布了已删除内容的集合的 1.0.0 版本,此类 PR 只能针对新的 **主要** 版本合并(换句话说,2.0.0、3.0.0 等)。

更新 BOTMETA.yml

BOTMETA.yml(例如,在 community.general 集合存储库 中)是以下内容的事实来源:

  • ansibullbot

如果旧集合和/或新集合具有 ansibullbot,则必须相应地更新其 BOTMETA.yml

Ansibulbot 将知道如何将现有的 issue 和 PR 重定向到新的存储库。docs.ansible.com 的构建过程将知道在哪里可以找到模块文档。

$modules/monitoring/grafana/grafana_plugin.py:
    migrated_to: community.grafana
$modules/monitoring/grafana/grafana_dashboard.py:
    migrated_to: community.grafana
$modules/monitoring/grafana/grafana_datasource.py:
    migrated_to: community.grafana
$plugins/callback/grafana_annotations.py:
    maintainers: $team_grafana
    labels: monitoring grafana
    migrated_to: community.grafana
$plugins/doc_fragments/grafana.py:
    maintainers: $team_grafana
    labels: monitoring grafana
    migrated_to: community.grafana

示例 PR

  • 必须为每个 *文件* 显式添加 migrated_to: 键。你不能在目录级别添加 migrated_to。这是为了允许模块和插件 webdocs 重定向到新的集合文档。

  • migrated_to: 必须添加到每个

    • 模块

    • 插件

    • module_utils

    • contrib/inventory 脚本

  • 你不需要为以下内容添加 migrated_to

    • 单元测试

    • 集成测试

    • ReStructuredText 文档(docs/docsite/rst/ 下的任何内容)

    • ansible/ansible:devel 中从未存在的文件

另见

使用 Ansible 集合

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

为 Ansible 维护的集合贡献代码

为选定集合贡献代码的指南

沟通

有问题?需要帮助?想分享您的想法?请访问 Ansible 通信指南