21.2. 配置选项


在定义文件中使用以下配置 YAML 键。

Ansible Builder 3.x 执行环境定义文件接受七个顶级部分:

21.2.1. additional_build_files

构建文件指定要添加到构建上下文目录中的内容。然后,可以在任何构建阶段通过 additional_build_steps 引用或复制它们。

格式是字典值的列表,每个值都有一个 srcdest 键和值。

每个列表项都必须是一个字典,其中包含以下所需键:

src

指定要复制到构建上下文目录中的源文件。

这可以是绝对路径,例如 /home/user/.ansible.cfg,也可以是相对于该文件的路径。相对路径可以是与一个或多个文件匹配的 glob 表达式,例如 files/\*.cfg。请注意,绝对路径不得包含正则表达式。如果 src 是目录,则该目录的整个内容将复制到 dest

dest

指定构建上下文目录的 _build 子目录下的子目录路径,该路径包含源文件,如 files/configs

这不能是绝对路径,也不能包含 ..。如果该目录不存在,则会为您创建该目录。

注意

当使用 ansible.cfg 文件将私有帐户的令牌和其他设置传递给自动化中心服务器时,在此处列出配置文件路径作为字符串,使其作为构建初始阶段的构建参数包含。

21.2.2. additional_build_steps

构建步骤为任何构建阶段指定自定义构建命令。这些命令直接插入到容器运行时的 build 指令文件中,如 Containerfile 或 Dockerfile。命令必须符合容器化工具所需的任何规则。

您可以在镜像创建过程的任何阶段之前或之后添加构建步骤。例如,如果在安装依赖项前需要安装 git,您可以在基本构建阶段添加构建步骤。

以下是有效的密钥。分别支持多行字符串或字符串列表。

append_base

构建基础镜像后插入的命令。

append_builder

构建构建器镜像后要插入的命令。

append_final

构建最终镜像后要插入的命令。

append_galaxy

构建 galaxy 镜像后插入的命令。

prepend_base

在构建基础镜像前插入的命令。

prepend_builder

在构建构建器镜像前插入的命令。

prepend_final

在构建最终镜像前插入的命令。

prepend_galaxy

在构建 galaxy 镜像前插入的命令。

21.2.3. build_arg_defaults

这将构建参数的默认值指定为字典。

这是使用- build-arg CLI 标志的替代选择。

Ansible Builder 使用以下构建参数:

ANSIBLE_GALAXY_CLI_COLLECTION_OPTS

允许用户传递 -pre 标志和其他标志来启用预发布集合的安装。

ANSIBLE_GALAXY_CLI_ROLE_OPTS

这可让用户将任何标记(如 --no-deps )传递给角色安装。

PKGMGR_PRESERVE_CACHE

这控制在镜像构建过程中清除软件包管理器缓存的频率。

如果没有设置这个值(这是默认值),则缓存会被频繁清除。如果 值始终为,则缓存永远不会清除。在最终构建阶段安装系统依赖项后,任何其他值都会强制缓存被清除。

build_arg_defaults 中给出的 Ansible Builder 硬编码值,以便在手动运行容器构建时保留它们。

如果您在定义中指定相同的变量,且在命令行中使用 CLI build-arg 标志,CLI 值会覆盖定义中的值。

21.2.4. 依赖项

指定要安装到最终镜像的依赖项,包括 ansible-coreansible-runner、Python 软件包、系统软件包和集合。Ansible Builder 会自动安装您安装的任何 Ansible 集合的依赖项。

通常,您可以使用标准语法来约束软件包版本。使用您传递给 dnfpipansible-galaxy 或任何其他软件包管理工具的语法。您还可以在单独的文件中定义软件包或集合,并在定义文件的 dependencies 部分中引用这些文件。

以下键有效:

ansible_core

要安装 ansible-core Python 软件包的版本。

这个值是一个字典,其中包含一个键 package_pippackage_pip 值直接传递给 pip 进行安装,并可采用 pip 支持的任何格式。以下是一些示例值:

ansible_core:
    package_pip: ansible-core
ansible_core:
    package_pip: ansible-core==2.14.3
