From 0109b42cb6ace547f22b8c7905e3604de8aacf07 Mon Sep 17 00:00:00 2001 From: Valentin Lab Date: Wed, 6 Apr 2022 16:27:41 +0200 Subject: [PATCH] new: [monujo] support any section in options to transfer in ``config.json`` Signed-off-by: Valentin Lab --- monujo/lib/common | 97 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 71 insertions(+), 26 deletions(-) diff --git a/monujo/lib/common b/monujo/lib/common index e0bd4a6d..eab606b3 100644 --- a/monujo/lib/common +++ b/monujo/lib/common @@ -11,61 +11,106 @@ monujo:code_init() { mkdir -p "$LOCATION" if dir_is_empty "$LOCATION"; then cd "$LOCATION" - wget -q "$SOURCE_URL" -O file.tar.bz2 - tar xjf file.tar.bz2 - rm file.tar.bz2 + info "First install, downloading '$SOURCE_URL'." + wget -q "$SOURCE_URL" -O file.tar.bz2 || { + err "Couldn't download '$SOURCE_URL'." + rm file.tar.bz2 + return 1 + } + tar xjf file.tar.bz2 && + rm file.tar.bz2 && chown root:root "$LOCATION" -R fi } +export MONUJO_OPTIONS=( + lokapi-host:string + lokapi-db:string + map-url:string + local-password-retention-time:numeric + theme:struct\* +) -monujo:code_config_base() { - - MONUJO_OPTIONS=( - lokapi-host:string - lokapi-db:string - map-url:string - local-password-retention-time:string - ) +export MONUJO_OPTIONS_CONCAT=" ${MONUJO_OPTIONS[*]} " - MONUJO_OPTIONS_CONCAT=" ${MONUJO_OPTIONS[*]} " +monujo:code_config_base() { + local service_def service_def=$(get_compose_service_def "$SERVICE_NAME") || return 1 - echo "{}" > "$CONFIGFILE" + options=$(e "$service_def" | shyaml get-value -y options) || true + + e "$options" | + monujo:json-make > "$CONFIGFILE" || { + err "Failed to make 'config.json'." + return 1 + } +} + +monujo:json-make() { + local conv="$1" key val ## XXXvlab: Should probably offer some lib to do this + local sep= while read-0 key val; do - key_option=${key//-/_} + key=$(e "$key" | shyaml get-value) + ytype=$(e "$val" | shyaml get-type) case "$MONUJO_OPTIONS_CONCAT" in - *" ${key_option}:bool "*) + *" ${key}:bool "*) + val=$(e "$val" | shyaml get-value) case "${val,,}" in true|ok|yes|y) - val=yes + val=true ;; false|ko|nok|no|n) - val=no + val=false ;; *) die "Invalid value for ${WHITE}$key$NORMAL, please use a boolean value." ;; esac ;; - *" ${key_option}:numeric "*) + *" ${key}:numeric "*) + val=$(e "$val" | shyaml get-value) if ! is_int "$val"; then - die "Invalid value for ${WHITE}$key$NORMAL, please use numeric value." + err "Invalid value for ${WHITE}$key$NORMAL, please use numeric value." + return 1 fi ;; - *" ${key_option}:string "*) + *" ${key}:struct* "*) + val=$(e "$val" | monujo:json-make noconv) || return 1 + ;; + *" ${key}:struct "*) + val=$(e "$val" | monujo:json-make) || return 1 + ;; + *" ${key}:string "*|*) + : + ;; + esac + case "$ytype" in + struct|sequence) : ;; + bool) + val=$(e "$val" | shyaml get-value) + ## shyaml outputs actually python's True/False, + ## json need the lowercase version. + val=${val,,} + ;; + str) + val=$(e "$val" | shyaml get-value | jq -Rr tojson) + ;; *) - key_option=$(echo "$key_option" | sed 's/_\([a-z0-9]\)/\U\1/g') - printf "%s %s\0" "$key_option" "$val" + echo "YTYPE: $ytype" >&2 + echo "VAL: $val" >&2 + val=$(e "$val" | shyaml get-value | jq -r tojson) ;; esac - done < <(printf "%s" "$service_def" | shyaml key-values-0 options) | - jq -R 'split("\u0000") | map(split(" ") | {key: .[0], value: .[1]}) | from_entries' > \ - "$CONFIGFILE" - + if [ -z "$conv" ]; then + key=$(echo "${key//-/_}" | sed 's/_\([a-z0-9]\)/\U\1/g') + fi + printf "$sep%s\0%s" "$key" "$val" + sep="\0\0" + done < <(shyaml key-values-0 -y) | + jq -sR 'split("\u0000\u0000") | map(split("\u0000") | {key: .[0], value: .[1] | fromjson}) | from_entries' }