如何使用jq工具按主机匹配条件替换JSON对象中的指定serviceName值
针对该Ingress JSON的jq字段替换方案
可用jq命令
你可以直接使用以下命令完成指定条件的字段替换:
# 命令1(需安装moreutils包提供的sponge工具,直接修改原文件) jq '(.spec.rules[] | select(.host == "test4.analytics.io") | .http.paths[] | select(.backend.serviceName == "ca-visual-node") | .backend.serviceName) |= "ca-visual-node-canary"' ingress.json | sponge ingress.json
# 命令2(无需额外依赖,通过临时文件更新原文件) jq '(.spec.rules[] | select(.host == "test4.analytics.io") | .http.paths[] | select(.backend.serviceName == "ca-visual-node") | .backend.serviceName) |= "ca-visual-node-canary"' ingress.json > ingress.json.tmp && mv ingress.json.tmp ingress.json
注意请将上述命令中的ingress.json替换为你实际的JSON文件名
命令逻辑说明
- 首先定位到
spec.rules数组,筛选出host值为test4.analytics.io的规则项 - 遍历该规则下的
http.paths数组,筛选出backend.serviceName值为ca-visual-node的路径配置 - 对匹配到的
serviceName字段执行更新赋值,其余所有JSON结构和字段保持原有内容不变
如果执行时jq提示JSON格式错误,请先修正原文件中metadata.namespace末尾多余的逗号
内容的提问来源于stack exchange,提问作者Balu Virigineni
相关产品推荐
相关产品推荐

