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

标签 kubernetes formatting 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

但是当我针对所有 namespace 运行它时,我得到如下输出:

#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 我们需要处理的元素列表,而不是所有元素。我用了filter expression - see Jsonpath notation - syntax elements .

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

关于kubernetes - kubectl jsonpath 查询并输出多个对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69734715/

相关文章:

coding-style - 线宽格式标准

c# - .NET 货币格式化程序 : can I specify the use of banker's rounding?

azure - 无法连接到服务器: dial tcp: lookup <Server Location>: no such host

mysql - 使用 Azure Kubernetes 服务中的 MySQL 数据库向外界公开 pod

Kubernetes:kubectl运行:找不到命令

kubernetes - 双 Kubernetes 就绪探测?

mysql - Kubernetes 没有将数据复制到已安装的卷中

Kubernetes - 是否可以为多个节点设置一个公共(public) FQDN?

java - 我想在 Pod 内使用 Fabric8 kubernetes 客户端(java)。如何获取部署集群的 kubernetes 客户端?

.net - 是否有一个 XmlWriter 可以编写彩色 HTML 格式的输出以在网页中显示 XML?