Блокировка КВ с консулом

Я пытаюсь установить блокировку пары 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"}

Затем я приобретаю замок на КВ

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

Я делаю что-то не так здесь.

1 ответ

Вы ничего не получите обратно, потому что вы не отправили данные для записи в свой PUT запрос в магазин кв.

Вот те же самые команды, с некоторой красивой печатью.

Создать сеанс

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

Напишите значение

Используя Linux "здесь файл", я напишу значение "Hello, World" под host ключ. Помните, чтобы использовать идентификатор сеанса, который вы получили от предыдущей команды. Скопируйте / Вставьте 3 строки как один блок.

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

Прочитайте значение обратно

Чтение - это просто ПОЛУЧЕНИЕ, которое я отправил на симпатичный принтер.

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 - это данные, которые мы написали в первый раз

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

Попробуйте записать значение без блокировки

Это не работает, как вы думаете. Документация K/V говорит об этом

обновление, не включающее параметр acquing, будет проходить нормально, даже если другой сеанс заблокировал ключ

Удалить сеанс

Вы можете установить 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"}
Другие вопросы по тегам