有没有一个工具可以扁平化 yaml 结构,如下所示:
foo:
bar:
baz: true
进入这个:
foo.bar.baz = true
不确定这个语法名称是什么
上下文:我需要这个 hcl,设置很多像这样的值:
set {
name = "foo.bar.baz"
value = false
}
这是针对terraform中的helm-provider,不能直接使用json或yaml,必须一一设置你想要更改的属性(我需要禁用很多东西来检查为什么它不起作用)。
答案1
使用安德烈·基斯柳克yq
要获取输入文档中布尔值的所有路径,对于每个路径,用点连接路径元素,然后输出每个点路径以及在该路径中找到的值。
yq -r '
paths(type == "boolean") as $p |
[ ($p | join(".")), getpath($p) ] |
join(" = ")' file
输入文档示例:
foo:
bar:
baz: true
baar:
baz: false
结果输出:
foo.bar.baz = true
foo.baar.baz = false
enabled
仅获取以具有布尔值的命名键结尾的路径true
(如图所示在其他地方的例子中):
yq -r '
(
paths(type == "boolean" and .) |
select(last == "enabled")
) as $p |
[ ($p | join(".")), getpath($p) ] |
join(" = ")' file
答案2
找不到任何东西,所以我自己做'__')