Skip to content

Instantly share code, notes, and snippets.

@bofm
Created February 18, 2019 16:28
Show Gist options
  • Save bofm/2aad31130caba6ef3128888f1dd6f6c8 to your computer and use it in GitHub Desktop.
Save bofm/2aad31130caba6ef3128888f1dd6f6c8 to your computer and use it in GitHub Desktop.
consul kv atomic bash
consul_kv_put_cas() {
local key="$1"
local value="$2"
local cas="$3"
test "$(curl -sq -X PUT -d "$value" "http://localhost:8500/v1/kv/${key}?cas=${cas}")" = "true"
}
consul_kv_put_if_not_exists() {
local key="$1"
local value="$2"
consul_kv_put_cas "$key" "$value" 0
}
consul_kv_get_with_index() {
# returns <value>:<modify_index>
# Usage:
# $ consul_kv_get_with_index foo
# bar:3800
local key="$1"
local response="$(curl -sq "http://localhost:8500/v1/kv/${key}?pretty")"
if [ "$response" = "" ]; then
return 1
fi
local value="$(echo "$response" | grep -Po '(?<="Value": ")[^"]+(?=")' | base64 -d)"
local cas_index="$(echo "$response" | grep -Po '(?<="ModifyIndex": )\d+')"
echo "${value}:${cas_index}"
}
# root@server1:/# consul_kv_put_if_not_exists a c && echo OK || echo ERROR
# ERROR
# root@server1:/# consul kv delete a
# Success! Deleted key: a
# root@server1:/# consul_kv_put_if_not_exists a c && echo OK || echo ERROR
# OK
# root@server1:/# consul_kv_put_if_not_exists a b && echo OK || echo ERROR
# ERROR
# root@server1:/# consul_kv_get_with_index a
# c:4795
# root@server1:/# val_idx="$(consul_kv_get_with_index a)"
# root@server1:/# echo "$val_idx"
# c:4795
# root@server1:/# val="$(echo "$val_idx" | cut -d : -f 1)"
# root@server1:/# echo "$val"
# c
# root@server1:/# idx="$(echo "$val_idx" | cut -d : -f 2)"
# root@server1:/# echo "$idx"
# 4795
# root@server1:/# consul_kv_put_cas a b 99 && echo OK || echo ERROR
# ERROR
# root@server1:/# consul_kv_put_cas a "${val}-updated" 99 && echo OK || echo ERROR
# ERROR
# root@server1:/# consul_kv_put_cas a "${val}-updated" "$idx" && echo OK || echo ERROR
# OK
# root@server1:/# consul_kv_get_with_index a
# c-updated:4832
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment