[英]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.