使用 jq 或 jsonpath 解析 kubectl json 输出
parsing kubectl json output with jq or jsonpath
我想 select,并在
中列出包含“v1beta1”的 crds
.spec.versions.*.name
crd 对象的版本部分类似于这样
"versions": [
{
"name": "v1alpha2",
"served": true,
"storage": true,
"subresources": {
"status": {}
},
"name": "v1beta1"
"served": true,
"storage": true,
"subresources": {
"status": {}
}
}
]
我尝试了一些不同的查询,如下所示,但没有成功。
$ kubectl get crd -ojson | jq -r '.items[] | map(select(.spec.versions[] | contains("v1beta1"))).metadata.name'
jq: error (at <stdin>:250345): Cannot index string with string "spec"
Jsonpath 解决方案也很棒。我尝试过类似的方法但没有成功。
$ kubectl get crd -ojsonpath="{range .items.*.spec.versions.*}{.name[?(@=='v1beta1')].metadata.name}{'\n'}{end}"
有人可以帮我吗?
您可以将 jq 解决方案基于:
.spec.versions[] | select(.name | contains("v1beta1"))
或类似的,例如
.spec.versions[] | select(.name | startswith("v1beta1"))
这将使用 jsonpath 显示名称:kubectl get crd -o jsonpath='{range .items[?(@.spec.versions[].name=="v1beta1")].metadata}{.name}{"\n"}'
我想 select,并在
中列出包含“v1beta1”的 crds.spec.versions.*.name
crd 对象的版本部分类似于这样
"versions": [
{
"name": "v1alpha2",
"served": true,
"storage": true,
"subresources": {
"status": {}
},
"name": "v1beta1"
"served": true,
"storage": true,
"subresources": {
"status": {}
}
}
]
我尝试了一些不同的查询,如下所示,但没有成功。
$ kubectl get crd -ojson | jq -r '.items[] | map(select(.spec.versions[] | contains("v1beta1"))).metadata.name'
jq: error (at <stdin>:250345): Cannot index string with string "spec"
Jsonpath 解决方案也很棒。我尝试过类似的方法但没有成功。
$ kubectl get crd -ojsonpath="{range .items.*.spec.versions.*}{.name[?(@=='v1beta1')].metadata.name}{'\n'}{end}"
有人可以帮我吗?
您可以将 jq 解决方案基于:
.spec.versions[] | select(.name | contains("v1beta1"))
或类似的,例如
.spec.versions[] | select(.name | startswith("v1beta1"))
这将使用 jsonpath 显示名称:kubectl get crd -o jsonpath='{range .items[?(@.spec.versions[].name=="v1beta1")].metadata}{.name}{"\n"}'