forked from 0k/0k-charms
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.5 KiB
111 lines
3.5 KiB
# -*- mode: shell-script -*-
|
|
|
|
|
|
CONFIG_DIR="$SERVICE_CONFIGSTORE"/etc/etherpad
|
|
ORIG_CONFIG_FILE="$CONFIG_DIR/settings.json.orig"
|
|
|
|
etherpad:ensure-orig-json-exists() {
|
|
if ! [ -e "$ORIG_CONFIG_FILE" ]; then
|
|
mkdir -p "${ORIG_CONFIG_FILE%/*}" || return 1
|
|
## Remove comments from container file and copy it in
|
|
## configstore
|
|
if out=$(docker run --rm --entrypoint bash "$DOCKER_BASE_IMAGE" \
|
|
-c "npm install mjson && node_modules/.bin/mjson.js < settings.json"); then
|
|
## XXXvlab: output from mjson.js is still minified in my local install
|
|
## lets keep this code if necessary later.
|
|
# if ! echo "$out" | jq . > "$ORIG_CONFIG_FILE"; then
|
|
# err "Jq failed with output from container."
|
|
# rm -fv "$ORIG_CONFIG_FILE"
|
|
# return 1
|
|
# fi
|
|
echo "$out" > "$ORIG_CONFIG_FILE"
|
|
else
|
|
err "Could not out-source clean 'setting.json' from container."
|
|
return 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
etherpad:api:init() {
|
|
container_network_ip=$(get_healthy_container_ip_for_service "$SERVICE_NAME" 9001 4) || {
|
|
echo " Please ensure that ${DARKYELLOW}${SERVICE_NAME}${NORMAL} is running before using '$exname'." >&2
|
|
return 1
|
|
}
|
|
|
|
container_ip=${container_network_ip##*:}
|
|
container_network=${container_network_ip%%:*}
|
|
|
|
export ETHERPAD_DOCKER_OPTS=(--network "$container_network")
|
|
|
|
if ! API_KEY=$(cat "$SERVICE_DATASTORE/var/lib/etherpad/APIKEY.txt"); then
|
|
err "Can't find API KEY for ${DARKYELLOW}${SERVICE_NAME}${NORMAL}."
|
|
return 1
|
|
fi
|
|
|
|
export DEFAULT_CURL_IMAGE=${DEFAULT_CURL_IMAGE:-docker.0k.io/curl}
|
|
export ETHERPAD_HOST="http://${container_ip}:9001"
|
|
|
|
if ! out=$(etherpad:curl api/openapi.json); then
|
|
err "Couldn't get API description from ${DARKYELLOW}${SERVICE_NAME}${NORMAL}."
|
|
return 1
|
|
fi
|
|
|
|
if ! api_version=$(e "$out" | jq -r '.info.version'); then
|
|
err "Couldn't get version information from ${DARKYELLOW}${SERVICE_NAME}${NORMAL} API's description."
|
|
# echo "$out" | prefix " | " >&2
|
|
return 1
|
|
fi
|
|
|
|
export ETHERPAD_API_BASE_PATH="api/${api_version}"
|
|
}
|
|
|
|
etherpad:curl() {
|
|
local path="$1" cmd
|
|
shift
|
|
cmd=(
|
|
docker run --rm "${ETHERPAD_DOCKER_OPTS[@]}"
|
|
"$DEFAULT_CURL_IMAGE"
|
|
-sS
|
|
"$@"
|
|
"${ETHERPAD_HOST}/$path"
|
|
)
|
|
|
|
# debug "Launching: ${cmd[@]}"
|
|
"${cmd[@]}"
|
|
}
|
|
|
|
etherpad:api() {
|
|
local method="$1" code out
|
|
shift
|
|
|
|
if [ -z "$ETHERPAD_API_BASE_PATH" ]; then
|
|
etherpad:api:init
|
|
fi
|
|
|
|
if ! out=$(
|
|
etherpad:curl "${ETHERPAD_API_BASE_PATH}/$method" -X POST -d "apikey=${API_KEY}" "$@"
|
|
); then
|
|
err "Couldn't query API ${WHITE}$method${NORMAL} from ${DARKYELLOW}${SERVICE_NAME}${NORMAL}."
|
|
return 1
|
|
fi
|
|
if ! code=$(e "$out" | jq -r ".code"); then
|
|
err "Unexpected response format from call to ${WHITE}$method${NORMAL} " \
|
|
"API endpoint for ${DARKYELLOW}${SERVICE_NAME}${NORMAL}."
|
|
# echo "$out" | prefix " | " >&2
|
|
exit 1
|
|
fi
|
|
if [[ "$code" != "0" ]]; then
|
|
if ! message=$(e "$out" | jq -r ".message"); then
|
|
err "Unexpected response format from call to ${WHITE}$method${NORMAL} " \
|
|
"API endpoint for ${DARKYELLOW}${SERVICE_NAME}${NORMAL}."
|
|
# echo "$out" | prefix " | " >&2
|
|
exit 1
|
|
fi
|
|
err "${WHITE}$method${NORMAL}: $message"
|
|
# echo "$out" | prefix " | " >&2
|
|
exit 1
|
|
fi
|
|
|
|
e "$out" | jq '.data'
|
|
}
|