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

如何使用yq命令为ConfigMap中Fred添加第三个身份条目

问题描述

现有如下YAML配置文件:

apiVersion: v1
kind: ConfigMap
metadata:
  name: myName
  namespace: default
data:
  values.yaml: |
    people:
    - namespace: "fred"
      identities:
      - name: "one"
      - name: "two"
    - namespace: "bob"
      identities:
      - name: "one"

需要为namespace为"fred"的条目添加第三个身份name: "three",期望得到的结果如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: myName
  namespace: default
data:
  values.yaml: |
    people:
    - namespace: "fred"
      identities:
      - name: "one"
      - name: "two"
      - name: "three"
    - namespace: "bob"
      identities:
      - name: "one"

请问如何通过yq命令实现这个需求?

解决方案

使用mikefarah/yq(v4及以上版本)可以通过以下命令实现:

yq eval '.data."values.yaml" |= (fromyaml | .people[] | select(.namespace == "fred").identities += [{name: "three"}] | toyaml)' your-file.yaml

命令说明

  • .data."values.yaml" |= ...:定位到data下的values.yaml字段,对其内容执行后续修改逻辑
  • fromyaml:将values.yaml中的多行字符串解析为可操作的YAML对象
  • .people[] | select(.namespace == "fred").identities += [{name: "three"}]:遍历people数组,筛选出namespace为fred的条目,给其identities数组追加新的身份对象
  • toyaml:将修改后的YAML对象重新转换为字符串格式

如果需要直接修改原文件(原地编辑),添加-i参数即可:

yq eval -i '.data."values.yaml" |= (fromyaml | .people[] | select(.namespace == "fred").identities += [{name: "three"}] | toyaml)' your-file.yaml

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:45:00