Ansible Builder 简介

通过 ansible-builder,您可以配置并构建可移植、一致且定制化的 Ansible 控制节点,这些节点由 Podman 或 Docker 封装为容器。这些容器被称为“执行环境”(Execution Environments)。您可以在 AWX 或 Ansible Controller 中使用它们,配合 Ansible Navigator 进行本地剧本(playbook)的开发与测试,在 CI 流水线中使用,以及在任何运行自动化的场景中使用。

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

注意

需要帮助或想讨论关于 Ansible Builder(包括文档)的问题?请参阅 社区指南,了解如何加入讨论!

容器概念与术语

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

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

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

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

  • 镜像(Image):容器的一个完整但非激活的版本 —— 您可以分发镜像,并基于每个镜像创建一个或多个容器。

什么是执行环境?

详情请参阅 执行环境入门指南

Ansible Builder 快速入门

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

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

  • 基础容器镜像

  • Python 版本

  • ansible-core 版本

  • ansible-runner 版本

  • Ansible 集合(带有版本限制)

  • 系统包(带有版本限制)

  • Python 包(带有版本限制)

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

选择基础镜像

Ansible Builder 要求使用 dnfmicrodnf 包管理器的基于 RPM 的容器镜像。不支持非 RPM 基础的发行版(如 Debian、Ubuntu 或 Alpine),尝试构建将会失败。

Ansible Builder 的默认配置和内部工具假设使用 dnf 包管理(这在基于 RPM 的 Linux 发行版中提供)。以下是可以与 Ansible Builder 协同工作的镜像示例:

  • CentOS Stream: quay.io/centos/centos:stream9

  • Rocky Linux: quay.io/rockylinux/rockylinux:9

  • Fedora: registry.fedoraproject.org/fedora:43

  • Red Hat Universal Base Image (UBI): registry.access.redhat.com/ubi9/ubi:latest

  • 基于 RHEL 的 Ansible Automation Platform 镜像: registry.redhat.io/ansible-automation-platform-*/ee-*

以上示例展示了兼容的镜像,但任何带有 dnfmicrodnf 的基于 RPM 的镜像都应该可行。

在选择基础镜像时,尽可能选择较小的镜像,因为这会产生较小的最终执行环境镜像。但是,请确保您了解基础镜像上已经安装了哪些包,以避免重复安装。例如,某些基础镜像已经安装了 Python,而有些则没有。

Ansible Builder 的执行方式

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

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

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

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

ansible-builder create 命令仅运行第一步。更多详情,请阅读 CLI 使用文档

Ansible Builder 如何构建镜像

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

  1. Base(基础):使用 Podman 或 Docker 拉取您定义的基础镜像,然后安装 Python 版本(如果定义了且与基础镜像中的 Python 不同)、pip、ansible-runner 以及 ansible-core 或 ansible。构建过程随后的所有三个阶段都基于 Base 阶段的输出。

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

  3. Builder:下载您定义的所有其他包(Python 包和系统包),并将其作为文件暂存到本地。

  4. Final(最终):整合前三个阶段,将所有暂存的文件安装到 Base 阶段的输出之上,并生成一个包含所有内容的最终镜像。

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

您可能需要在 Galaxy 和 Builder 阶段之前安装某些包或实用程序。例如,如果您需要从 GitHub 安装集合,则必须在 Base 阶段之后安装 git,以便在 Galaxy 阶段可以使用。

要添加自定义构建步骤,请在执行环境定义中添加 additional_build_steps 部分。更多详情,请阅读 CLI 使用文档

定义集合依赖

当 Ansible Builder 将集合安装到执行环境时,如果指定了每个集合的依赖项,它也会同时安装这些依赖项。集合维护者可以通过 集合级依赖页面学习如何正确声明其集合的依赖项。