4

我正在尝试在更新时获取 consul 上的 KV 对的锁定,因此没有其他人可以更新它。

最初我有

curl -XGET http://localhost:8500/v1/kv/hosts?raw
{"k1":"v1"}

现在我得到一个会话

curl -XPUT http://localhost:8500/v1/session/create
{"ID":"9ed55585-ddda-4605-a926-d1e0b57a9919"}

然后我获得了 KV 的锁定

curl -XPUT http://localhost:8500/v1/kv/hosts?acquire=9ed55585-ddda-4605-a926-d1e0b57a9919

现在,当我发布并执行 GET 时,我的值是空的

curl -XPUT http://localhost:8500/v1/kv/hosts?release=9ed55585-ddda-4605-a926-d1e0b57a9919

curl -XGET http://localhost:8500/v1/kv/hosts?raw => This returns empty

我在这里做错什么了吗。

4

1 回答 1

2

您没有得到任何回报,因为您没有将任何数据发送到您的PUT请求中写入 kv 存储。

这是相同的命令,带有一些漂亮的打印。

创建会话

 curl --request PUT http://localhost:8500/v1/session/create
 {"ID":"3619d9fd-8b8f-0b89-acdf-8d752b38a754"}

写一个值

使用 Linux“here 文件”,我将在host键下写入值“Hello, World”。请记住使用从上一个命令返回的会话 ID。将 3 行复制/粘贴为一个单元。

curl --request PUT http://localhost:8500/v1/kv/host?acquire=3619d9fd-8b8f-0b89-acdf-8d752b38a754 --data @- << EOF
Hello, World
EOF

回读值

阅读只是一个 GET,我通过管道传送到一台漂亮的打印机。

curl -s http://localhost:8500/v1/kv/host| python -m json.tool
[
    {
        "CreateIndex": 3832257,
        "Flags": 0,
        "Key": "host",
        "LockIndex": 1,
        "ModifyIndex": 3832260,
        "Session": "3619d9fd-8b8f-0b89-acdf-8d752b38a754",
        "Value": "SGVsbG8sIFdvcmxk"
    }
]

那个base64 blob就是我们第一次写的数据

echo "SGVsbG8sIFdvcmxk" | openssl base64 -d -A
Hello, World

尝试在没有锁的情况下写入值

这不像你想的那样工作。K/V 文档说明了这一点

即使另一个会话已锁定密钥,不包含获取参数的更新也会正常进行

删除会话

你可以为你的会话设置一个 TTL 并等待它过期,但让我们删除它。

curl --request PUT http://localhost:8500/v1/session/destroy/3619d9fd-8b8f-0b89-acdf-8d752b38a754

该值仍然存在,但不再与会话关联:

curl -s http://localhost:8500/v1/kv/host| python -m json.tool
[
    {
        "CreateIndex": 3832257,
        "Flags": 0,
        "Key": "host",
        "LockIndex": 0,
        "ModifyIndex": 3832331,
        "Value": "SGVsbG8sIFdvcmxk"
    }
]

如果您希望在会话到期或被删除时删除密钥,请指定"Behavior": "delete"创建会话的时间

curl --request PUT http://localhost:8500/v1/session/create --data @- << EOF
{
    "Name": "Helps with debugging",
    "Behavior": "delete",
    "TTL": "2m"
}
EOF
{"ID":"45c17b06-b632-d17f-b0af-b2bee8f82511"}
于 2018-11-16T05:24:14.553 回答