如何使用JSONPATH提取Kubernetes ConfigMap中的haproxy.cfg配置值
解决方案
方案1:调整引号嵌套(最推荐)
使用单引号包裹整个jsonpath表达式,内层用双引号标记包含特殊字符的键名,避免shell与jsonpath解析的引号冲突:
kubectl get cm -l app=haproxy -o jsonpath='{.items[0].data["haproxy.cfg"]}'
如果输出的换行符没有正确渲染,可以搭配echo -e处理转义字符:
echo -e "$(kubectl get cm -l app=haproxy -o jsonpath='{.items[0].data["haproxy.cfg"]}')"
如果你已经明确ConfigMap的名称为haproxy,可以直接指定资源名简化命令:
kubectl get cm haproxy -o jsonpath='{.data["haproxy.cfg"]}'
方案2:保留原有方括号写法
如果你习惯用方括号索引的写法,只需要转义内层的双引号即可:
kubectl get cm -l app=haproxy -o jsonpath="{['items'][0]['data'][\"haproxy.cfg\"]}"
失效原因说明
kubectl内置的jsonpath解析器要求,包含.、-等特殊字符的键名必须用双引号包裹才能被正确识别。你之前的写法使用单引号包裹haproxy.cfg,解析器无法将其识别为完整的键名,因此返回空结果。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

