我有一个json-path命令来获取我的pod的所有标签。
kubectl get pods -o jsonpath="{.items[*].metadata.labels}"
这将输出:
{
"app": "api-dogs-v1",
"release": "0.0.119"
} {
"app": "api-cats-v1",
"release": "0.0.16"
}
我想对该命令进行一些简单的操作,以便它输出有效的json并包围在json对象中。
我正在尝试以下操作:
kubectl get pods -o jsonpath='{"{"}{{range .items[*]}{.metadata.labels}{"}"}{end}'
但这让我回来了:
unrecognized character in action: U+007B ''
有人能帮我吗?以下所需输出:
{
{
"app": "api-dogs-v1",
"release": "0.0.119"
} {
"app": "api-cats-v1",
"release": "0.0.16"
}
}
谢谢!
更新
kubectl get pods -o jsonpath='"richard"{range .items[*]}{.metadata.labels}{end}"}"'
我几乎做到了,但当我更改为在json路径表达式(而不是我的名字(的开头添加大括号时,我遇到了一个错误,我相信它认为我正在启动函数。。。
kubectl get pods -o jsonpath='"{"{range .items[*]}{.metadata.labels}{end}"}"'
错误:解析jsonpath{{range.items[*]}{.metadata.labels}{端}}时出错,无法识别的操作字符:U+007B"{">
我已经在{range .items[*]}
之前删除了额外的{
,并在{end}
之后移动了{"}"}
,如下所示:
kubectl get pods -o jsonpath='{"{"}{range .items[*]}{.metadata.labels}{end}{"}"}'
Output(your desired output format):
{{"app":"test-multi-pv","pod-template-hash":"55665bc94c"}{"app":"nginx","controller-revision-hash":"web1-774fbdcb49","statefulset.kubernetes.io/pod-name":"web1-0"}{"app":"nginx","controller-revision-hash":"web2-6b59d76fc6","statefulset.kubernetes.io/pod-name":"web2-0"}{"app":"nginx","controller-revision-hash":"web3-7c65fbbcdc","statefulset.kubernetes.io/pod-name":"web3-0"}}
我发现您在命令中多打开了一个大括号。请重新检查命令并重试一次。
我已经复制了这个用例,并成功地获得了预期的输出。在运行下面的jsonpath命令时,我已经获得了我的pod的所有标签。
kubectl获取pods-o jsonpath=";{.items[*].metadata.labels}";
输出:
{
"app":"你好服务器";,"Pod模板散列":"5bd6b6875f";
}
我删除了{range.items[*]}之前的jsonpath表达式"{"的大括号,并在{end}之前添加了一个换行表达式
因此,围绕在内部json对象周围的json对象的最后一个范围函数是
kubectl getpods-o jsonpath="{"{quot;}{range.items[*]}{.metadata.labels}}"{quot;\n quot;}{end}'
预期输出:
{
{
"app":"hello-server",
"Pod-template-hash":"5bd6b6875f"
}
}