程序化ansible:将结果保存到python变量

时间:2016-03-25 15:50:35

标签: python ansible ansible-2.x ansible-api

我正在使用此代码以编程方式运行ansible:https://github.com/jtyr/ansible-run_playbook带有一个简单的playbook,它只是从Ubuntu服务器收集事实并将它们打印到屏幕上:

- name: Test play
  hosts: all
  tasks:
    - name: Debug task
      debug:
        msg: "{{hostvars[inventory_hostname]}}"
      tags:
        - debug

但我真正需要的是简单地将输出保存到python变量中,而不是通过模板运行或输出到屏幕(我实际上将在Django应用程序中使用它)。有没有办法做到这一点?

感谢您的阅读。

1 个答案:

答案 0 :(得分:1)

输出始终是stdout。 Runner类无法更改此行为。我从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()