ansible_core:
    package_pip: https://github.com/example_user/ansible/archive/refs/heads/ansible.tar.gz

ansible_runner

要安装的 Ansible Runner Python 软件包的版本。

这个值是一个字典,其中包含一个键 package_pippackage_pip 值直接传递给 pip 进行安装,并可采用 pip 支持的任何格式。以下是一些示例值:

ansible_runner:
    package_pip: ansible-runner
ansible_runner:
    package_pip: ansible-runner==2.3.2
ansible_runner:
    package_pip: https://github.com/example_user/ansible-runner/archive/refs/heads/ansible-runner.tar.gz

galaxy

要从 Ansible Galaxy 安装的集合。

这可以是 Ansible Galaxy requirements.yml 文件的文件名、字典或多行字符串。有关要求文件格式的更多信息,请参阅 Galaxy 用户指南

python

Python 安装要求。

这可以是文件名,也可以是要求列表。Ansible Builder 使用 requirements-parser 库将所有集合中的所有 Python 要求文件合并到一个文件中。

此库支持复杂的语法,包括对其他文件的引用。如果很多集合需要相同的 软件包名称,Ansible Builder 会将它们合并到一个条目中,并组合了约束。

Ansible Builder 排除 Python 依赖项组合文件中的一些软件包,即使集合将它们列为依赖项。其中包括提供 Ansible 本身的测试软件包和软件包。完整列表可以在 src/ansible_builder/_target_scripts/introspect.py 中的 EXCLUDE_REQUIREMENTS 下提供。

如果您需要包含其中一个排除的软件包名称,请使用 introspection 命令的 --user-pip 选项,在用户要求文件中列出它。

以这种方式提供的软件包不会针对排除的 Python 软件包列表进行处理。

python_interpreter

定义 dnf 要安装的 Python 系统软件包名称的字典(package_system)或要使用的 Python 解释器的路径(python_path)

system

要安装的系统软件包,采用 bindep 格式。这可以是文件名或要求列表。

有关 bindep 的更多信息,请参阅 OpenDev 文档

对于系统软件包,使用 bindep 格式来指定跨平台要求,因此可以通过执行环境使用的软件包管理系统进行安装。集合必须为 [platform:rpm] 指定必要的要求。Ansible Builder 将来自多个集合的系统软件包条目合并到一个文件中。只有没有配置集(运行时要求)的要求才会安装到镜像中。许多集合中可以合并在组合文件中重复的条目。

以下示例使用包含各种依赖项的文件名:

dependencies:
  python: requirements.txt
  system: bindep.txt
  galaxy: requirements.yml
  ansible_core:
      package_pip: ansible-core==2.14.2
  ansible_runner:
      package_pip: ansible-runner==2.3.1
  python_interpreter:
      package_system: "python310"
      python_path: "/usr/bin/python3.10"

这个示例使用内联值:

dependencies:
  python:
    - pywinrm
  system:
    - iputils [platform:rpm]
  galaxy:
    collections:
      - name: community.windows
      - name: ansible.utils
        version: 2.10.1
  ansible_core:
      package_pip: ansible-core==2.14.2
  ansible_runner:
      package_pip: ansible-runner==2.3.1
  python_interpreter:
      package_system: "python310"
      python_path: "/usr/bin/python3.10"
注意

如果这些依赖项文件(requirements.txt、bindep.txt 和 requirements.yml)位于集合的 build_ignore 中,则构建会失败。

集合维护器可以使用 introspection 命令验证 ansible-builder 是否可以识别他们期望的要求:

ansible-builder introspect --sanitize ~/.ansible/collections/

--sanitize 选项查看所有集合要求并删除重复项。它还会删除通常排除的任何 Python 要求(请参阅 python 依赖项)。

使用 -v3 选项 内省,以查看关于被排除的要求的消息。

21.2.5. images

指定要使用的基础镜像。至少,您必须为基础镜像指定源、镜像和标签。基础镜像提供操作系统,也可以提供一些软件包。使用标准 host/namespace/container:tag 语法来指定镜像。您可以使用 Podman 或 Docker 快捷方式语法,但完整定义更为可靠和可移植。

