
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 命令执行的相同操作。按照文档,我们选择了inventory、module和host_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')