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

使用yq合并YAML新增字段失败,寻求正确合并方案

合并YAML文件新增字段,保留原有值

现有文件内容

prod.yaml

configMap:
  data: 
    env:
      APP_1: "{{ .Data.data.app_1 }}"
      APP_2: "{{ .Data.data.app_2 }}"
      APP_3: "{{ .Data.data.app_3 }}"
      APP_4: "{{ .Data.data.app_4 }}"

updated.yaml

APP_1:
APP_2:
APP_3:
APP_4:
APP_5:
LOG_DIR:

期望合并结果

configMap:
  data: 
    env:
      APP_1: "{{ .Data.data.app_1 }}"
      APP_2: "{{ .Data.data.app_2 }}"
      APP_3: "{{ .Data.data.app_3 }}"
      APP_4: "{{ .Data.data.app_4 }}"
      APP_5:
      LOG_DIR:

当前尝试的命令

先用awk生成updated.yaml:

cat .env | awk -F":" '{print $1": \"{{ .Data.data."tolower($1)" }}\""}' > updated.yaml

随后尝试用yq合并,但未成功:

yq '.env[] *=n [load("update.yaml")]' prod.yaml > a.yaml

正确的yq合并方法

使用mikefarah/yq v4+版本,执行以下命令即可完成需求:

yq '.configMap.data.env *= load("updated.yaml")' prod.yaml > a.yaml

如果需要更明确地指定仅新增字段,不覆盖原有字段的任何值(即使updated.yaml中已有字段为空),可以用以下写法:

yq '.configMap.data.env |= (. * load("updated.yaml"))' prod.yaml > a.yaml

错误原因说明

原命令的问题有两点:

  1. 路径错误:prod.yaml中的env节点位于.configMap.data下,而非根节点的.env;
  2. 操作符误用:*=n是数组的合并语法,这里要处理的是YAML对象,应该使用对象合并操作符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:45:35