我在应用程序中使用etcd v3.3,并通过其WEB API与之通信。 根据{{3}},将键值对放在某个路径上时,不需要显式创建目录。 这是我正在做的示例(请注意,路径/ base-test-path / level1 / level2 / level3 /还不存在):
curl -X PUT -d value=foo http://localhost:2379/v2/keys/base-test-path/level1/level2/level3/
结果是:
{"action":"set","node":{"key":"/base-test-path/test/test/test","value":"foo","modifiedIndex":347017,"createdIndex":347017}}
但是当我尝试在现有路径中添加更深的新值时,会出现错误(请注意,路径/ base-test-path / level1 / level2 / level3 /已经存在,因为我之前运行过先前的命令) :
curl -X PUT -d value=foo http://localhost:2379/v2/keys/base-test-path/level1/level2/level3/level4
响应:
{"errorCode":104,"message":"Not a directory","cause":"/base-test-path/level1/level2/level3","index":347018}
当路径的任何部分已经存在时,etcd似乎都不会创建目录。
问题是:我可以简化代码,以便不必关心etcd目录,仍然可以在所需的每个etcd路径上放置值吗?
答案 0 :(得分:0)
当使用API v2进行讲解时,etcd似乎无法在某个键已经存在的情况下创建目录。 例如。当你有钥匙
/base-test-path/level1/somekey
您无法创建此类密钥(“非目录”):
/base-test-path/level1/somekey/subkey
当我切换到API v3时,此问题已消除,因为它根本没有目录。 See a comment here或官方文档here。