编程 ansible:将结果保存到 python 变量中
Programmatic ansible: save result into python variable
我正在使用此代码以编程方式 运行 ansible:https://github.com/jtyr/ansible-run_playbook 使用一个简单的剧本,它只从 Ubuntu 服务器收集事实并将它们打印到屏幕上:
- name: Test play
hosts: all
tasks:
- name: Debug task
debug:
msg: "{{hostvars[inventory_hostname]}}"
tags:
- debug
但我真正需要的是简单地将输出保存到 python 变量中,而不是通过模板 运行 将其输出到屏幕(实际上我将在一个 Django 应用程序)。有没有办法做到这一点?
感谢您的阅读。
输出总是输出到标准输出。 Runner
class 没有办法改变这种行为。我从 Can I redirect the stdout in python into some sort of string buffer? 得到了一个想法,下面的更改将保存 mystdout
中的输出。您可以通过调用 mystdout.getvalue()
来访问输出
from cStringIO import StringIO
def main():
runner = Runner(
...
# vault_pass='vault_password',
)
old_stdout = sys.stdout
sys.stdout = mystdout = StringIO()
stats = runner.run()
sys.stdout = old_stdout
print mystdout.getvalue()
我正在使用此代码以编程方式 运行 ansible:https://github.com/jtyr/ansible-run_playbook 使用一个简单的剧本,它只从 Ubuntu 服务器收集事实并将它们打印到屏幕上:
- name: Test play
hosts: all
tasks:
- name: Debug task
debug:
msg: "{{hostvars[inventory_hostname]}}"
tags:
- debug
但我真正需要的是简单地将输出保存到 python 变量中,而不是通过模板 运行 将其输出到屏幕(实际上我将在一个 Django 应用程序)。有没有办法做到这一点?
感谢您的阅读。
输出总是输出到标准输出。 Runner
class 没有办法改变这种行为。我从 Can I redirect the stdout in python into some sort of string buffer? 得到了一个想法,下面的更改将保存 mystdout
中的输出。您可以通过调用 mystdout.getvalue()
from cStringIO import StringIO
def main():
runner = Runner(
...
# vault_pass='vault_password',
)
old_stdout = sys.stdout
sys.stdout = mystdout = StringIO()
stats = runner.run()
sys.stdout = old_stdout
print mystdout.getvalue()