繁体   English   中英

如何将地图合并到 values.yaml wit yq

[英]How can I merge a map into values.yaml wit yq

我正在尝试在 values.yaml 中创建一个多重映射,如下所示。

FILES=$(ls -1 | grep "values-.*.yaml") 
for i in $FILES; do
   yq e '.applications *= {
            "'$i'":{
               "enabled":"true",
               "destination":{
                  "namespace":"x",
                  "server":"wwww"
               },
               "source":{
                  "chart":"'$i'"
               }
            }
         }' values.yaml
done

这是下一个输出:

错误:无法将 !!null 与 !!map 相乘

yaml 应如下所示:

applications:
  a:
    enabled: "true"
    destination:
      namespace: x
      server: wwww
    source:
      chart: a
  b:
    enabled: "true"
    destination:
      namespace: x
      server: wwww
    source:
      chart: b

我究竟做错了什么?

使用您的代码,当文件values.yaml为空时会出现错误

applications:

而是使用它,错误Cannot multiply !!null with !!map消失:

applications: {}

除此之外,您的代码还有一些问题。 我想建议将文件名作为参数传递给yq并使用strenv在代码中访问它

FILES=$(ls -1 | grep "values-.*.yaml")
for i in $FILES; do
  file="$i" yq '.applications *=
    {strenv(file): {
       "enabled":"true",
       "destination": {
          "namespace":"x",
          "server":"www"
       },
       "source": {
          "chart": strenv(file)
       }
    }
  }' values.yaml
done

如果文件名包含空格,例如values-3. gap.yaml values-3. gap.yaml 要解决此问题,请考虑使用find... exec而不是for循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM