You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用yq命令仅更新YAML中bar图表的image.tag值?

问题:仅更新YAML中name为bar的图表对应的image.tag值

原YAML内容:

releases:
  - chart: ../charts/foo
    name: foo
    namespace: '{{ .Values.stack }}'
    values:
      - ../config/templates/foo-values.yaml.gotmpl
    set:
      - name: image.tag
        value: 22
      - name: replicas
        value: 1
  - chart: ../charts/bar
    name: bar
    namespace: '{{ .Values.stack }}'
    values:
      - ../config/templates/bar-values.yaml.gotmpl
    set:
      - name: image.bar_proxy.tag
        value: 46
      - name: image.bar.tag
        value: 29
      - name: replicas
        value: 1

需求:仅修改releases列表中name为bar的条目对应的镜像tag值,但执行命令yq -y '.releases[].set |= map(select(.name == "image.tag").value=51)' yaml时,会同时修改foo和bar的相关值,需要正确的yq命令。


正确的yq命令

根据原YAML结构,bar条目对应的镜像tag是image.bar.tag,正确命令如下:

yq -y '.releases[] |= (select(.name == "bar") | .set |= map(select(.name == "image.bar.tag").value = 51))' your-file.yaml

如果你的实际需求是给bar条目新增/修改通用的image.tag项,命令调整为:

yq -y '.releases[] |= (select(.name == "bar") | .set |= (map(select(.name != "image.tag")) + [{name: "image.tag", value: 51}]))' your-file.yaml

命令说明

  • .releases[] |= ...:遍历所有release条目,仅对匹配的条目执行修改
  • select(.name == "bar"):精准筛选出目标条目,避免影响foo等其他条目
  • .set |= map(...):在目标条目的set数组中,定位到指定名称的项并更新其值

内容的提问来源于stack exchange,提问作者Dilip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:40:24