编程 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()