【问题标题】:Need JSON output in return of Salt-api需要 JSON 输出以返回 Salt-api
【发布时间】:2017-10-18 16:06:11
【问题描述】:
   request({
        url: "https://xx.xxx.xxx.xxx:9999/run",
        headers: {
            'Accept': 'application/x-yaml',
            'X-Auth-Token': "41b9539436faae8016c305c2f875b31e47a23d93",
            'Content-type': 'application/json',
        },
        method: "POST",
        json: true,
        body: [{
            "client": "local",
            "tgt": "master_minion",
            "fun": "cmd.script",
            "kwarg": {"source": "salt://update-diff.py", "args":args},
            "username": "salt",
            "password": "salt",
            "eauth": "pam"
        }]
    }

我正在向 salt-api 传递一个运行脚本的请求。我需要解析输出。

示例输出:

return:
- master_minion:
    pid: 28796
    retcode: 0
    stderr: ''
    stdout: " sadfh,smfsdhg\n sfgmsfgmsg\n sfgmsfgmsg\n-dkfadnfklad--->New123\n+dkfadnfklad--->New1232\n\
      \ sdfjhs,dfhn\n sdfjhs,dfhn\n sdfjhs,dfhn"

我可以在 JSON 中获得这些输出吗??

我想要一个数组中的所有行,如下所示:

预期输出: ["sadfh,smfsdhg","sfgmsfgmsg","sfgmsfgmsg","-dkfadnfklad--->New123","+dkfadnfklad--->New1232","sdfjhs,dfhn","sdfjhs,dfhn","sdfjhs, dfhn"]

有什么建议吗??提前致谢

【问题讨论】:

    标签: json salt salt-stack


    【解决方案1】:

    要从 salt-api 返回 JSON,您只需更改请求标头中的 Accept-type:

      request({
            url: "https://xx.xxx.xxx.xxx:9999/run",
            headers: {
                'Accept': 'application/json',
      ...
    

    然后你会得到类似的东西:

    {
        "return": [
            {
                "master_minion": {
                    "pid": 28796,
                    "retcode": 0,
                    "stderr": "",
                    "stdout": " sadfh,smfsdhg\n sfgmsfgmsg\n sfgmsfgmsg\n-dkfadnfklad--->New123\n +dkfadn--->New1232\n  sdfjhs,dfhn\n sdfjhs,dfhn\n sdfjhs,dfhn"
                }
            }
        ]
    
    }
    

    根据您的预期输出,我认为这不是您想要的。但是您的预期输出不是 JSON。 JSON 是一种基于键值的数据结构,如 Python 字典。你期待一个列表之类的东西。您期望的列表可以是 JSON 的一部分,但需要一个密钥:

    { "key": ["sadfh,smfsdhg"," sfgmsfgmsg"," sfgmsfgmsg","-dkfadnfklad--->New123","+dkfadnfklad--->New1232"," sdfjhs,dfhn"," sdfjhs,dfhn"," sdfjhs,dfhn"] }
    

    salt-api 无法将已执行脚本的标准输出从任意字符串格式化为 JSON(它怎么知道 \n 是列表项的标记)。您需要通过将 update-diff.py 脚本中的输出格式化为 json(在脚本中)来自己完成。即使这样,您也只会得到一个带有 JSON 的字符串作为键标准输出,但您可以轻松提取它并继续处理。

    【讨论】:

      猜你喜欢
      • 2018-06-04
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多