gpt4 book ai didi

bash - 如何扩展 YAML anchor 和别名并在 Bash 中获取生成的 YAML?

转载 作者:行者123 更新时间:2023-12-03 19:28:16 25 4
gpt4 key购买 nike

我有一个 yaml文件,在其中我使用 anchor 和别名来干燥文件。这是一个 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 中的信息作为真相的来源。

所有别名和 anchor 都会从结果 json 中删除.不是灾难,但如果能真正扩展它会更好。

我正在寻找可以在 bash 中运行的命令行工具脚本采取上述 json作为输入并展开 anchor 和别名,并将结果写入标准输出,例如:
version: "3.4"

services:
api:
build:
context: ../
dockerfile: some-path/Dockerfile
image: gcr.io/some-project/api

有谁知道如何做到这一点?

最佳答案

你为什么不把 yaml 作为真相的来源?
你应该看看 spruce .基本上它是一个 yaml/json也可以转换为json的合并工具.但是,它也会丢弃您的 anchor 和别名。

转换 yml到 json,因此不需要 yqjq不再行动:)

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": "../"
}
}

关于bash - 如何扩展 YAML anchor 和别名并在 Bash 中获取生成的 YAML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56588403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com