如何用yq批量更新Helm Values.yaml中所有嵌套的tag字段?
解决YAML中所有嵌套层级
image.tag的批量更新问题 用mikefarah/yq(v4+,目前主流版本)可以轻松实现递归匹配所有层级的image节点并更新其tag值,命令如下:
yq -i e '(.. | select(key == "image")).tag = env(TAG)' chart-name/values.yaml
命令解释
..:递归遍历YAML中的所有节点select(key == "image"):筛选出所有键名为image的节点.tag = env(TAG):把这些image节点下的tag值设置为环境变量TAG的内容
适用场景
不管你的image节点在YAML的哪个层级,比如:
- 根节点下的image
image: repository: repo-name tag: 0.0.1
- 嵌套在controller下的image
controller: image: repository: repo-name tag: 0.0.1
- 更深层级的image
worker: deployment: image: repository: worker-repo tag: 1.0.0
执行命令后,所有image节点下的tag都会被统一更新。
扩展:更新所有名为tag的字段(谨慎使用)
如果你的需求是更新YAML中所有键名为tag的字段(无论父节点是什么),可以用这个命令:
yq -i e '(.. | select(key == "tag")) = env(TAG)' chart-name/values.yaml
注意:这个操作可能会修改非镜像标签的tag字段,比如某些配置项的tag,使用前请确认YAML结构。
内容的提问来源于stack exchange,提问作者gdix0n
相关产品推荐
相关产品推荐

