扁平化 yaml 的工具

扁平化 yaml 的工具

有没有一个工具可以扁平化 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

找不到任何东西,所以我自己做'__')

https://github.com/kokizzu/yamlflatten

相关内容