APP_NAME=monujo VERSION=1.0.0-rc.1 SOURCE_URL="https://docker.0k.io/downloads/$APP_NAME-$VERSION.tar.bz2" LOCATION="$SERVICE_DATASTORE/opt/apps/$APP_NAME" CONFIGFILE="$LOCATION/config.json" monujo:code_init() { mkdir -p "$LOCATION" if dir_is_empty "$LOCATION"; then cd "$LOCATION" 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\* ) export MONUJO_OPTIONS_CONCAT=" ${MONUJO_OPTIONS[*]} " monujo:code_config_base() { local service_def service_def=$(get_compose_service_def "$SERVICE_NAME") || return 1 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=$(e "$key" | shyaml get-value) ytype=$(e "$val" | shyaml get-type) case "$MONUJO_OPTIONS_CONCAT" in *" ${key}:bool "*) val=$(e "$val" | shyaml get-value) case "${val,,}" in true|ok|yes|y) val=true ;; false|ko|nok|no|n) val=false ;; *) die "Invalid value for ${WHITE}$key$NORMAL, please use a boolean value." ;; esac ;; *" ${key}:numeric "*) val=$(e "$val" | shyaml get-value) if ! is_int "$val"; then err "Invalid value for ${WHITE}$key$NORMAL, please use numeric value." return 1 fi ;; *" ${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) ;; *) echo "YTYPE: $ytype" >&2 echo "VAL: $val" >&2 val=$(e "$val" | shyaml get-value | jq -r tojson) ;; esac 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' } monujo:config_merge() { local old_config new_config="$1" old_config=$(cat "$CONFIGFILE") e "$old_config" "$new_config" | jq -s 'reduce .[] as $x ({}; . * $x)' > "$CONFIGFILE" }