在 kubectl jsonpath 中解码 base64

decode base64 in kubectl jsonpath

我有一个类似的命令

kubectl get secrets \
--selector='my-selector' \
-o jsonpath='{range .items[*] }{"\n"}{.metadata.labels.cluster-name}{"."}{.metadata.namespace {":"}{"5432"}{"postgres" }{":"}{.data.password}{end}'

输出这样的列表(需要格式)

cluster-name.namespace:5432:postgres:YbHF....==
cluster-name.namespace:5432:postgres:YbHF....==
cluster-name.namespace:5432:postgres:YbHF....==

我需要解码此文件的 base64 并使用 kubectl cheat sheet 作为参考,给出了这个例子:

# 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 get secrets \
--selector='my-selector' \
-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-template

我的主要语法更改是删除 [ ],即将 {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}}'