我们想要实现一个工作流程,其中包括 YAML 配置文件,我们希望在实际使用它们之前更改一些内容,并且我们正在寻找一个好的命令行工具来执行此操作。
这可以像在现有节点中设置特定于目标的值(如 URL)一样简单,但最好能够添加或修改 YAML 文件的整个块。在完美的世界中,我想要像 XSLT 中的轴一样强大的东西。
我们将在 Docker 文件中将其与 Maven 一起使用,我们更喜欢基于 Debian 的映像,但不是严格要求。
答案1
迈克·法拉赫yq
是我处理 YAML 的首选工具。例如,使用 Kubernetes 命名空间定义文件:
提取命名空间名称:
yq read deploy/namespace.yaml metadata.name
添加标签:
yq write deploy/namespace.yaml metadata.labels.name demo
(这将替换现有节点,或者如果还没有节点,则添加一个新节点)
该-i
选项可用于就地更新文件。
您不会发现 XSLT 工具通常可以做的所有事情(或者jq
对于 JSON),例如,您不会找到对子表达式的测试,因此您无法(据我所知)编写“在具有此值的其他子节点的节点上更新此子节点”的等效内容。
答案2
安德烈·基斯柳克yq
(这yq
与斯蒂芬提到的)是众所周知的 JSON 处理器的 Python 包装器jq
。
由于它是 的包装器jq
,因此它允许您对 YAML 文件进行jq
通常对 JSON 文件执行的任何处理。它还增加了就地编辑文件的能力。
该yq
实用程序还可以输出 JSON、TOML 和 XML。通过安装yq
,您可以获得额外的命令行工具来处理这些其他类型的结构化文档格式(tomlq
分别xq
用于 TOML 和 XML)。
该yq
实用程序在 OpenBSD、FreeBSD 和 NetBSD 上作为yq
软件包提供,在 macOS 上作为 Homebrew 软件包提供python-yq
。在 GNU 系统上,您可以yq
使用pip3
(pip3 install yq
或其变体)进行安装。另请参阅安德烈的安装说明为了yq
。