如何使用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
相关产品推荐
相关产品推荐

