集合级依赖项

当 Ansible Builder 将集合安装到执行环境中时,它还会安装每个集合在 Galaxy 上列出的控制器端 Python 或系统包依赖项。

为了让 Ansible Builder 找到并安装集合依赖项,这些依赖项必须在集合存储库中的文件中定义。

注意

如果存在,以下文件必须包含在 Galaxy 上打包的集合中。Ansible Builder 无法安装在包含在集合 build_ignore 中的文件中列出的依赖项,因为这些文件不包含在集合工件中。

如果您是集合维护者,请确保控制器端依赖项已指定并已验证

我们建议您在 meta/execution-environment.yml 文件中指定依赖项文件路径。以下是一个内容示例

dependencies:
  python: meta/ee-requirements.txt  # List Python package requirements in the file
  system: meta/ee-bindep.txt  # List system package requirements in the file

如果 meta/execution-environment.yml 文件不存在,默认情况下,Ansible Builder 会期望依赖项在

  • 集合根目录下的 requirements.txt 文件中定义 Python 包需求

  • 集合根目录下的 bindep.txt 文件中定义系统包需求

注意

如果您的集合在根目录中使用 requirements.txtbindep.txt 文件用于除控制器端依赖项以外的任何其他目的,例如列出测试需求,请确保您使用 meta/execution-environment.yml 文件为执行环境目的指定其他依赖项文件。

依赖项自省

如果给出了任何依赖项,则 Ansible Builder 会运行自省,以便在容器映像组装之前找到需求。

用户可以使用 build -v3 选项在构建器中间阶段查看自省输出。

如何验证集合级元数据

注意

运行下面描述的自省命令不是构建和使用执行环境的典型工作流程的一部分。

集合开发人员可以验证在集合中指定的依赖项是否会被 Ansible Builder 正确处理。

为此,集合必须在本地安装。

使用 ansible-galaxy 安装集合时

安装集合的最简单方法是使用 ansible-galaxy 命令,该命令是 ansible 包的一部分。

对您的集合路径运行 introspect 命令

ansible-builder introspect COLLECTION_PATH

ansible-galaxy 命令使用的默认集合路径是 ~/.ansible/collections/。有关集合路径的更多信息,请参阅 Ansible 配置设置 指南。

注意

使用 -v3 选项对 introspect 查看有关被排除需求的日志消息。

手动安装集合时

如果您从 Galaxy 手动下载集合 tarballs 或克隆集合 git 存储库,为了使 introspect 命令正常工作,请确保您使用以下目录结构存储您的集合

ansible_collections/NAMESPACE/COLLECTION

例如,如果您需要检查 community.docker 集合,路径将为

ansible_collections/community/docker

然后,如果 ansible_collection 目录位于您的主目录中,您可以使用以下命令运行 introspect

ansible-builder introspect ~/

Python 依赖项

Ansible Builder 将来自所有集合的所有 Python 需求文件合并到一个文件中。

ansible-builder 特别忽略某些包名称,这意味着 Ansible Builder 不会将它们包含在合并的 Python 依赖项文件中,即使集合将它们列为依赖项。这些包括测试包和提供 Ansible 本身的包。完整的列表可以在 src/ansible_builder/_target_scripts/introspect.py 中的 EXCLUDE_REQUIREMENTS 中找到。

如果您需要包含这些被忽略的包名称之一,请使用 introspect 命令的 --user-pip 选项将其列在用户需求文件中。以这种方式提供的包不会针对被排除的 Python 包列表进行处理。

注意

这些依赖项受限于在 EE 定义规范 中为 Python 需求描述的相同 PEP 508 格式限制。

系统级依赖项

对于系统包,请使用 bindep 格式指定跨平台需求,以便它们可以通过执行环境使用的任何包管理系统安装。集合应指定对 [platform:rpm] 的必要需求。

Ansible Builder 将来自多个集合的系统包条目合并到一个文件中。

  • 具有 compile 配置文件的需求表明这些需求是安装其他需求(尤其是 Python 需求)所必需的,但不需要出现在最终构建中。

  • 具有 epel 配置文件的需求表明将在安装这些需求之前启用 EPEL 存储库。

  • 只有没有配置文件的需求(运行时需求)才会安装到映像中。

来自多个集合的完全重复的条目可能会在合并文件中合并。