使用 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目录的 playbook,并且run是要使用**Runner**调用的命令模式

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

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

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

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

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

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

在前台执行**Runner**

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

在后台执行**Runner**

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

运行 Playbook

使用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作为进程隔离可执行文件,但支持使用任何与bubblewrap CLI 参数兼容的可执行文件,方法是传入--process-isolation-executable参数

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

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

$ ansible-runner --help

使用目录隔离运行

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

$ 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,禁用工件目录清理。