Ansible Runner:使用 Python 代码运行 Ansible

401 阅读2分钟

Ansible Runner是一个 Python 模块,允许您从 Python 代码运行 Ansible playbook。它提供可直接导入和使用的与 Ansible 交互的 API

在 Python 中,处理 Ansible 的一种方法是使用诸如**subprocess**或 之类的模块来调用它**os.system**。Ansible Runner提供了一种更“ Python 化”的方式来执行此操作,即提供用于运行 Ansible 剧本的 Python API。它还“公开了一些帮助程序接口”,允许您提供
推荐的输入来启动 Runner 进程。在这里,我将回顾如何使用Ansible Runner运行 临时 Ansible命令和playbook**。

ansible_runner.运行

让我们从一个简单的 Ansible ad hoc 命令开始。我们将使用该模块从 CLI ping ping inventory.yml文件中的所有主机:

ansible -i inventory.yml all -m ping

使用 Ansible Runner 执行相同操作的方法如下:

#!/usr/bin/env python3
import ansible_runner

r = ansible_runner.run(
    inventory='inventory.yml',
    module='ping',
    host_pattern='all'
)

首先要导入**ansible_runner**模块。然后我们调用函数,然后我们可以传递所需的参数来复制我们使用 CLI 命令执行的相同操作。按照文档,我们选择了inventorymodulehost_pattern参数。 run

要运行剧本,我们必须使用剧本功能。其 CLI 命令如下:

ansible-playbook -i inventory.yml all playbook.yml

等效的 Ansible Runner 命令是:

#!/usr/bin/env python3
import ansible_runner
    
r = ansible_runner.run(
    inventory='inventory.yml',
    playbook='playbook.yml',
    host_pattern='all',
    extravars={
        'ansible_user': 'user',
        'ansible_password': 'password'
    }
)

默认情况下,ansible_runner.run**quiet**在控制台中显示标准输出和标准错误。可以通过将参数设置为来关闭此功能**True**。另请注意,在这种情况下,extravars参数将字典作为输入。文档解释了每个参数所需的数据类型。

ansible_runner.runner.Runner 对象

该**run函数** 返回一个**Runner**对象,我们将其存储在**r** 变量中。以下是该对象的属性列表**Runner** :

  • r.status: 表示执行状态的字符串。如果执行成功,状态将为“成功”。如果执行失败,状态将为“失败”。
  • r.rc:执行的返回代码的整数。如果执行成功,返回代码将为 0。如果执行失败,返回代码将为 1。
  • r.stdout:带有执行的标准输出的字符串。
  • r.stderr: 包含执行的标准错误的字符串。

这样可以轻松检查执行是否成功:

if r.status == 'successful':
    print('The execution was successful')
else:
    print('The execution failed')