从任意文本文件中选取 JSON 对象

问题描述 投票:0回答:1

我需要在超过 10,000 个 Linux 节点上执行常规功能测试。我可以通过创建几个自定义事实,然后将节点的整组事实(包括自定义

ansible_local
事实)转储到漂亮的JSON文件中来适应ansible来做到这一点。每个节点都会生成自己的文件,生成的文本文件如下所示:

HOSTVARS (ANSIBLE GATHERED, group_vars, host_vars) :

{
   [[ VALID JSON OBJECT ]]
}

PLAYBOOK VARS:

{
    [[ VALID JSON OBJECT ]]
}

我可以用

sed
等编写一堆令人眼花缭乱的脚本来分割文本文件。但是,由于我将扫描和报告的节点数量较多,执行这些步骤将大大增加我编写的任何包装器脚本的占用时间。我宁愿只教 JSON 解析脚本识别源文件中也有一些非 JSON 文本并忽略它。

有哪些方法可以教授 Python 或其他语言来扫描复杂或任意文本文件中的 JSON 对象并将这些对象组装成可定义的字典?

json ansible scripting
1个回答
0
投票

我不明白为什么你不简单地生成有效的 JSON 输出,从而使你免于事后所有奇怪的解析。比如:

- hosts: all
  tasks:
    - set_fact:
        all_my_vars:
          host_vars: "{{ hostvars[inventory_hostname] }}"
          playbook_vars: "{{ vars }}"

    - delegate_to: localhost
      copy:
        content: |
          {{ all_my_vars|to_nice_json }}
        dest: "./reports/{{inventory_hostname}}.json"

这将为每个主机在名为

reports
的本地目录中生成一个文件。每个文件都包含一个 JSON 字典,该字典具有两个顶级键:
host_vars
playbook_vars
。内容就是你所期望的。

© www.soinside.com 2019 - 2024. All rights reserved.