使用 kubectl 时 JSONPath 范围不起作用
JSONPath range not working when using kubectl
我正在通过 CLI 工具访问 Kubernetes kubectl
,我正在尝试获取所有上下文名称的列表,每行一个。
我知道 JSONPath 可用于提取和格式化特定输出。我真的很接近我想要的
kubectl config view -o=jsonpath="{.contexts[*].name}"
但这会将所有名称放在同一行。我正在尝试使用 range
列出所有由换行符分隔的名称:
kubectl config view -o=jsonpath='{range .contexts[*]}{.name}{"\n"}{end}'
但这只是给我一个错误:
error: unexpected arguments: [.contexts[*]}{.name}{"\n"}{end}]
See 'kubectl config view -h' for help and examples.
我查看了 kubectl
文档,我所做的与 https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/#list-containers-by-pod 非常相似,其中的命令是
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort
但我看不出哪里错了。
你的命令在 kubectl 1.9.2 中对我有效
如果还是不行,可以在bash中使用tr来换行:
kubectl config view -o=jsonpath="{.contexts[*].name}" | tr " " "\n"
我明白了。我一直在使用@ahmetb 的 kubectl-aliases 脚本,它工作正常没有问题,但 README 中的建议之一是:
Print the full command before running it: Add this to your .bashrc or .zshrc file:
function kubectl() { echo "+ kubectl $@"; command kubectl $@; }
我的 .bashrc 中有那个函数声明,它去掉了我的 jsonpath
参数的引号。一旦我注释掉该声明并打开一个新的 shell,该命令就可以正常工作。
我正在通过 CLI 工具访问 Kubernetes kubectl
,我正在尝试获取所有上下文名称的列表,每行一个。
我知道 JSONPath 可用于提取和格式化特定输出。我真的很接近我想要的
kubectl config view -o=jsonpath="{.contexts[*].name}"
但这会将所有名称放在同一行。我正在尝试使用 range
列出所有由换行符分隔的名称:
kubectl config view -o=jsonpath='{range .contexts[*]}{.name}{"\n"}{end}'
但这只是给我一个错误:
error: unexpected arguments: [.contexts[*]}{.name}{"\n"}{end}]
See 'kubectl config view -h' for help and examples.
我查看了 kubectl
文档,我所做的与 https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/#list-containers-by-pod 非常相似,其中的命令是
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort
但我看不出哪里错了。
你的命令在 kubectl 1.9.2 中对我有效
如果还是不行,可以在bash中使用tr来换行:
kubectl config view -o=jsonpath="{.contexts[*].name}" | tr " " "\n"
我明白了。我一直在使用@ahmetb 的 kubectl-aliases 脚本,它工作正常没有问题,但 README 中的建议之一是:
Print the full command before running it: Add this to your .bashrc or .zshrc file:
function kubectl() { echo "+ kubectl $@"; command kubectl $@; }
我的 .bashrc 中有那个函数声明,它去掉了我的 jsonpath
参数的引号。一旦我注释掉该声明并打开一个新的 shell,该命令就可以正常工作。