gpt4 book ai didi

salt-stack - 跟踪 Salt minion 上的命令失败

转载 作者:行者123 更新时间:2023-12-01 23:44:27 27 4
gpt4 key购买 nike

我用了一个月的 salt 。每当我运行命令说 sudo salt '*' test.ping 时,master 就会对所有 minions 执行 ping 操作,响应是所有已启动并正在运行的 minions 的列表。输出类似于:

{
"minion_1": true
}
{
"minion_2": true
}
{
"minion_3": true
}

在master的conf文件中,返回类型配置为JSON。但是如果我通过 salt master say sudo salt '*' test1.ping 执行不正确的命令,那么 master 会返回类似这样的内容

{
"minion_1": "'test1.ping' is not available."
}
{
"minion_2": "'test1.ping' is not available."
}
{
"minion_3": "'test1.ping' is not available."
}

在上面显示的两个输出中,该命令在主服务器的 shell/终端上给出了成功退出代码。我们如何跟踪哪些 minions 无法执行命令。我对它是什么类型的错误不感兴趣,我只需要一些或其他方法来跟踪未能执行命令的小兵。

最后的解决方案是编写一个解析器,它将读取完整的输出并自行决定。希望有更好的解决办法。

最佳答案

绝望的原因

目前我不会依赖 Salt 的 CLI 退出代码(版本 2014.7.5)- there are still many issues opened解决这个问题。

获取有效的 JSON 输出

--static修复 JSON 输出的选项:

If using --out=json, you will probably want --static as well. Without the static option, you will get a JSON string for each minion.

否则上面 Salt 给出的输出包含多个对象(每个 minion 一个),这不是有效的 JSON (JSON 要求每个文档单个对象、数组或值)并且通过标准 JSON 解析器加载整个输出的简单方法将失败。它甚至在 documentation 中提到(截至 5188d6c ):

Some JSON parsers can guess when an object ends and a new one begins but many can not.

除此之外,一些 Salt 选项(如 show_jid)还会将字符串发送到 STDOUT,将其与执行报告混合并使 JSON 输出格式无效。选项 --static 也解决了这个问题。

更新:检测 Salt 执行失败的解析器

这个问题太折磨我了所以我快生了this Python script @ 75e42afexample how it is used @ b819961d .

注意:这不会解决任意 Salt 命令的输出(包括上面的 test.ping),但会涵盖与状态执行输出相关的问题。上面的test.ping问题还是有解决办法的——可以从state运行,然后通过脚本分析输出。查看如何从状态或 *.sls 文件中调用执行模块 in this answer .

功能(代码本身的详细信息):

  • 处理来自 highstateorchestrate 运行程序的输出。
  • 处理多个 minions 和任意数量的命令的输出。
  • 报告摘要“? of N”和总体结果。
  • 可用作脚本和模块的独立文件。

唯一的限制是它需要 JSON 输出(Salt 选项 --out json),因为在将其提供给解析器之前很容易解决所讨论的问题。

关于salt-stack - 跟踪 Salt minion 上的命令失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29960947/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com