简体中文

开发者工具·语法转换器

将 kubectl JSON 输出转换为您可以实际读取的清单

· 为什么它很重要

json yaml 开发人员工作流程

密集的 JSON 资源打开到缩进的 YAML 树中以供检查
原始 ToolAcre 矢量图

Kubernetes 工具发出 JSON ,它很精确但难以扫描,而清单是用 YAML 编写的。这篇文章展示了为什么它们之间的转换可以加快读取、比较和重用资源定义的速度。

上午 2 处有 200 行大括号 — 一个以 JSON 形式获取的部署以及需要埋藏在状态块中的字段

在事件期间,大型资源对象可以将相关选择器或条件隐藏在元数据和状态中。将捕获的 JSON 转换为缩进的 YAML 会删除标点符号,而不更改普通对象、数组、布尔值、数字、字符串和空值。收获是视觉扫描,而不是新的事实来源。

在使用任何浏览器页面之前编辑令牌、地址和标识符。 ToolAcre 严格解析 JSON 并在本地转储 YAML。它不会联系集群,也不知道该对象是否来自 kubectl、另一个客户端或已保存的设备。

为什么 API 会说 JSON 而人类会写 YAML — API 服务器的格式、明显的传统以及为什么两者都描述相同的对象

相同的 JSON 形资源树可以表示为 YAML 映射和序列。该存储库没有确定特定 Kubernetes 组件选择一种线路表示的原因或每个 API 端点如何协商媒体类型,因此本文避免将常见做法转变为有关 Kubernetes 内部结构的实现声明。

可以证明的范围更窄:JSON 输入被解析为 JavaScript 值,并且 js-yaml 以块样式序列化该值。数组保持有序,对象键保持与相同值关联,并且不明确的字符串会收到保护性引号。

JSON 和 YAML 可以承载相同的资源树; API 传输声明不在该转换器的证据范围内

缩进和破折号使嵌套更易于扫描,而块标量可以使多行字符串可读。这些是序列化器的选择。它们不会删除状态、验证 API 版本或使活动对象适合重新应用。即使 YAML 看起来不如 JSON 明确,带引号的类似日期的字符串仍保留文本。

使用转换来定位字段、比较形状并准备审阅副本。保留原始 JSON 以获取确切证据。如果启用排序键选项,对象呈现会进一步更改,而数组顺序保持不变。

YAML 更改表示形式,而不是 Kubernetes 对象或其有效性

活动对象通常包含由其服务器或控制器维护的字段。删除 `status`、`managedFields`、`uid` 或 `resourceVersion` 可能适合可重用清单,但 ToolAcre 不知道该策略并且从不删除它们。每次删除都必须是转换后经过深思熟虑的 Kubernetes 感知编辑。

可能会生成其他字段,但仍需要保留意图。与 git 中的版本进行比较并查阅所属系统的当前文档,而不是应用记忆的清理列表。转换器故意对域语义视而不见。

工作示例:作为 JSON 获取的服务 — 转换为 YAML,删除服务器填充的字段并与 git 中的版本进行比较

采用一个经过编辑的服务型对象,其中包含元数据、规范端口和状态块。将其转换为 YAML,使用您的操作过程识别服务器填充的字段,并仅删除那些批准用于可重用工件的字段。在任何应用步骤之前,将标签、选择器、端口和类型与版本控制进行比较。

YAML 编写者可以引用 `NO`、`yes`、`1.0` 等字符串或日期文本来保护其类型。这些引言并不是随意删除的杂乱。将编辑后的 ​​YAML 重新转换为 JSON 并比较数据树,同时记住编辑期间添加的注释无法在反向传递中幸存。

相反方向 - 将 YAML 清单转换为 JSON 以准确查看 API 将收到的内容,包括如何键入带引号的值

可以使用相反方向。 YAML 在严格的 JSON 模式或核心模式下读取,然后使用选定的缩进写入 JSON。严格模式将 `~`、空值和 `0o755` 保留为文本; Core 以不同的方式解决它们。两者都不将 `NO` 视为 false。

这可以清楚地显示 ToolAcre 的解析器将作为 JSON 形状的数据发送的内容。它并不能证明集群的 YAML 库或模式准入会做什么,特别是对于自定义标签或特定于应用程序的字段。

这不包括什么 - 根据 Kubernetes 模式验证清单,这需要 kubectl 的试运行或模式工具

未加载 Kubernetes 模式、CRD 定义或准入规则。未知字段、已弃用的版本和无效组合可能会完美转换。使用目标平台的试运行或模式感知验证器来解决这些问题。

ToolAcre 也无法进行身份验证、获取实时资源或比较所需状态和观察到的状态。它的工作以语法映射结束。保持该边界明确可以防止可读文件被误认为是已接受的清单。

要点:读取 YAML,在 JSON 中验证 — 以及语法转换器面板如何在不离开选项卡的情况下在两者之间切换

读取有助于任务的符号中的资源,但单独验证其数据和域规则。 JSON 提供明确的标点符号; YAML 提供紧凑的块视图。对于普通的 JSON 形值,即使注释和样式不能往返,两者也可以保留树。

语法转换器在浏览器中的这些视图之间切换并公开架构选项和警告。将其用作检查阶段,而不是作为删除字段或部署资源的权限。

对于事件注释,将原始命令输出、转换后的检查副本和每个手动删除记录为单独的工件。该线索可以让另一位工程师区分集群返回的内容和为了可读性或重用而删除的内容。它还可以防止干净的 YAML 摘录被误认为是完整的实时资源。转换器仅贡献符号变化;出处和变更控制仍然是操作工作流程的一部分。