使用 Runner 与执行环境
注意
有关执行环境的一般技术概述以及如何通过几个简单的步骤开始使用它的信息,请参阅执行环境入门指南。
执行环境旨在提供一种一致、可重现、可移植和可共享的方法,以便以与在笔记本电脑上执行完全相同的方式在Ansible AWX中运行 Ansible 自动化作业。这有助于开发旨在在Ansible AWX中或通过Red Hat Ansible Automation Platform以可预测的方式运行的自动化作业和 Ansible 内容。
更具体地说,在Ansible Runner上下文中,执行环境一词指的是通过Ansible Runner在OCI 兼容容器运行时中使用OCI 兼容容器镜像运行Ansible的容器运行时执行,该镜像适当地捆绑了Ansible 基础、Ansible 集合内容以及支持这些内容所需的运行时依赖项。Ansible Builder提供的构建工具有助于创建这些镜像。
在独立模式下运行Ansible Runner(请参阅:将 Runner 作为独立的命令行工具使用)的所有方面在此处都适用,但过程隔离本质上是一个容器运行时(默认为podman)。
从受保护的注册表使用执行环境
当运行使用来自私有/受保护注册表的执行环境容器镜像的作业时,您首先需要对注册表进行身份验证。
如果您通过ansible-runner run
手动运行作业,则首先通过podman login
在命令行上登录是一种身份验证方法。或者,创建一个包含键host
、username
和password
的container_auth_data
字典,并将其放入作业的env/settings
文件中,是确保成功拉取受保护的执行环境容器镜像的另一种方法。请注意,这涉及在文件中列出敏感信息,这些信息在作业运行完成后不会自动清理。
通过 AWX 远程运行作业时,Ansible Runner 可以从用户提供的容器注册表凭据中获取身份验证信息。来自凭据的host
、username
、password
和verify_ssl
输入通过container_auth_data
字典作为关键字参数传递到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