kubectl jsonpath查询并输出多个对象值



下面是我的kubectl get deploy --all-namespaces的输出:

{
"apiVersion": "v1",
"items": [
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"annotations": {
"downscaler/uptime": "Mon-Fri 07:00-23:59 Australia/Sydney",
"name": "actiontest-v2.0.9",
"namespace": "actiontest",
},
"spec": {
......
......
},
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"annotations": {
"downscaler/uptime": "Mon-Fri 07:00-21:00 Australia/Sydney",
"name": "anotherapp-v0.1.10",
"namespace": "anotherapp",
},
"spec": {
......
......
}
}

如果注释"downscaler/uptime"与值"Mon-Fri 07:00-21:00 Australia/Sydney"匹配,我需要找到部署的名称及其名称空间。我希望得到如下输出:

deployment_name,namespace

如果我对单个部署运行下面的查询,我将得到所需的输出。

#kubectl get deploy -n anotherapp -o jsonpath='{range .[*]}{.items[?(@.metadata.annotations.downscaler/uptime=="Mon-Fri 07:00-21:00 Australia/Sydney")].metadata.name}{","}{.items[?(@.metadata.annotations.downscaler/uptime=="Mon-Fri 07:00-21:00 Australia/Sydney")].metadata.namespace}{"n"}'
anotherapp-v0.1.10,anotherapp

但是当我对所有名称空间运行它时,得到如下输出:

#kubectl get deploy --all-namespaces -o jsonpath='{range .[*]}{.items[?(@.metadata.annotations.downscaler/uptime=="Mon-Fri 07:00-21:00 Australia/Sydney")].metadata.name}{","}{.items[?(@.metadata.annotations.downscaler/uptime=="Mon-Fri 07:00-21:00 Australia/Sydney")].metadata.namespace}{"n"}'

actiontest-v2.0.9 anotherapp-v0.1.10, actiontest anotherapp

这是一个很简短的答案,但是你可以使用这个选项:

kubectl get deploy --all-namespaces -o jsonpath='{range .items[?(.metadata.annotations.downscaler/uptime=="Mon-Fri 07:00-21:00 Australia/Sydney")]}{.metadata.name}{"t"}{.metadata.namespace}{"n"}'

我改变的是如何处理数据的逻辑:

发生的第一件事是进入range元素列表,我们需要工作,而不是一切。我使用了过滤器表达式-参见Jsonpath表示法-语法元素。

一旦我们已经过滤了列表中的实体,我们就可以很容易地检索我们需要的其他字段。

相关内容

  • 没有找到相关文章

最新更新