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