是否有任何简单的命令行选项可以将我的整个 ETCD 数据库导出到 json 文件,还可以从 base64 自动解码键和值?
我现在成功的是这个(例如显示1x键/值):
./etcdctl get "" --prefix -w json | jq -r ".[] | .[] "
{
"key": "YnktZGV2L21ldGEvc25hcHNob3RzL3Jvb3QtY29vcmQvcGFydGl0aW9ucy80NDAwNDc0MjQ2MTgzNjUxNzAvNDQwMDQ3NDI0NjE4MzY1MTcxX3RzNDQwMDQ5NDg5ODkxODE5NTI0",
"create_revision": 44536,
"mod_revision": 44536,
"version": 1,
"value": "CPOB0OXRmdeNBhIIX2RlZmF1bHQYhIDgxN/V140GIPKB0OXRmdeNBg=="
}
但是我需要将整个数据库键和值解码为人类可读的格式?
谢谢
如果编码数据是字符串而不是二进制数据,您可以使用
@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 字符串,因此请当心。不幸的是,它不返回字节数组,因此对于这些情况可能不是很有用。