Kubernetes 在kubectl jsonpath中解码base64

Kubernetes 在kubectl jsonpath中解码base64,kubernetes,base64,kubectl,json-path-expression,Kubernetes,Base64,Kubectl,Json Path Expression,我有一个类似的命令 kubectl获取秘密\ --选择器=“我的选择器”\ -o jsonpath='{range.items[*]}{“\n”}{.metadata.labels.cluster name}{”。“}{.metadata.namespace{”:“}{“5432”}{“postgres”}{”:“}{.data.password}{end}” 输出如下列表(需要格式) 我需要解码此文件的base64,并使用作为参考,给出以下示例: # Output decoded secre

我有一个类似的命令

kubectl获取秘密\
--选择器=“我的选择器”\
-o jsonpath='{range.items[*]}{“\n”}{.metadata.labels.cluster name}{”。“}{.metadata.namespace{”:“}{“5432”}{“postgres”}{”:“}{.data.password}{end}”
输出如下列表(需要格式)

我需要解码此文件的base64,并使用作为参考,给出以下示例:

# Output decoded secrets without external tools
kubectl get secret my-secret -o go-template='{{range $k,$v := .data}}{{"### "}}{{$k}}{{"\n"}}{{$v|base64decode}}{{"\n\n"}}{{end}}'
我尝试了以下方法

kubectl获取秘密\
--选择器=“我的选择器”\
-o jsonpath='{range.items[*]}{“\n”}{.metadata.labels.cluster name}{”。“}{.metadata.namespace{”:“}{“5432”}{“postgres”}{”:“}{.data.password}base64decode}{end}”
结果是,除了现在为空的密码字段之外,所有内容都会显示,例如:

cluster-name.namespace:5432:postgres:

任何提示都将不胜感激。

根据@mdaniel的建议,我使用了
-o go模板

我的主要语法变化是将[],即,
{range.items[*]}
删除为
{range.items}

如果一个键包含一个
-
,那么
{.metadata.labels.cluster name}
就变成了
{{index.metadata.labels“cluster name”}

下面是我的解决方案,它使base64解码能够工作:

kubectl get secrets \
--selector='my-selector' \
-o go-template='{{range .items}}{{"\n"}}{{index .metadata.labels "cluster-name"}}{{"."}}{{.metadata.namespace }}{{":"}}{{"5432"}}{{"postgres"}}{{":"}}{{.data.password|base64decode}}{{end}}'

jsonpath不支持与go template相同的所有函数,这就是为什么它们是分开的;对于该任务,使用
-o go template
,您会更高兴,因为备忘单已经显示了90%的答案谢谢!按照您的建议,使用
-o go template
解决它。发现它不喜欢方括号或das但他很快就解决了这些问题。@user13898676会介意发布一个答案,因为你找到了解决方案吗?@thomas当然没有问题。
kubectl get secrets \
--selector='my-selector' \
-o go-template='{{range .items}}{{"\n"}}{{index .metadata.labels "cluster-name"}}{{"."}}{{.metadata.namespace }}{{":"}}{{"5432"}}{{"postgres"}}{{":"}}{{.data.password|base64decode}}{{end}}'