docker devicehub-django entrypoint
This commit is contained in:
parent
34ea4bedfc
commit
8b4d1f51f6
|
@ -5,6 +5,156 @@ set -u
|
||||||
# DEBUG
|
# DEBUG
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
|
# TODO there is a conflict between two shared vars
|
||||||
|
# 1. from the original docker compose devicehub-teal
|
||||||
|
# 2. from the new docker compose that integrates all dpp services
|
||||||
|
wait_for_dpp_shared() {
|
||||||
|
while true; do
|
||||||
|
# specially ensure VERAMO_API_CRED_FILE is not empty,
|
||||||
|
# it takes some time to get data in
|
||||||
|
OPERATOR_TOKEN_FILE='operator-token.txt'
|
||||||
|
if [ -f "/shared/${OPERATOR_TOKEN_FILE}" ] && \
|
||||||
|
[ -f "/shared/create_user_operator_finished" ]; then
|
||||||
|
sleep 5
|
||||||
|
echo "Files ready to process."
|
||||||
|
break
|
||||||
|
else
|
||||||
|
echo "Waiting for file in shared: ${OPERATOR_TOKEN_FILE}"
|
||||||
|
sleep 5
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# 3. Generate an environment .env file.
|
||||||
|
# TODO cargar via shared
|
||||||
|
gen_env_vars() {
|
||||||
|
# specific dpp env vars
|
||||||
|
if [ "${DPP_MODULE}" = 'y' ]; then
|
||||||
|
# docker situation
|
||||||
|
if [ -d "${DPP_SHARED:-}" ]; then
|
||||||
|
wait_for_dpp_shared
|
||||||
|
export API_DLT='http://api_connector:3010'
|
||||||
|
export API_DLT_TOKEN="$(cat "/shared/${OPERATOR_TOKEN_FILE}")"
|
||||||
|
export API_RESOLVER='http://id_index_api:3012'
|
||||||
|
# TODO hardcoded
|
||||||
|
export ID_FEDERATED='DH1'
|
||||||
|
# .env situation
|
||||||
|
else
|
||||||
|
dpp_env_vars="$(cat <<END
|
||||||
|
API_DLT='${API_DLT}'
|
||||||
|
API_DLT_TOKEN='${API_DLT_TOKEN}'
|
||||||
|
API_RESOLVER='${API_RESOLVER}'
|
||||||
|
ID_FEDERATED='${ID_FEDERATED}'
|
||||||
|
END
|
||||||
|
)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# generate config using env vars from docker
|
||||||
|
cat > .env <<END
|
||||||
|
${dpp_env_vars:-}
|
||||||
|
DB_USER='${DB_USER}'
|
||||||
|
DB_PASSWORD='${DB_PASSWORD}'
|
||||||
|
DB_HOST='${DB_HOST}'
|
||||||
|
DB_DATABASE='${DB_DATABASE}'
|
||||||
|
URL_MANUALS='${URL_MANUALS:-}'
|
||||||
|
|
||||||
|
HOST='${HOST}'
|
||||||
|
|
||||||
|
SCHEMA='dbtest'
|
||||||
|
DB_SCHEMA='dbtest'
|
||||||
|
|
||||||
|
EMAIL_DEMO='${EMAIL_DEMO}'
|
||||||
|
PASSWORD_DEMO='${PASSWORD_DEMO}'
|
||||||
|
|
||||||
|
JWT_PASS=${JWT_PASS}
|
||||||
|
SECRET_KEY=${SECRET_KEY}
|
||||||
|
END
|
||||||
|
}
|
||||||
|
|
||||||
|
handle_federated_id() {
|
||||||
|
|
||||||
|
# devicehub host and id federated checker
|
||||||
|
|
||||||
|
# //getAll queries are not accepted by this service, so we remove them
|
||||||
|
EXPECTED_ID_FEDERATED="$(curl -s "${API_RESOLVER%/}/getAll" \
|
||||||
|
| jq -r '.url | to_entries | .[] | select(.value == "'"${DEVICEHUB_HOST}"'") | .key' \
|
||||||
|
| head -n 1)"
|
||||||
|
|
||||||
|
# if is a new DEVICEHUB_HOST, then register it
|
||||||
|
if [ -z "${EXPECTED_ID_FEDERATED}" ]; then
|
||||||
|
# TODO better docker compose run command
|
||||||
|
cmd="docker compose run --entrypoint= devicehub flask dlt_insert_members ${DEVICEHUB_HOST}"
|
||||||
|
big_error "No FEDERATED ID maybe you should run \`${cmd}\`"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# if not new DEVICEHUB_HOST, then check consistency
|
||||||
|
|
||||||
|
# if there is already an ID in the DLT, it should match with my internal ID
|
||||||
|
if [ ! "${EXPECTED_ID_FEDERATED}" = "${ID_FEDERATED}" ]; then
|
||||||
|
|
||||||
|
big_error "ID_FEDERATED should be ${EXPECTED_ID_FEDERATED} instead of ${ID_FEDERATED}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# not needed, but reserved
|
||||||
|
# EXPECTED_DEVICEHUB_HOST="$(curl -s "${API_RESOLVER%/}/getAll" \
|
||||||
|
# | jq -r '.url | to_entries | .[] | select(.key == "'"${ID_FEDERATED}"'") | .value' \
|
||||||
|
# | head -n 1)"
|
||||||
|
# if [ ! "${EXPECTED_DEVICEHUB_HOST}" = "${DEVICEHUB_HOST}" ]; then
|
||||||
|
# big_error "ERROR: DEVICEHUB_HOST should be ${EXPECTED_DEVICEHUB_HOST} instead of ${DEVICEHUB_HOST}"
|
||||||
|
# fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
config_dpp_part1() {
|
||||||
|
# 12. Add a new server to the 'api resolver'
|
||||||
|
if [ "${ID_SERVICE:-}" ]; then
|
||||||
|
handle_federated_id
|
||||||
|
else
|
||||||
|
# TODO when this runs more than one time per service, this is a problem, but for the docker-reset.sh workflow, that's fine
|
||||||
|
# TODO put this in already_configured
|
||||||
|
./manage.py dlt_insert_members "${DEVICEHUB_HOST}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 13. Do a rsync api resolve
|
||||||
|
./manage.py dlt_rsync_members
|
||||||
|
|
||||||
|
# 14. Register a new user to the DLT
|
||||||
|
DATASET_FILE='/tmp/dataset.json'
|
||||||
|
cat > "${DATASET_FILE}" <<END
|
||||||
|
{
|
||||||
|
"email": "${EMAIL_DEMO}",
|
||||||
|
"password": "${PASSWORD_DEMO}",
|
||||||
|
"api_token": "${API_DLT_TOKEN}"
|
||||||
|
}
|
||||||
|
END
|
||||||
|
./manage.py dlt_register_user "${DATASET_FILE}"
|
||||||
|
}
|
||||||
|
|
||||||
|
config_phase() {
|
||||||
|
init_flagfile='/already_configured'
|
||||||
|
if [ ! -f "${init_flagfile}" ]; then
|
||||||
|
|
||||||
|
if [ "${DPP_MODULE}" = 'y' ]; then
|
||||||
|
# 12, 13, 14
|
||||||
|
config_dpp_part1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# TODO fix wrong syntax
|
||||||
|
# non DL user (only for the inventory)
|
||||||
|
# ./manage.py adduser user2@dhub.com ${PASSWORD_DEMO}
|
||||||
|
|
||||||
|
# # 15. Add inventory snapshots for user "${EMAIL_DEMO}".
|
||||||
|
if [ "${IMPORT_SNAPSHOTS}" = 'y' ]; then
|
||||||
|
cp /mnt/snapshots/*.json example/snapshots/
|
||||||
|
/usr/bin/time ./manage.py up_snapshots "${EMAIL_DEMO}" ${PASSWORD_DEMO}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# remain next command as the last operation for this if conditional
|
||||||
|
touch "${init_flagfile}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
check_app_is_there() {
|
check_app_is_there() {
|
||||||
if [ ! -f "./manage.py" ]; then
|
if [ ! -f "./manage.py" ]; then
|
||||||
usage
|
usage
|
||||||
|
@ -70,6 +220,8 @@ runserver() {
|
||||||
main() {
|
main() {
|
||||||
program_dir='/opt/devicehub-django'
|
program_dir='/opt/devicehub-django'
|
||||||
cd "${program_dir}"
|
cd "${program_dir}"
|
||||||
|
gen_env_vars
|
||||||
|
config_phase
|
||||||
deploy
|
deploy
|
||||||
runserver
|
runserver
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue