如何使用yq在file.yaml指定位置添加YAML内容
使用yq为指定集群添加YAML内容
针对你提供的YAML文件,以下是基于**mikefarah/yq v4+**版本的命令,可仅为name为orange的集群添加指定的extensions内容:
yq e '.clusters[] |= (select(.name == "orange") | .cluster.extensions = [{"name": "xx.io", "extension": {"subnet": ["1.2.3.4/32"]}}]) // .' file.yaml
命令说明:
.clusters[]:遍历clusters数组中的每一个集群对象|=:将修改后的结果赋值回原数组位置,确保原结构保留select(.name == "orange"):精准筛选出name字段为orange的集群项.cluster.extensions = [...]:给选中集群的cluster节点添加指定的extensions嵌套结构// .:对未匹配到orange的集群项(比如apple),直接保留原内容不做修改
执行后结果:
apiVersion: v1 clusters: - cluster: age: 50 server: dev name: apple - cluster: age: 50 server: prod extensions: - name: xx.io extension: subnet: - 1.2.3.4/32 name: orange
如果需要直接修改原文件(而非仅输出结果),可添加-i参数:
yq -i e '.clusters[] |= (select(.name == "orange") | .cluster.extensions = [{"name": "xx.io", "extension": {"subnet": ["1.2.3.4/32"]}}]) // .' file.yaml
内容的提问来源于stack exchange,提问作者gurpsone
相关产品推荐
相关产品推荐

