打印 Kubernetes 中当前上下文的命名空间

Print the namespace of the current context in Kubernetes

我想在 Kubernetes 中打印当前上下文的命名空间。

oc config view -o json returns 以下输出(为了便于阅读而缩短)

{
    "kind": "Config",
    "apiVersion": "v1",
    "contexts": [
        {
            "name": "pp2-review/master-ocp-internal-company-com:443/Philippe",
            "context": {
                "cluster": "master-ocp-internal-company-com:443",
                "user": "Philippe",
                "namespace": "pp2-review"
            }
        },
        {
            "name": "pp2-master/master-ocp-internal-company-com:443/Philippe",
            "context": {
                "cluster": "master-ocp-internal-company-com:443",
                "user": "Philippe",
                "namespace": "review"
            }
        }
    ],
    "current-context": "pp2-review/master-ocp-internal-company-com:443/Philippe"
}

我愿意returnpp2-review。当前上下文的命名空间。

oc config view -o "jsonpath={$.current-context}" returns pp2-review/master-ocp-internal-company-com:443/Philippe.

oc config view -o "jsonpath={.contexts[?(@.name==\"pp2-review/master-ocp-internal-company-com:443/Philippe\")].context.namespace}" returns pp2-review.

将它们组合成 oc config view -o "jsonpath={$.contexts[?(@.name==$.current-context)]}" return没什么。

除了执行第一个命令并将其 return 值放在第二个命令之外,还有其他方法吗?

简单的bash命令替换应该可以完成工作:

oc config view -o "jsonpath={.contexts[?(@.name==\"$(oc config view -o "jsonpath={$.current-context}")\")].context.namespace}"

因为 JSON 路径似乎不起作用。我搜索并找到了使用 Go 模板的解决方案:

> oc config view -o go-template='{{$currentContext := index . "current-context"}}{{- range .contexts -}}{{- if eq .name $currentContext -}}{{ .context.namespace}}{{- end -}}{{- end -}}'
review

这应该有效:

kubectl config view --minify | grep namespace:

此命令将显示您当前的上下文和命名空间。 --minify 标志意味着只有关于当前上下文的详细信息将是 return:

kubectl config view --minify