使用kubectl时JSONPath范围不起作用

时间:2019-03-01 16:17:00

标签: kubernetes kubectl jsonpath

我正在通过CLI工具kubectl访问Kubernetes,并且试图获取所有上下文名称的列表,每行一个。

我知道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

但是我看不到哪里出了问题。

2 个答案:

答案 0 :(得分:2)

您的命令在kubectl 1.9.2中对我有效

如果仍然无法使用,则可以在bash中使用tr来用新行替换空格:

mInstance = this;

答案 1 :(得分:1)

我知道了。我一直在使用@ahmetb的kubectl-aliases脚本,该脚本运行正常,没有问题,但是自述文件中的建议之一是:

  

在运行之前打印完整命令:将其添加到您的.bashrc或.zshrc文件中:

     

function kubectl() { echo "+ kubectl $@"; command kubectl $@; }

我在.bashrc中具有该函数声明,并且正在删除jsonpath参数的引号。当我注释掉该声明并打开一个新的shell后,该命令便正常工作了。