放置某些值时,etcd“不是目录”结果

时间:2019-08-23 07:07:10

标签: etcd

我在应用程序中使用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路径上放置值吗?

1 个答案:

答案 0 :(得分:0)

当使用API​​ v2进行讲解时,etcd似乎无法在某个键已经存在的情况下创建目录。 例如。当你有钥匙

  /base-test-path/level1/somekey

您无法创建此类密钥(“非目录”):

 /base-test-path/level1/somekey/subkey

当我切换到API v3时,此问题已消除,因为它根本没有目录。 See a comment here或官方文档here