跟踪 Salt Minion 上的命令失败

2023-12-24

我过去一个月一直在用盐。每当我运行命令时说sudo salt '*' test.ping,然后 master ping 所有 minion,响应是所有已启动并运行的 minion 的列表。输出看起来像这样:

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

在大师的conf文件,返回类型配置为 JSON。 但是如果我通过 salt master 执行了不正确的命令sudo salt '*' test1.ping,然后主人返回这样的东西

{
"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) - 还有很多问题未解决 https://github.com/saltstack/salt/issues/18510来解决这个问题。

获取有效的 JSON 输出

--static http://docs.saltstack.com/en/2014.7/ref/cli/salt-call.html#cmdoption-salt-call--out修复 JSON 输出的选项:

如果使用--out=json,你可能会想要--static以及。如果没有 static 选项,您将获得每个 Minion 的 JSON 字符串。

否则上面 Salt 给出的输出包含multiple无效的对象(每个小兵一个)JSON http://www.json.org/(JSON 需要single每个文档的对象、数组或值)以及通过标准 JSON 解析器加载整个输出的简单方法将会失败。甚至在文档 http://docs.saltstack.com/en/latest/ref/output/all/salt.output.json_out.html (as of 5188d6c https://github.com/saltstack/salt/blob/43e69d2842c34cfb49b8997c7c3d5b378b43406a/salt/output/json_out.py#L20):

一些 JSON 解析器可以猜测一个对象何时结束以及新对象何时开始,但许多解析器不能。

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

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

这个问题给我带来了很大的压力,所以我很快就生了这个Python脚本@75e42af https://github.com/uvsmtid/common-salt-states/blob/75e42afb04cbd7d82722c9793c1c9be6637b8bbd/states/bootstrap/bootstrap.dir/modules/utils/check_salt_output.py with 示例如何使用@ b819961d https://github.com/uvsmtid/common-salt-states/blob/b819961dbb683285329084952f24dab6f30d07c6/states/common/jenkins/configure_jobs_ext/build_bootstrap_package.xml#L57.

注意:这不会解决任意 Salt 命令的输出(包括test.ping上面),但涵盖了与状态执行输出相关的问题。还是有办法解决的test.ping上面的问题 - 它可以从状态运行,然后可以通过脚本分析输出。了解如何从状态内调用执行模块或*.sls file 在这个答案中 https://stackoverflow.com/a/20788572/441652.

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

  • 处理两者的输出highstate and orchestrate跑步者。
  • 处理多个 Minion 和任意数量命令的输出。
  • 报告总结“N”和总体结果。
  • 可用作脚本和模块的独立文件。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跟踪 Salt Minion 上的命令失败 的相关文章

  • SaltStack部署

    目录 一 SaltStack简介 1 基本简介 2 通信方式 3 功能简介 二 资源获取 1 官网地址 2 阿里云地址 三 部署 1 配置环境说明 2 资源配置 一 SaltStack简介 1 基本简介 SaltStack是一种新型的基础设
  • saltstack安装

    ubuntu install 1 ppa install sudo add apt repository ppa saltstack salt sudo apt get update sudo apt get install salt ma
  • saltstack之系统初始化状态编写

    saltstack之系统初始化状态编写 1 目录结构 2 关闭selinux 3 关闭防火墙 4 时间同步 chrony 5 内核优化与文件描述 6 ssh服务优化 7 精简开机系统服务 8 历史记录优化 设置终端超时时间 9 yum源 1
  • saltstack匹配minion以及自定义用户组nodegroup

    转载 http blog itpub net 30129545 viewspace 1456748 前提 操作在master在进行 minion id minion的唯一标示 默认情况minion id是minion的主机名 FQDN 你可
  • SaltStack常用模块

    SaltStack常用模块 SaltStack模块介绍 Module是日常使用SaltStack接触最多的一个组件 其用于管理对象操作 这也是SaltStack通过Push的方式进行管理的入口 比如我们日常简单的执行命令 查看包安装情况 查
  • SaltStack实现etcd自动扩容

    一 ETCD 概述 1 ETCD 简介 ETCD是用于共享配置和服务发现的分布式 一致性的KV存储系统 该项目目前最新稳定版本为2 3 0 ETCD是CoreOS公司发起的一个开源项目 授权协议为Apache 提供配置共享和服务发现的系统比
  • SaltStack 自动化运维详解

    一 自动化运维工具对比 使用所需软件配置单个服务器是一项相当简单的任务 但是 如果许多服务器需要安装相同或相似的软件和配置 则该过程将需要大量的工时才能完成 这会耗尽您本已紧张的资源 如果没有某种形式的自动化 这项任务几乎无法完成 考虑到这
  • saltstack+zabbix

    环境 server1 172 25 60 1 salt master salt minion zabbix server server2 172 25 60 2 salt minion zabbix agent 1 软件包安装过程存在许多依
  • saltstack的配置管理与数据系统

    saltstack的配置管理与数据系统 1 YAML语言 1 1 YAML的基本规则 2 使用SaltStack配置一个apache实例 2 1 在Master上部署sls配置文件并执行 3 使用SaltStack在minion02上配置n
  • saltstack架构拓展syndic

    架构 server1 master 写好httpd nginx 等salt server2 3 minion server4 top master server1 salt key d server4 server4 vim etc sal
  • 执行模块和状态模块最大的区别是什么

    最近 我正在向它的文档学习 salt 但是 我对执行模块和状态模块很困惑 为什么有两种类型的模块 为什么他们不能统一 如果我们只有一种类型的模块 可以在命令行和 sls 文件中使用 不是更简单更好吗 简而言之 执行模块 执行任务 状态模块
  • 在Master上触发事件并在Salt Minion上等待“响应事件”

    我想要的是由 Minion 调用的类似 RPC 的行为 并将其放入某种脚本中 然后可以由任何 非 Salt 非 Python 应用程序和服务调用 在Master上触发一个事件 有效负载对应于命令行参数 the Reactor system
  • 防火墙上需要哪些开放端口才能允许 salt-stack 远程执行?

    saltstack 上的文档似乎不清楚 salt master gt salt minion 需要哪些端口 显然不需要 它建议只需要从 salt minion gt salt master 打开端口 看 http docs saltstac
  • 跟踪 Salt Minion 上的命令失败

    我过去一个月一直在用盐 每当我运行命令时说sudo salt test ping 然后 master ping 所有 minion 响应是所有已启动并运行的 minion 的列表 输出看起来像这样 minion 1 true minion
  • 如何与盐师沟通

    我正在尝试从 salt minion 访问 salt master 但是 我无法获得 salt master 的密钥 在我的虚拟机上 我安装了salt master在我的 Windows 上 我安装了salt minion 我已经在我的mi
  • saltstack jinja 中的“json”和“tojson”过滤器有什么区别吗?

    根据 saltstack 文档 它是 json https docs saltstack com en latest ref renderers all salt renderers jinja html https docs saltst
  • 如何使用 Salt Stack 执行多个命令?

    我尝试添加 mypack pkg installed pkgs mercurial git cmd run name mkdir p opt mypack cmd run hg pull u R opt mypack hg clone R
  • 期望脚本在单独调用时有效,但不能作为盐状态

    我正在尝试通过expect 进行scp 和ssh 操作 如果我直接从终端调用下面的脚本 则它可以工作 usr bin expect myexpect sh但是当我使用 salt 运行它时 第一个 scp 命令在第二个 ssh 失败的地方起作
  • 如何在支柱中拥有可以被覆盖的基础值?

    我想将所有 Salt 文件 支柱 状态 数据文件等 存储在 git 存储库中 以便可以在多个不同的部署上克隆该存储库 然后我希望能够更改某些支柱设置的值 例如路径名或密码 但无需编辑版本控制中的原始文件 即这些修改仅是本地的 不一定是版本化
  • Salt 和 Python 的 YAML 语法

    这之间有什么区别 dic1 subdict1 1 value11 1 subdict1 2 value1 2 cubdict1 3 value1 3 和这个 dict2 subdict2 1 value2 2 subdict2 1 valu

随机推荐