Kuectl-json路径选择一个具有特殊字符的字段



我想写一个kubectl命令来查询所有命名空间,然后收集特定标签的值。

{
"apiVersion": "v1",
"items": [
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"labels":{"app.kubernetes.io/created-by":"testuser","app.kubernetes.io/instance":"thisisatest","app.kubernetes.io/name":"company","app.kubernetes.io/version":"2.5"},"name":"thisiatest"}}n"
},
"creationTimestamp": "2022-09-01T13:16:12Z",
"labels": {
"app.kubernetes.io/created-by": "testuser",
...

我有一个使用jq的版本。

printf "ncreated by:n"
kubectl get namespace -l app.kubernetes.io/name=phoenics -o json | jq '.items [] | .metadata | .labels | ."app.kubernetes.io/created-by"'

但我真的无法让一个带有jsonpath的版本正常工作。我做错了什么?

printf "ncreated by: JsonPathn"
kubectl get namespace -l app.kubernetes.io/name=phoenics -o jsonpath="{range ['items'][*]['metadata']['labels']['app.kubernetes.io/created-by']}{'n'}{end}"

没有输出。哦,我正在用gitbash处理windows。

这应该有效:

kubectl get namespace -l app.kubernetes.io/name=phoenics 
-o jsonpath="{range .items[*]}{.metadata.labels.app.kubernetes.io/created-by}{'n'}{end}"

不需要转义序列。用k8s 1.22.12:测试

$ kubectl get namespace -l kubernetes.io/metadata.name=kube-system -o jsonpath="{range ['items'][*]}{['metadata']['labels']}{['kubernetes.io/metadata.name']}{'n'}{end}"
$ {"kubernetes.io/metadata.name":"kube-system"}

相关内容

  • 没有找到相关文章

最新更新