Ansible Builder 简介

使用 ansible-builder,您可以配置和构建可移植、一致、自定义的 Ansible 控制节点,这些节点作为 Podman 或 Docker 的容器打包。这些容器被称为执行环境。您可以在 AWX 或 Ansible Controller 上使用它们,使用 Ansible Navigator,用于本地剧本开发和测试,在您的 CI 管道中,以及您运行自动化的任何其他地方。

您可以为您的 Ansible 内容设计和分发专门的执行环境,选择您想要的 Python 和 ansible-core 版本,并仅安装您任务所需的 Python 包、系统包和 Ansible 集合。

注意

需要帮助或想讨论 Ansible Builder 包括文档?查看 社区指南 了解如何加入对话!

容器概念和术语

Ansible Builder 依赖于更通用的容器化工具,如 Podman 或 Docker。

在您开始使用 Ansible Builder 之前,您应该了解以下与任何容器使用相关的概念和术语。

  • 构建指令文件(在 Podman 中称为 Containerfile,在 Docker 中称为 Dockerfile):通过安装和配置代码和依赖项来创建容器镜像的指令文件。

  • 容器:一个包含代码和依赖项的包,它可以在各种计算环境中运行服务或应用程序。

  • 镜像:容器的完整但非活动版本 - 您可以分发镜像,并根据每个镜像创建一个或多个容器。

什么是执行环境?

有关详细信息,请参考 执行环境入门指南

Ansible Builder 快速入门

要开始使用 Ansible Builder,您必须安装 ansible-builder 实用程序和一个容器化工具。

拥有所需的工具后,创建一个 执行环境定义 文件。默认情况下,此文件名为 execution-environment.yml(也接受 .yaml 扩展名)。在执行环境定义文件中,您可以指定要包含在执行环境中的确切内容。您可以指定以下项目

  • 基础容器镜像

  • Python 版本

  • ansible-core 版本

  • ansible-runner 版本

  • Ansible 集合,带有版本限制

  • 系统包,带有版本限制

  • Python 包,带有版本限制

  • 其他要下载、安装或配置的项目

选择基础镜像

您可以使用您选择的任何基础镜像。一般来说,基础镜像越小,最终镜像就越小。但是,为了使 Ansible Builder 更有效率,您应该知道您使用的基础镜像上是否安装了任何包。

例如,一些基础镜像已经安装了 Python。另一些则没有。如果您使用一个已经安装了 Python 的基础镜像,您可以在您的执行环境定义文件中省略 Python。并非所有基础镜像都安装了包管理器。

Ansible Builder 如何执行

Ansible Builder 可以执行两个独立的步骤

  • 第一步是根据执行环境定义文件创建构建指令文件(对于 Podman 来说是 Containerfile,对于 Docker 来说是 Dockerfile)和构建上下文。

  • 第二步是运行一个容器化工具(Podman 或 Docker)来根据构建指令文件和构建上下文构建镜像。

ansible-builder build 命令执行这两个步骤。

ansible-builder create 命令只执行第一步。有关更多详细信息,请阅读 CLI 使用文档

Ansible Builder 如何构建镜像

Ansible Builder 在运行您的容器化工具来构建容器镜像时执行四个阶段。如果您使用 ansible-builder create 生成的构建指令文件和上下文直接使用 Podman 或 Docker 构建您的容器镜像,则会执行相同的四个阶段。这些阶段是

  1. 基础:使用 Podman 或 Docker 拉取您定义的基础镜像,然后安装 Python 版本(如果定义并不同于基础镜像上的任何 Python)、pip、ansible-runner 和 ansible-core 或 ansible。构建过程的后面三个阶段都是基于基础阶段的输出构建的。

  2. Galaxy:从 Galaxy 下载您定义的集合,并将其作为文件保存在本地。

  3. 构建器:下载您定义的其他包(Python 包和系统包),并将其作为文件保存在本地。

  4. 最终:集成前三个阶段,将所有保存在本地的文件安装到基础阶段的输出上,并生成一个包含所有内容的新镜像。

Ansible Builder 在容器构建过程的每个阶段都注入钩子,因此您可以在每个构建阶段前后添加自定义步骤。

您可能需要在 Galaxy 和构建器阶段之前安装某些包或实用程序。例如,如果您需要从 GitHub 安装一个集合,您必须在基础阶段之后安装 git,以使其在 Galaxy 阶段可用。

要添加自定义构建步骤,请在您的执行环境定义中添加一个 additional_build_steps 部分。有关更多详细信息,请阅读 CLI 使用文档

定义集合依赖项

当 Ansible Builder 将集合安装到执行环境中时,它也会安装每个集合的依赖项(如果指定了)。集合维护者可以从 集合级依赖项 页面了解如何为他们的集合正确声明依赖项。