使用 Runner 与执行环境
注意
有关执行环境的通用技术概述以及如何通过几个简单的步骤开始使用它的信息,请参阅 执行环境入门指南.
执行环境旨在提供一种一致、可重现、可移植且可共享的方法,以便在您的笔记本电脑上以与在 Ansible AWX 中执行相同的方式运行 Ansible 自动化作业。这有助于开发旨在在 Ansible AWX 中运行的自动化作业和 Ansible 内容,或者通过 Red Hat Ansible Automation Platform 以可预测的方式运行。
更具体地说,在 Ansible Runner 的上下文中,执行环境是指通过 OCI 兼容容器运行时 在 Ansible Runner 中执行 Ansible,使用一个 OCI 兼容容器镜像,该镜像适当地捆绑了 Ansible 基础、Ansible 集合内容 以及支持这些内容所需的运行时依赖项。由 Ansible Builder 提供的构建工具有助于创建这些镜像。
在独立模式下运行 Ansible Runner 的所有方面(参见:将 Runner 作为独立命令行工具使用)在这里都是真实的,只是进程隔离本质上是一个容器运行时(默认情况下为 podman)。
从受保护的注册表使用执行环境
当运行使用来自私有/受保护注册表的执行环境容器镜像的作业时,您首先需要对注册表进行身份验证。
如果您是通过 ansible-runner run
手动运行作业,则通过 podman login
在命令行上先登录是一种身份验证方法。或者,创建一个 container_auth_data
字典,其中包含键 host
、username
和 password
,并将该字典放在作业的 env/settings
文件中,是确保成功拉取受保护的执行环境容器镜像的另一种方法。请注意,这涉及在文件中列出敏感信息,这些信息不会在作业运行完成后自动清理。
当通过 AWX 远程运行作业时,Ansible Runner 可以从用户提供的容器注册表凭证中获取身份验证信息。凭证中的 host
、username
、password
和 verify_ssl
输入通过 container_auth_data
字典作为关键字参数传递到 Ansible Runner,并作为 json
文件,该文件在作业运行结束时被删除(即使作业被取消/中断),从而能够绕过任何潜在的持久性作业相关文件中的敏感信息。
注意事项
在使用 Ansible Runner 和直接从命令行运行 Ansible 之间存在一些差异,这些差异与配置、内容位置和机密数据有关。
机密
通常,使用 Ansible 时,您可以通过一系列机制提供机密数据,其中许多机制是可插拔的,并且可以配置。但是,使用 Ansible Runner 时,需要考虑一些因素;这些因素类似于 Ansible AWX 如何管理此信息。
有关更多信息,请参阅 Runner 输入目录层次结构
容器名称
与所有 ansible-runner 作业一样,每个作业都有一个与之关联的标识符,该标识符也是保存结果的工件子文件夹的名称。当启动用于作业隔离的容器时,它将被赋予名为 ansible_runner_<job identifier>
的名称。作业标识符中的一些字符可能会被替换为下划线,以与 Podman 和 Docker 允许的名称兼容。
如果以后需要对容器执行命令(例如,在作业被取消时停止容器),则内部使用此名称。
~/.ssh/ 符号链接
为了使 Ansible 的 run
容器执行更容易,Ansible Runner 会自动将您的本地 ssh 代理 UNIX 域套接字 (SSH_AUTH_SOCK
) 绑定到容器运行时中。但是,如果您的 ~/.ssh/
目录中的文件恰好链接到另一个目录,而该目录也没有安装到容器运行时中,则这将不起作用。Ansible Runner run
子命令提供 --container-volume-mount
选项来解决这个问题,以及其他问题。
以下是一个作为符号链接的 ssh 配置文件示例
$ $ ls -l ~/.ssh/config
lrwxrwxrwx. 1 myuser myuser 34 Jul 15 19:27 /home/myuser/.ssh/config -> /home/myuser/dotfiles/ssh_config
$ ansible-runner run \
--container-volume-mount /home/myuser/dotfiles/:/home/myuser/dotfiles/ \
--process-isolation --process-isolation-executable podman \
/tmp/private --playbook my_playbook.yml -i my_inventory.ini