本节的有效键包括:

base_image

定义执行环境的父镜像的字典。

必须为要使用的容器镜像提供 name 键。如果镜像在存储库中镜像,但使用原始镜像的签名密钥签名,请使用 signature_original_name 密钥。

21.2.6. 镜像验证

如果使用 podman 容器运行时,您可以验证签名的容器镜像。

设置 container-policy CLI 选项,以控制与容器镜像签名验证相关的 Podman policy.json 文件。

  • ignore_all 策略:在构建上下文目录 < context> 中生成一个 policy.json 文件,但没有执行签名验证。
  • 系统 策略:使用标准系统位置中的预先存在的 policy.json 文件来执行签名验证。Ansible-builder 不负责这些文件中的内容,并且用户对内容有完全的控制权。
  • signature_required 策略: ansible-builder 使用容器镜像定义在构建期间使用的 构建上下文目录 <context> 中生成 policy.json 文件来验证镜像。

21.2.7. options

影响运行时功能的关键字或选项的字典。

本节的有效键包括:

  • container_init: 带有键的字典,用于自定义容器 ENTRYPOINTCMD 指令(及相关行为)。自定义这些行为是一个高级任务,可能会导致无法调试失败。由于提供的默认值控制多个中间的行为,覆盖任何值都跳过此字典中的所有剩余默认值。

    有效键是:

    • cmd: CMD Containerfile 指令的 Literal 值。默认值为 ["bash "]。
    • ENTRYPOINT: ENTRYPOINT Containerfile 指令的 Literal 值。默认入口点行为处理到子进程的信号传播,并在运行时确保容器用户具有具有有效写入主目录(在 /etc/passwd 中代表)的正确环境(在 /etc/passwd 中表示),并将 HOME 环境变量设置为匹配。当无法适当调整用户运行时环境时,默认入口点脚本会向 stderr 发送警告。此行为可以忽略或提升为致命错误;请查阅 entrypoint 目标脚本的来源以了解更多详细信息。

      默认值为 ["/opt/builder/bin/entrypoint", "dumb-init "]。

    • package_pip :使用 pip 进行入口点支持安装的软件包。此软件包安装在最终构建镜像中。

      默认值为 dumb-init==1.2.5

  • package_manager_path: 字符串,带有要使用的软件包管理器(dnf 或 microdnf)的路径。默认为 /usr/bin/dnf。这个值用于安装 Python 解释器,如果在 依赖项 中指定,并在 assemble 脚本的构建阶段指定。
  • skip_ansible_check :此布尔值控制检查在最终镜像上执行 Ansible 和 Ansible Runner 的安装。

    将此值设置为 True 以不执行此检查。

    默认值为 False

  • relax_passwd_permissions :此布尔值控制 root 组(GID 0)是否明确授予最终容器镜像中的 /etc/passwd 的写入权限。默认入口点脚本可以在某些容器运行时下尝试通过动态创建用户来更新 /etc/passwd,以确保全功能 POSIX 用户环境和主目录。禁用此功能可能会导致软件功能失败,要求用户在 /etc/passwd 中列出具有有效且可写入的主目录,例如 ansible-core 中的 async~username shell 扩展。

    默认值为 True

  • WORKDIR :在最终容器镜像下启动新进程的默认当前工作目录。有些容器运行时也将此值用作 root (GID 0)组中动态创建用户的 HOME。当指定这个值时,如果目录不存在,则创建该目录,设置为 root 组所有权,并且 rwx 组权限会递归应用到其中。

    默认值为 /runner

  • 用户 :这会设置用户名或 UID,以用作最终容器镜像的默认用户。

    默认值为 1000

示例选项:

options:
    container_init:
        package_pip: dumb-init>=1.2.5
        entrypoint: '["dumb-init"]'
        cmd: '["csh"]'
    package_manager_path: /usr/bin/microdnf
    relax_password_permissions: false
    skip_ansible_check: true
    workdir: /myworkdir
    user: bob

21.2.8. version

一个整数值,用于设置执行环境定义文件的 schema 版本。

默认为 1

如果使用 Ansible Builder 3.x,则该值必须是 3。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.