Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 22 additions & 38 deletions addons/postgresql/reloader/update-parameter.sh
Original file line number Diff line number Diff line change
@@ -1,65 +1,49 @@
#!/bin/bash
set -euo pipefail
#!/bin/sh
set -eu

parse_yaml_array() {
local file="$1"
[[ -f "$file" ]] && grep "^- " "$file" | sed 's/^- //' | sed 's/^["'\'']//' | sed 's/["'\'']$//'
file="$1"
[ -f "$file" ] && grep "^- " "$file" | sed 's/^- //' | sed 's/^["'\'']//' | sed 's/["'\'']$//'
}

in_array() {
local target="$1"
target="$1"
shift
for item in "$@"; do
[[ "$item" == "$target" ]] && return 0
done
return 1
}

build_json_with_jq() {
local json="{}"
items="$*"

for key in "${!patroni_dict[@]}"; do
json=$(echo "$json" | jq --arg k "$key" --arg v "${patroni_dict[$key]}" '. + {($k): $v}')
for item in $items; do
[ "$item" = "$target" ] && return 0
done

if [[ ${#postgresql_dict[@]} -gt 0 ]]; then
local pg_params="{}"
for key in "${!postgresql_dict[@]}"; do
pg_params=$(echo "$pg_params" | jq --arg k "$key" --arg v "${postgresql_dict[$key]}" '. + {($k): $v}')
done
json=$(echo "$json" | jq --argjson params "$pg_params" '. + {postgresql: {parameters: $params}}')
fi

echo "$json"
return 1
}

BOOTSTRAP_FILE="./restart-parameter.yaml"
PATRONI_PARAMS_FILE="./patroni-parameter.yaml"
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
BOOTSTRAP_FILE="${SCRIPT_DIR}/restart-parameter.yaml"
PATRONI_PARAMS_FILE="${SCRIPT_DIR}/patroni-parameter.yaml"

mapfile -t restart_params < <(parse_yaml_array "$BOOTSTRAP_FILE")
mapfile -t patroni_params < <(parse_yaml_array "$PATRONI_PARAMS_FILE")
restart_params=$(parse_yaml_array "$BOOTSTRAP_FILE")
patroni_params=$(parse_yaml_array "$PATRONI_PARAMS_FILE")

command="reload"
paramName="${1:?missing param name}"
paramValue="${2:?missing value}"
paramValue="${paramValue//\'/}"
paramValue=$(echo "$paramValue" | sed "s/'//g")

declare -A patroni_dict
declare -A postgresql_dict
if in_array "$paramName" "${patroni_params[@]}"; then
patroni_dict["$paramName"]="$paramValue"
json_params="{}"
if in_array "$paramName" "$patroni_params"; then
json_params=$(echo "$json_params" | jq --arg k "$paramName" --arg v "$paramValue" '. + {($k): $v}')
else
postgresql_dict["$paramName"]="$paramValue"
pg_params=$(echo "{}" | jq --arg k "$paramName" --arg v "$paramValue" '. + {($k): $v}')
json_params=$(echo "$json_params" | jq --argjson params "$pg_params" '. + {postgresql: {parameters: $params}}')
fi

in_array "$paramName" "${restart_params[@]}" && command="restart"
in_array "$paramName" "$restart_params" && command="restart"

json_params=$(build_json_with_jq)
curl -s -X PATCH -H "Content-Type: application/json" \
--data "$json_params" \
"http://localhost:8008/config"

if [[ "$command" == "restart" ]]; then
if [ "$command" = "restart" ]; then
curl -s -X POST "http://localhost:8008/restart"
else
curl -s -X POST "http://localhost:8008/reload"
Expand Down
7 changes: 1 addition & 6 deletions addons/postgresql/templates/paramsdef.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,7 @@ spec:
scriptConfig:
scriptConfigMapRef: {{ include "postgresql.patroniReloadScriptsTemplate" $ }}
namespace: {{ $.Release.Namespace }}
toolsSetup:
mountPoint: /kb_tools
toolConfigs:
- name: kb-tools
image: {{ $.Values.image.registry | default "docker.io" }}/{{ $.Values.image.repository }}:{{ (index .minors 0).tag }}
asContainerImage: true

## update patroni master
targetPodSelector:
matchLabels:
Expand Down
Loading