bash - 如何扩展 YAML 锚点和别名并在 Bash 中获取生成的 YAML?
问题描述
我有一个yaml
文件,在其中我使用锚点和别名来干燥文件。这是一个docker-compose
文件。简单例如如下:
version: "3.4"
x-build: &build
context: ../
services:
api:
build:
<<: *build
dockerfile: some-path/Dockerfile
image: gcr.io/some-project/api
我使用yq
然后jq
将其转换为json
并将其传递给,terraform
以便我可以重新使用其中的信息docker-compose
作为事实来源。
所有别名和锚点都从结果中删除json
。这不是一场灾难,但如果能真正扩大它会更好。
我正在寻找一个命令行工具,我可以在bash
脚本中运行以将上述内容json
作为输入并展开锚点和别名,并将结果写入标准输出,如下所示:
version: "3.4"
services:
api:
build:
context: ../
dockerfile: some-path/Dockerfile
image: gcr.io/some-project/api
有谁知道如何做到这一点?
解决方案
您为什么不将 yaml 作为事实来源?你应该看看云杉。基本上它是一个yaml
/ json
merge 工具,也可以转换为json
. 但是,它也会抛弃你的锚和别名。
转换yml
为 json,因此不再需要yq
和jq
操作了 :)
spruce json
合并yml
文件:
spruce merge file1.yml file2.yml
你的例子:
$ spruce merge spruce-input.yml
services:
api:
build:
context: ../
dockerfile: some-path/Dockerfile
image: gcr.io/some-project/api
version: "3.4"
x-build:
context: ../
$ spruce json spruce-input.yml | jq -r
{
"services": {
"api": {
"build": {
"context": "../",
"dockerfile": "some-path/Dockerfile"
},
"image": "gcr.io/some-project/api"
}
},
"version": "3.4",
"x-build": {
"context": "../"
}
}
推荐阅读
- python - 更改脚本以停止返回非素数并仅返回素数
- xcode - 由于 AudioFileID,无法在 Xcode 上编译它
- python-3.x - Numpy将数组减少到给定的形状
- asp.net-core - 使用 .Net Core 中的 PKCE 和 Okta 从 Swagger UI 连接 OpenID
- amazon-web-services - 如何从特定的 AWS 代码提交账户克隆分支
- spring-cloud - Spring Cloud Load Balancer 中基于上下文的部署 Vip 地址
- python-3.x - 如何使用 Apache2 和 Mod-WSGI 运行 Flask
- javascript - 如何将“隐藏”属性添加到现有 HTML 5 元素,然后将其从现有 HTML 5 元素中删除?
- java - 检查字符串是否按字母顺序排列
- node.js - express-validator :如何检查电子邮件 ID 数组?