运维配置管理后端【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址https://gitcode.com/gh_mirrors/sa/salt点击查看免费下载导读Salt 的输出器outputter负责把 minion 返回的数据格式化成人类可读或机器可解析的文本。其中json_out模块将返回数据序列化为标准 JSON是脚本化、自动化对接 Salt 时最常用的输出器。本文以 salt.output.json_out.rst 为骨架结合 salt/output/json_out.py 源码、tests/pytests/unit/output/test_json_out.py 与 tests/pytests/integration/cli/test_salt_call.py 集成测试带你掌握--outjson的完整用法、--out-indent与output_indent的取值语义以及输出器在 Salt 内部的调度与序列化细节。一、模块定位Salt 的 JSON 输出器Salt 内置多种输出器highstate、json、key、nested、pprint、raw、txt、yaml等完整清单见 doc/ref/output/all/index.rst。json_out模块的虚拟名virtual name是json通过__virtual__()将模块重命名为json因此在命令行中写--outjson即可触发它见 salt/output/json_out.py。json_out的核心价值在于输出是标准 JSON任何语言的 JSON 解析器都能直接消费特别适合需要把 Salt 执行结果喂给 CI/CD、监控告警、自研 Web 平台的场景。二、触发方式命令行与配置双入口2.1 命令行指定所有 Salt CLIsalt、salt-call、salt-run、salt-key等都支持通用输出选项定义见 doc/ref/cli/_includes/output-options.rstsalt * test.ping --outjson salt * network.hw_addr en0 --outjson--out的取值见 salt/utils/parsers.py它映射到destoutput。2.2 配置文件中固化如果不希望每次敲命令都带参数可以在 Master 或 Minion 配置文件中设置output和output_indent例如conf/master、conf/minion。配置后所有输出默认走 JSON。三、缩进控制--out-indent 与 output_indent这是json_out文档中最核心的配置话题官方文档明确给出三种取值语义见 salt/output/json_out.py取值语义NullNone每个 minion 的返回结果合并为单行JSONpretty使用四空格缩进且对键排序sort_keys整数指定缩进级别空格数负数等价于单行3.1 通过 CLI 标志设置# 单行紧凑输出每 minion 一行适合逐行解析 salt * test.ping --outjson --out-indent-1 # 按空格数缩进 salt * test.ping --outjson --out-indent2 # 键排序 四空格缩进pretty salt-call test.ping --outjson --output-indentpretty--out-indent与--output-indent是同一选项的两个别名在 salt/utils/parsers.py 中声明destoutput_indent、typeint。注意CLI 层面它是整数类型所以pretty这种字符串取值只能通过配置文件output_indent设置。3.2 配置文件方式在conf/master或conf/minion中设置output: json output_indent: pretty # 或 None或整数四、按 minion 逐条输出的设计Salt 的输出器是按 minion 粒度工作的每个 minion 的返回数据到达 Master 后会被各自序列化为一个独立的 JSON 对象见 salt/output/json_out.py。$ salt * network.hw_addr en0 --outjson --out-indent-1 {dave: {en0: {hwaddr: 02:b0:26:32:4c:69, ...}}} {jerry: {en0: {hwaddr: 02:26:ab:0d:b9:0d, ...}}} {kevin: {en0: {hwaddr: 02:6d:7f:ce:9f:ee, ...}}} {mike: {en0: {hwaddr: 02:48:a2:4b:70:a0, ...}}} {phill: {en0: {hwaddr: 02:1d:cc:a2:33:55, ...}}} {stuart: {en0: {hwaddr: 02:9a:e0:ea:9e:3c, ...}}}官方文档特别提醒见 salt/output/json_out.py部分 JSON 解析器能猜出对象边界但很多不能。可靠的做法是使用单行输出格式逐行解析——每行一个完整 JSON 对象天然避免跨行截断问题。例如配合jqsalt * test.ping --outjson --out-indent-1 | jq -r keys[]五、源码级实现剖析5.1 output() 的缩进决策逻辑json_out.output(data, **kwargs)是模块入口见 salt/output/json_out.py其完整决策树如下若__opts__中不存在output_indent键直接以indent4输出默认行为等价于四空格缩进但不排序若output_indent为NoneindentNone输出为单行紧凑 JSON若为prettyindent4且sort_keysTrue键按字典序排序若为整数直接作为缩进空格数负数被归一化为None单行。最终统一调用salt.utils.json.dumps(data, defaultrepr, indentindent, sort_keyssort_keys)其中defaultrepr非常关键当返回数据里含有 JSON 无法原生序列化的对象如 Python 的datetime、自定义类时会退而求其次用repr()的字符串形式代替保证整体仍是合法 JSON。5.2 异常兜底except UnicodeDecodeError as exc: log.error(Unable to serialize output to json) return salt.utils.json.dumps({error: Unable to serialize output to json, message: str(exc)}) except TypeError: log.debug(An error occurred while outputting JSON, exc_infoTrue) return salt.utils.json.dumps({})遇到不可解码的字节序列时返回一个带error/message字段的 JSON 错误对象方便调用方程序化感知失败遇到其他序列化TypeError时返回{}保证任何情况下输出的都是合法 JSON不会向管道吐出裸异常堆栈。5.3 底层序列化封装 salt.utils.jsonjson_out使用的 salt/utils/json.py 是对标准库json的封装几个值得注意的点Unicode 兼容dumps/dump默认ensure_asciiFalse中文等非 ASCII 字符原样输出而非转义成\uXXXX便于阅读与传输见 salt/utils/json.py。这解释了单元测试test_unicode_output中Д能原样出现在输出里见 tests/pytests/unit/output/test_json_out.py快速库优先import_json()按ujson → yajl → json的顺序尝试导入优先使用更快的 C 实现见 salt/utils/json.pybytes 兼容loads遇到 Python 3.6 无法直接解析的 bytestring 时自动转成 Unicode 再解析见 salt/utils/json.py。六、输出器调度与回退机制当用户指定--outjson后数据流向为见 salt/output/init.pydisplay_output()先调用try_printout()取格式化结果try_printout()通过salt.loader.outputters(opts)加载所有输出器若指定的输出器不存在则回退到nested再不行回退到raw见 salt/output/init.py若指定了--out-file/--output-file结果写入文件追加模式而非 stdout否则通过print_cli()打印。因此即使json_out模块异常Salt 仍会兜底输出而不是静默丢弃数据。七、测试验证行为即契约json_out的行为被单元测试与集成测试双重锁定可作为你验证本地 Salt 环境输出行为的参照单元测试 tests/pytests/unit/output/test_json_out.py 覆盖无output_indent时默认输出、pretty键排序、整数缩进、0/负数缩进、Unicode 输出集成测试 tests/pytests/integration/cli/test_salt_call.py 用真实 CLI 断言了三种缩进下的精确输出# --out-indent-1 {local: true} # --out-indent0 { local: true } # --out-indent1 { local: true }这些断言与源码中负数 → 单行、整数 → 空格数的规则完全一致是理解行为最可靠的参考。八、实战建议脚本解析首选单行--outjson --out-indent-1保证每个 minion 一条记录逐行json.loads()即可避免依赖解析器的对象边界猜测能力日志/审计用 pretty需要人读时用--output-indentpretty四空格 键排序输出确定性强便于 diff程序化错误感知序列化失败时输出的是带error字段的合法 JSON调用方应显式检查该字段结果落盘配合--out-file将 JSON 结果直接追加写入文件供下游批处理消费。从 CLI 标志到output_indent配置从单行逐条解析到repr兜底与 Unicode 原样输出json_out是理解 Salt 输出器体系模块加载、虚拟名、回退机制的最佳切入口如需查看其他输出器可继续阅读 doc/ref/output/all/index.rst 中的yaml_out、nested等模块文档。赞分享运维配置管理后端【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址https://gitcode.com/gh_mirrors/sa/salt点击查看免费下载相关推荐RemoveWindowsAI 命令行参数速查3 种组合搞定 90% 的清理场景RemoveWindowsAI 命令行参数速查3 种组合搞定 90% 的清理场景 RemoveWindowsAI 是一个用于移除 Windows 11 中 C运维配置管理后端Salt Master 配置完全指南从 /etc/salt/master 到源码级参数解析Salt Master 配置完全指南从 /etc/salt/master 到源码级参数解析 SaltSaltStack是一个用于大规模基础设施与应用配置管运维配置管理后端Velero CLI 完全解析get restores 命令的参数、输出格式与源码级实现原理Velero CLI 完全解析 get restores 命令的参数、输出格式与源码级实现原理 本文以 Velero前身 Ark早期版本 v0.5.0 的云原生灾备存储后端上一篇把 Webamp 变成 Spotify 皮肤__customMediaClass 自定义媒体播放终极指南下一篇3分钟搞定Axure RP中文界面告别英文烦恼的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Docker Compose 模块化多环境配置规范指南:示例搭建Directus 12.4.0 Docker Compose 模块化多环境配置规范指南:示例搭建Directus 12.4.0Docker Compose 模块化多环境配置规范指南示例:Directus 12.4.0额外说明:Directus 可以干什么?目录结构规范配置文件详解与完整注释1. 全局公共环境配置… · 2026/9/24 16:00:12
Spring Cloud 学习与实践(5):Nacos 注册中心接入 文章目录Spring Cloud 学习与实践(5):Nacos 注册中心接入1. 本章目标2. 为什么需要注册中心3. Nacos 在当前项目中的角色4. 启动 Nacos Server4.1 单机模式5. 三个服务添加 Nacos Discovery 依赖6. 配置三个服务的 application.yml6.1 cloud-… · 2026/9/24 16:00:05
palera1n 实战:A8–A11 老设备 iOS 越狱完整指南(含模式选择与排错) palera1n 实战:A8–A11 老设备 iOS 越狱完整指南(含模式选择与排错) 【免费下载链接】palera1n Jailbreak for A8 through A11, T2 devices, on iOS/iPadOS/tvOS 15.0, bridgeOS 5.0 and higher. 项目地址: https://gitcode.com/GitHub_Tre… · 2026/9/24 16:35:17
王者荣耀弱网对抗:帧同步如何扛住460? 地铁,晚高峰,进站前最后三十秒。 你正在开团。屏幕右上角那个绿色的数字,突然变成了刺眼的红色: 460你做好了准备——画面冻结、角色僵直、然后瞬移回城泉水。 但这一次,什么都没发生。 你的技能照常释放,动画照常播放。只是敌人的走位,看起来慢了半拍。 三秒后,数字跳… · 2026/9/24 16:35:11
从安装到听到第一声广播:SDR++ 软件定义无线电新手实战指南 从安装到听到第一声广播:SDR 软件定义无线电新手实战指南 【免费下载链接】SDRPlusPlus Cross-Platform SDR Software 项目地址: https://gitcode.com/GitHub_Trending/sd/SDRPlusPlus
SDR 是一款跨平台、无冗余的开源软件定义无线电(SDR… · 2026/9/24 16:35:11
Prisma CLI `prisma local stop` 命令详解:停止本地开发集群 后端数据库GraphQL 【免费下载链接】prisma1 💾 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL & MongoDB) [deprecated] 项目地址: https://gitcode.com/gh_mirrors/pr/prisma1 点击查看 免费下载 prisma local stop 是 Pr… · 2026/9/24 16:35:04
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44