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 要求使用 dnf 或 microdnf 包管理器的基于 RPM 的容器镜像。不支持非 RPM 基础的发行版(如 Debian、Ubuntu 或 Alpine),尝试构建将会失败。
Ansible Builder 的默认配置和内部工具假设使用 dnf 包管理(这在基于 RPM 的 Linux 发行版中提供)。以下是可以与 Ansible Builder 协同工作的镜像示例:
CentOS Stream:
quay.io/centos/centos:stream9Rocky Linux:
quay.io/rockylinux/rockylinux:9Fedora:
registry.fedoraproject.org/fedora:43Red Hat Universal Base Image (UBI):
registry.access.redhat.com/ubi9/ubi:latest基于 RHEL 的 Ansible Automation Platform 镜像:
registry.redhat.io/ansible-automation-platform-*/ee-*
以上示例展示了兼容的镜像,但任何带有 dnf 或 microdnf 的基于 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 构建镜像,也会执行相同的四个阶段。这些阶段分别是:
Base(基础):使用 Podman 或 Docker 拉取您定义的基础镜像,然后安装 Python 版本(如果定义了且与基础镜像中的 Python 不同)、pip、ansible-runner 以及 ansible-core 或 ansible。构建过程随后的所有三个阶段都基于 Base 阶段的输出。
Galaxy:从 Galaxy 下载您定义的集合,并将其作为文件暂存到本地。
Builder:下载您定义的所有其他包(Python 包和系统包),并将其作为文件暂存到本地。
Final(最终):整合前三个阶段,将所有暂存的文件安装到 Base 阶段的输出之上,并生成一个包含所有内容的最终镜像。
Ansible Builder 在容器构建过程的每个阶段都注入了钩子(hooks),因此您可以在每个构建阶段之前和之后添加自定义步骤。
您可能需要在 Galaxy 和 Builder 阶段之前安装某些包或实用程序。例如,如果您需要从 GitHub 安装集合,则必须在 Base 阶段之后安装 git,以便在 Galaxy 阶段可以使用。
要添加自定义构建步骤,请在执行环境定义中添加 additional_build_steps 部分。更多详情,请阅读 CLI 使用文档。
定义集合依赖
当 Ansible Builder 将集合安装到执行环境时,如果指定了每个集合的依赖项,它也会同时安装这些依赖项。集合维护者可以通过 集合级依赖页面学习如何正确声明其集合的依赖项。