ETCD 导出为 json 并从 base64 解码所有键/值到人类可读

问题描述 投票:0回答:1

是否有任何简单的命令行选项可以将我的整个 ETCD 数据库导出到 json 文件,还可以从 base64 自动解码键和值?

我现在成功的是这个(例如显示1x键/值):

   ./etcdctl get "" --prefix -w json | jq -r ".[] | .[]  "
 {
 "key": "YnktZGV2L21ldGEvc25hcHNob3RzL3Jvb3QtY29vcmQvcGFydGl0aW9ucy80NDAwNDc0MjQ2MTgzNjUxNzAvNDQwMDQ3NDI0NjE4MzY1MTcxX3RzNDQwMDQ5NDg5ODkxODE5NTI0",
"create_revision": 44536,
"mod_revision": 44536,
"version": 1,
"value": "CPOB0OXRmdeNBhIIX2RlZmF1bHQYhIDgxN/V140GIPKB0OXRmdeNBg=="
}

但是我需要将整个数据库键和值解码为人类可读的格式?

谢谢

kubernetes jq etcd
1个回答
0
投票

如果编码数据是字符串而不是二进制数据,您可以使用

@base64d
过滤器将其解码为 UTF-8 字符串。这应该在 jq 1.6 中可用。

$ ./etcdctl ... | jq '.[][] | (.key, .value) |= @base64d'
{
  "key": "by-dev/meta/snapshots/root-coord/partitions/440047424618365170/440047424618365171_ts440049489891819524",
  "create_revision": 44536,
  "mod_revision": 44536,
  "version": 1,
  "value": "\b���љ׍\u0006\u0012\b_default\u0018������׍\u0006 ���љ׍\u0006"
}

在您的示例中,该值似乎不是 UTF-8 字符串,因此请当心。不幸的是,它不返回字节数组,因此对于这些情况可能不是很有用。

jqplay

© www.soinside.com 2019 - 2024. All rights reserved.