2015-06-29 6 views
3

Давайте предположим, что мы следующие ключевые пары значений импортированы консулу:Как атомизировать несколько записей kv с консулом?

curl -X PUT -d 'val1' http://localhost:8500/v1/kv/stuff/key1 
curl -X PUT -d 'val2' http://localhost:8500/v1/kv/stuff/key2 
curl -X PUT -d 'val3' http://localhost:8500/v1/kv/stuff/key3 

я возможность атомарно обновлять их все вместе?

Причина, по которой я спрашиваю, заключается в том, что мы используем consule для управления конфигурацией, и не будем не учитывать, что зависящие от пары пары ключей только частично обновлены и, следовательно, находятся в противоречивом состоянии.

ответ

2

Невозможно прямо сейчас. Есть открытый GitHub issue, который отслеживает это.

+0

Эта функция была недавно объединилась в Master. – FuzzyAmi

0

Напишите сценарий оболочки для него. сценарий Пример оболочки выглядит следующим образом:

#!/bin/bash 

# This script is used to bootstrap the following properties into the 
# Consul KV store under the config/size key context. 

setproperty() 
{ 
    # Defines the property in the Consul KV if the key is undefined. 
    # 
    # Arguments: 
    # 1 - Consul KV property value 
    # 2 - Consul KV property URL 
    # 3 - Optional boolean that specifies whether the an updated value 
    #  should be echoed (defaults to true). 
    # Returns 
    # N/A 

    local key_value=$1 
    local key_url=$2 
    local echo_is_enabled=true 

    if [ $# == 3 ] 
    then 
     local echo_is_enabled=$3 
    fi 

    # Note: 
    # The ?case=0 flag means to turn the PUT into a Check-And-Set operation, 
    # so that the value will only be put if the key does not already exist. 

    local was_updated=$(curl -s -X PUT -d "$key_value" $key_url?cas=0) 

    if [ true == $echo_is_enabled ] && [ true == $was_updated ] 
    then 
     echo "ConsulKV[URL=$key_url][value=$key_value]" 
    fi 

} 
readonly -f setproperty 

setproperties() 
{ 
    local val1="val1" 
    local url_val1="http://localhost:8500/v1/kv/stuff/key1" 
    if [ -z "$kv_val1" ] && [ -n "$val1" ] 
    then 
     setproperty "$val1" "$url_val1" 
    fi 
} 

main() 
{ 
    local url="http://localhost:8500" 

    # HTTP response code 
    local http_response_code=0 

    # timeout in units of seconds to wait for Consul KV to respond 
    timeout_sec=120 

    # while loop sleep time in units of seconds 
    local sleep_time_sec=5 

    # URL of the consul health service endpoint 
    url_health_service_consul="$url/v1/health/service/consul" 

    # wait until Consul is available or max wait exceeded 
    while [ 200 -ne $http_response_code ] && [ $SECONDS -lt $timeout_sec ] 
    do 
     http_response_code=$(curl -w %{response_code} -s --output /dev/null  $url_health_service_consul) 
     if [ 200 -eq $http_response_code ] 
     then 
      break 
     fi 
     sleep $sleep_time_sec 
    done 

    if [ 200 -eq $http_response_code ] 
    then 
     # set properties if not already defined in Consul KV 
     setproperties 
    else 
     echo "Unable to access: $url_health_service_consul" 
    fi 

} 

readonly -f main 

main 

Добавить все ключевые пары значений, которые вы хотите добавить в методе setproperties

+0

Если ключи уже присутствуют в консуле, значения будут переопределены значениями в скрипте –

Смежные вопросы