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}}'