Ansible Builder 简介

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

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

容器概念和术语

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 将集合安装到执行环境中时,如果指定了集合的依赖项,它也会安装这些依赖项。集合维护者可以从 集合级依赖项 页面了解如何为其集合正确声明依赖项。