代码之家  ›  专栏  ›  技术社区  ›  CIsForCookies

如何在json中获取本地机器的可转换事实?

  •  0
  • CIsForCookies  · 技术社区  · 4 年前

    我正试图用我的本地机器收集事实 ansible_runner :

    import ansible_runner, json
    
    
    res = ansible_runnner.run(
        module='setup',
        host_pattern='localhost',
    )
    json.loads(res.stdout.read())
    

    但是 json 因为数据格式错误而中断。我试着用命令行ansible来做: ansible -m setup localhost > bla 然后更改文件,然后尝试 json.load 但还是卡住了。

    这里面有内置的ansible吗?

    0 回复  |  直到 4 年前
        1
  •  3
  •   larsks    4 年前

    Ansible的输出并不意味着是机器可解析的。例如,由制作的内容 res.stdout.read() 在您的示例中,包含ANSI颜色代码,这对于显示很好,但即使数据是有效的JSON,也会使其无效。

    您可以访问 setup 结构化形式的模块(即已经解析为Python数据结构) events 你的属性 res 变量。

    例如:

    >>> import ansible_runner
    >>> res = ansible_runner.run(module='setup', host_pattern='localhost')
    >>> setup_results= next(x for x in res.events if  x['event'] == 'runner_on_ok' and x['event_data']['task'] == 'setup')
    >>> facts = setup_results['event_data']['res']['ansible_facts']
    >>> print(facts['ansible_processor_vcpus'])
    8