|
|
@ -3,6 +3,92 @@ |
|
|
|
POSTGRES_IMAGE=docker.0k.io/postgres:12.15.0-myc |
|
|
|
|
|
|
|
|
|
|
|
## Mappings |
|
|
|
|
|
|
|
replace_by_rematch_pattern() { |
|
|
|
local input="$1" output="" char next_char i |
|
|
|
# Loop through each character in the string |
|
|
|
for (( i=0; i<${#input}; i++ )); do |
|
|
|
char="${input:$i:1}" |
|
|
|
|
|
|
|
# If a dollar sign is found |
|
|
|
if [[ "$char" == '$' ]]; then |
|
|
|
next_char="${input:$((i+1)):1}" |
|
|
|
# Check if next character is a digit |
|
|
|
if [[ "$next_char" =~ [0-9] ]]; then |
|
|
|
# Replace $N with ${rematch[N]} |
|
|
|
output+='${rematch['"$next_char"']}' |
|
|
|
((i++)) # Skip next character as it's already processed |
|
|
|
continue |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
output+="$char" |
|
|
|
done |
|
|
|
|
|
|
|
echo "$output" |
|
|
|
} |
|
|
|
export -f replace_by_rematch_pattern |
|
|
|
|
|
|
|
|
|
|
|
service:map:get_one() { |
|
|
|
local map_label="$1" |
|
|
|
res=() |
|
|
|
if service_map=$(options-get "service-${map_label}-map" 2>/dev/null) && |
|
|
|
[ -n "$service_map" ]; then |
|
|
|
while read-0 regex map; do |
|
|
|
if [[ "$BASE_SERVICE_NAME" =~ ^$regex$ ]]; then |
|
|
|
rematch=("${BASH_REMATCH[@]}") |
|
|
|
maps=() |
|
|
|
type=$(e "$map" | shyaml -q get-type 2>/dev/null) || true |
|
|
|
value=$(e "$map" | shyaml -q get-value -y 2>/dev/null) || true |
|
|
|
case "$type" in |
|
|
|
sequence) |
|
|
|
while read-0 m; do |
|
|
|
if [[ "$m" != "None" ]] && [ -n "$m" ]; then |
|
|
|
maps+=("$m") |
|
|
|
fi |
|
|
|
done < <(e "$value" | shyaml get-values-0) |
|
|
|
;; |
|
|
|
str) |
|
|
|
if ! m=$(e "$value" | shyaml get-value 2>/dev/null); then |
|
|
|
err "Failed to get mapping value from config." |
|
|
|
return 1 |
|
|
|
fi |
|
|
|
[ -z "$m" ] && continue |
|
|
|
maps+=("$m") |
|
|
|
;; |
|
|
|
NoneType|"") |
|
|
|
: |
|
|
|
;; |
|
|
|
esac |
|
|
|
for map in "${maps[@]}"; do |
|
|
|
if ! [[ "$map" =~ ^([a-zA-Z0-9_*\{\}\ \,.-]|\$[0-9])+$ ]]; then |
|
|
|
err "Invalid mapping value '$map' in ${WHITE}service-${map_label}-map$NORMAL option." |
|
|
|
return 1 |
|
|
|
fi |
|
|
|
|
|
|
|
map="${map//\*/\\*}" ## protect star from eval |
|
|
|
map=$(replace_by_rematch_pattern "$map") |
|
|
|
|
|
|
|
res+=($(set -- "${BASH_REMATCH[@]}"; eval echo "${map//\*/\\*}")) |
|
|
|
done |
|
|
|
break |
|
|
|
fi |
|
|
|
done < <(e "$service_map" | yq e -0 'to_entries | .[] | [.key, .value] |.[]') |
|
|
|
fi |
|
|
|
if [ "${#res[@]}" -gt 1 ]; then |
|
|
|
err "Multiple databases found for service '$BASE_SERVICE_NAME': ${dbnames[*]}." \ |
|
|
|
"Please specify a single database in the service-${map_label}-map option." |
|
|
|
return 1 |
|
|
|
fi |
|
|
|
echo "${res[0]}" |
|
|
|
} |
|
|
|
|
|
|
|
## |
|
|
|
## DB |
|
|
|
## |
|
|
|
|
|
|
|
ddb () { |
|
|
|
docker run --rm -i \ |
|
|
|
-e PGPASSWORD="$PASSWORD" \ |
|
|
|