2.5. 定义文件内容的分类
使用 Ansible Builder 构建自动化执行环境需要定义文件,因为它指定了自动化执行环境容器镜像中包含的内容。
以下小节细分了定义文件的不同部分。
2.5.1. 构建参数和基础镜像
定义文件的 build_arg_defaults 部分是一个字典,其键可为 Ansible Builder 的参数提供默认值。下表列出了 build_arg_defaults 中可以使用的值:
| 值 | 描述 |
|---|---|
|
| 允许用户在集合安装过程中将任意参数传递给 ansible-galaxy CLI。例如,-pre 标志启用预发布集合的安装,或者 -c 禁用服务器的 SSL 证书的验证。 |
|
| 指定自动化执行环境的父镜像,启用基于已存在的镜像构建的新镜像这通常是一个受支持的执行环境基础镜像,如 ee-minimal 或 ee-supported,但它也可以是您之前创建的执行环境镜像,并希望进一步自定义。
默认镜像为 |
|
|
指定用于 Python 依赖项集合和编译的中间构建器镜像;必须包含带有
默认镜像为 |
build_arg_defaults 中指定的值将硬编码到 Containerfile 中,因此这些值将在手动调用 podman build 时保留。
如果在 CLI --build-arg 标志中指定相同的变量,CLI 值将具有更高的优先级。
2.5.2. Ansible 配置文件路径
ansible_config 指令允许指定到 ansible.cfg 文件的路径,在构建的 Collection 安装过程中将专用帐户的令牌和其他设置传递给自动化中心服务器。配置文件路径应相对于定义文件位置,并将复制到生成的容器构建上下文中。
ansible.cfg 文件的格式应当类似以下示例:
例 2.2. ansible.cfg 文件
[galaxy] server_list = automation_hub [galaxy_server.automation_hub] url=https://cloud.redhat.com/api/automation-hub/ auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token token=my_ah_token
有关如何从自动化中心下载集合的更多信息,请参阅相关的 Ansible 文档页面。
2.5.3. 依赖项
为了避免自动化执行环境镜像出现问题,请确保 Galaxy、Python 和系统的条目指向有效的要求文件。
2.5.3.1. Galaxy
galaxy 条目指向 ansible-galaxy collection install -r … 命令的有效要求文件。
条目 requirements.yml 可以是对于自动化执行环境定义的文件夹目录的相对路径,也可以是绝对路径。
requirements.yml 文件的内容可能类似如下:
例 2.3. Galaxy 的 requirements.yml 文件
collections: - community.aws - kubernetes.core
2.5.3.2. Python
定义文件中的 python 条目指向 pip install -r … 命令的有效要求文件。
条目 requirements.txt 是一个文件,它会在集合已列出的 Python 依赖项之上安装额外的 Python 要求。它可以是对于自动化执行环境定义的文件夹目录的相对路径,也可以是绝对路径。requirements.txt 文件的内容应该类似以下示例,类似于 pip freeze 命令的标准输出:
例 2.4. Python 的 requirements.txt 文件
boto>=2.49.0 botocore>=1.12.249 pytz python-dateutil>=2.7.0 awxkit packaging requests>=2.4.2 xmltodict azure-cli-core==2.11.1 python_version >= '2.7' collection community.vmware google-auth openshift>=0.6.2 requests-oauthlib openstacksdk>=0.13 ovirt-engine-sdk-python>=4.4.10
2.5.3.3. System
定义中的 system 条目指向一个 bindep 要求文件,该文件将安装集合中已存在的系统级依赖项。它可以是对于自动化执行环境定义的文件夹目录的相对路径,也可以是绝对路径。至少,集合会为 [platform:rpm] 指定必要的要求。
要演示这一点,以下是 bindep.txt 文件示例,该文件将 libxml2 和 subversion 软件包添加到容器中:
例 2.5. bindep.txt 文件
libxml2-devel [platform:rpm] subversion [platform:rpm]
来自多个集合的条目合并到一个文件中。这通过 bindep 进行处理,然后传递到 dnf。镜像中仅会安装没有配置集或无运行时要求的要求。
2.5.4. 额外的自定义构建步骤
prepend 和 append 命令可以在 additional_build_steps 部分中指定。这些将添加命令到 Containerfile,该文件将在执行主要构建步骤之前或之后运行。
additional_build_steps 的语法必须是以下之一:
一个多行的字符串
例 2.6. 一个多行的字符串条目
prepend: | RUN whoami RUN cat /etc/os-release
一个列表
例 2.7. 一个列表条目
append: - RUN echo This is a post-install command! - RUN ls -la /etc