我正在尝试使用JsonPath中的正则表达式输出.metadata.name 的值,后跟.spec.template.spec.containers[].students[]数组中学生的姓名进行Kubectl查询。
我实际上在jq中为此提出了一个类似的问题。
如果没有指定键,如何在jq中给定条件下打印数组的特定值
该解决方案有效,但我想知道是否有使用JsonPath或go-template的替代解决方案(无需使用jq)。
例如,如果我检查学生[]数组是否包含单词“Jeff”,我希望输出显示如下:
学生部署:杰斐逊
我试过的:
对于JsonPath,我尝试了以下查询:
kubectl get deployment -o=jsonpath="{range .items[?(@.spec.template.spec.containers[*].students[*])]}{'\n'}{.metadata.name}{':\t'}{range .spec.template.spec.containers[*]}{.students[?(@=="Jefferson")]}{end}{end}"
但这只适用于评估匹配的单词。是否可以使用JsonPath查询正则表达式,因为我在这里读到JsonPath正则表达式=~不起作用?我确实尝试使用|grep和findstr,但它仍然将数组中的所有值返回给我。除了jq,还有其他方法可以检索正则表达式输出吗?
https://github.com/kubernetes/kubernetes/issues/61406
下面的部署模板是 json 格式的,我将其缩短为仅相关部分。
{
"apiVersion": "v1",
"items": [
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"name": "student-deployment",
"namespace": "default"
},
"spec": {
"template": {
"spec": {
"containers": [
{
"students": [
"Alice",
"Bob",
"Peter",
"Sally",
"Jefferson"
]
}
]
}
}
}
}
]
}
JSONPath支持的文档清楚地描述了JSONPath不可能实现这一点,您可以使用jq。
https://kubernetes.io/docs/reference/kubectl/jsonpath/