将 Runner 作为独立的命令行工具使用

**Ansible Runner** 命令行工具可以用作 **Ansible** 本身的标准命令行界面,但主要目的是为了适应自动化和管道工作流程。因此,它与 **Ansible** 本身的运行方式略有不同,因为您可以在几种不同的模式之间进行选择以启动命令。

虽然您可以启动 **Runner** 并将其所有输入都作为参数提供给命令行(就像您对 **Ansible** 本身所做的那样),但还有另一种界面,其中输入被收集到一个单独的位置,在命令行参数中称为 private_data_dir。 (参见 Runner 输入目录层次结构

要查看 ansible-runner 接受的参数

$ ansible-runner --help

独立 ansible-runner 实用程序的示例调用

$ ansible-runner run /tmp/private -p playbook.yml

其中 playbook.yml 是来自 /tmp/private/projects 目录的剧本,run 是您想要使用 **Runner** 调用的命令模式

Runner 接受的不同 **命令** 是

  • run 在前台启动 ansible-runner 并等待底层 **Ansible** 进程完成,然后再返回

  • startansible-runner 作为后台守护进程启动并生成一个 pid 文件

  • stop 终止使用 start 在后台启动的 ansible-runner 进程

  • is-alive 检查使用 start 在后台启动的 ansible-runner 进程的状态

**Runner** 在运行时会创建一个 artifacts 目录(参见 Runner 工件目录层次结构),无论它是在哪种模式下启动的。**Ansible** 的结果输出和状态将位于这里。您可以使用 -i IDENT 参数控制 artifacts 目录下的确切位置,否则将生成一个随机 UUID。

在前台执行 **Runner**

当使用 run 命令启动 **Runner** 时,如上所示,程序将停留在前台,您会看到与正常 **Ansible** 进程相同的输出。**Runner** 仍然会填充 artifacts 目录,如上一节所述,以保留输出并在退出后允许处理工件。

在后台执行 **Runner**

当使用 start 命令启动 **Runner** 时,程序将生成一个 pid 文件并移至后台。您可以使用 is-alive 命令检查其状态,或者使用 stop 命令终止它。您可以在 artifacts 目录中找到 stdout、状态和返回码。

运行剧本

使用 demo 作为私有目录的示例调用

$ ansible-runner run demo --playbook test.yml

直接运行模块

使用 demo 作为私有目录调用 debug 模块的示例

$ ansible-runner run demo -m debug --hosts localhost -a msg=hello

直接运行角色

使用 demo 作为私有目录和 localhost 作为目标的示例调用

$ ansible-runner run demo --role testrole --hosts localhost

Ansible 角色目录可以通过 --roles-path 选项提供。角色变量可以在运行时通过 --role-vars 传递。

使用进程隔离运行

**Runner** 支持进程隔离。进程隔离会创建一个新的挂载命名空间,其中根目录位于 tmpfs 上,该目录对主机不可见,并且在最后一个进程退出时会自动清理。您可以在命令行上提供 --process-isolation 参数来启用进程隔离。从 2.0 版本开始,**Runner** 默认使用 podman 作为进程隔离可执行文件,但通过传递 --process-isolation-executable 参数,它支持使用任何与 bubblewrap CLI 参数兼容的可执行文件

$ ansible-runner --process-isolation ...

**Runner** 支持各种进程隔离参数,这些参数允许您为进程隔离可执行文件提供配置详细信息。要查看 ansible-runner 接受的完整参数列表

$ ansible-runner --help

使用目录隔离运行

如果您需要能够并行执行多个可能相互冲突的任务,或者如果您想确保 Ansible/Runner 的单个调用不会污染或覆盖剧本内容,您可以给出一个基本路径

$ ansible-runner --directory-isolation-base-path /tmp/runner

**Runner** 将将项目目录复制到该路径下创建的临时目录中,将其设置为工作目录,并从该位置执行。运行完该临时目录后,将清理并删除。

指定备用清单

默认清单,如果未指定,将是 <private_data_dir>/inventory/。私有数据目录下的此子目录中的所有文件都将被处理为潜在的清单主机文件。您可以使用 --inventory 选项指定不同的清单。此值可以是以下之一

  • 位于 <private_data_dir>/inventory/ 内部的文件名。

  • 备用清单文件或目录的绝对路径或相对路径。此路径不必位于私有数据目录内。

示例

# Use inventory <private_data_dir>/inventory/hosts.backup
$ ansible-runner run demo -p test.yml --inventory hosts.backup

# Use inventory in the /path/to/alternate-inventory directory (outside of <private_data_dir>)
$ ansible-runner run demo -p test.yml --inventory /path/to/alternate-inventory

# Use inventory in the inventory2 subdirectory, relative to current directory
$ ansible-runner run demo -p test.yml --inventory inventory2

注意

使用进程隔离时,此选项无效。

将 json(原始事件数据)输出到控制台而不是正常输出

**Runner** 支持将 json 事件数据结构直接输出到控制台(和 stdout 文件)而不是标准 **Ansible** 输出,从而模仿 json 输出插件的行为。这是在工件目录中已经存在的事件数据之外的。您只需在命令行上提供 -j 参数即可

$ ansible-runner ... -j ...

清理工件目录

使用命令行参数 --rotate-artifacts 允许您控制存在的工件目录数量。给定此参数的参数,将导致 **Runner** 清理旧的工件目录。0 的默认值将禁用工件目录清理。