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.
141 lines
4.0 KiB
141 lines
4.0 KiB
#!/bin/bash
|
|
|
|
. lib/common
|
|
|
|
|
|
set -e
|
|
|
|
|
|
## If no admin-password set, then don't try to pre-initialize database
|
|
admin_password=$(options-get admin-password 2>/dev/null) || exit 0
|
|
admin_email=$(options-get admin-email 2>/dev/null ) || true
|
|
|
|
|
|
## XXXvlab: can't get real config here
|
|
if ! read-0 ts _ _ < <(get_service_relation "$SERVICE_NAME" "mongo-database"); then
|
|
err "Couldn't find relation ${DARKCYAN}mongo-database${NORMAL}."
|
|
exit 1
|
|
fi
|
|
|
|
|
|
##
|
|
## We need mongo relation config also
|
|
##
|
|
|
|
relation_file=$(get_relation_data_file "$SERVICE_NAME" "$ts" "mongo-database") || {
|
|
err "Failed to find relation file"
|
|
exit 1
|
|
}
|
|
|
|
mongo_config=$(cat "$relation_file") || exit 2
|
|
|
|
DBNAME="$(e "$mongo_config" | shyaml get-value dbname)" || {
|
|
err "Couldn't retrieve information of ${DARKCYAN}mongo-database${NORMAL}'s relation."
|
|
exit 1
|
|
}
|
|
|
|
|
|
|
|
CONTROL="$SERVICE_DATASTORE/.control"
|
|
## Was it already properly propagated to database ?
|
|
control=$(H "${admin_password}" "${admin_email}")
|
|
if [ -e "$CONTROL" ]; then
|
|
if [ "$control" == "$(cat "$CONTROL")" ]; then
|
|
exit 0
|
|
else
|
|
err "Changing admin password in compose file not yet supported"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
|
|
##
|
|
## Get domain in option of relation "publish-dir"
|
|
##
|
|
|
|
## XXXvlab: there is a tiny lapse of time where database is not yet
|
|
## installed, and admin password is the default value.
|
|
|
|
## XXXvlab: can't get real config here
|
|
if ! read-0 publish_dir_ts _ _ < <(get_service_relation "$SERVICE_NAME" "publish-dir"); then
|
|
err "Couldn't find relation ${DARKCYAN}publish-dir${NORMAL}."
|
|
exit 1
|
|
fi
|
|
|
|
publish_dir_relation_dir=$(get_relation_data_dir "$SERVICE_NAME" "$publish_dir_ts" "publish-dir") || {
|
|
err "Failed to find relation file"
|
|
exit 1
|
|
}
|
|
|
|
publish_dir_relation_config=$(cat "$publish_dir_relation_dir/data") || exit 2
|
|
|
|
domain=$(e "$publish_dir_relation_config" | shyaml get-value domain) || {
|
|
err "Couldn't get domain information in ${DARKCYAN}publish-dir${NORMAL} relation's data."
|
|
exit 1
|
|
}
|
|
|
|
url=$(e "$publish_dir_relation_config" | shyaml get-value url) || {
|
|
err "Couldn't get domain information in ${DARKCYAN}publish-dir${NORMAL} relation's data."
|
|
exit 1
|
|
}
|
|
|
|
protocol="${url%%://*}"
|
|
|
|
|
|
##
|
|
## We are in post_deploy, so our service is up, we need to get
|
|
## the ``network`` and ``container``'s id to communicate with
|
|
## him.
|
|
##
|
|
|
|
container_id=$(
|
|
for container_id in $(get_running_containers_for_service "$MASTER_BASE_SERVICE_NAME"); do
|
|
e "$container_id"
|
|
break
|
|
done
|
|
)
|
|
|
|
|
|
admin_email=${admin_email:-"admin@$domain"}
|
|
|
|
|
|
read-0 network container_ip < <(get_container_network_ip "$container_id")
|
|
|
|
|
|
debug "Running index.php/project/initialize"
|
|
echo docker run --network "$network" docker.0k.io/curl -k -s -X POST -H "Host: $domain" -L \
|
|
-F sonata_user_registration[username]="admin" \
|
|
-F sonata_user_registration[email]="$admin_email" \
|
|
-F sonata_user_registration[plainPassword][first]="$admin_password" \
|
|
-F sonata_user_registration[plainPassword][second]="$admin_password" \
|
|
"$protocol://$container_ip/index.php/project/initialize"
|
|
out=$(docker run --network "$network" docker.0k.io/curl -k -s -X POST -H "Host: $domain" -L \
|
|
-F sonata_user_registration[username]="admin" \
|
|
-F sonata_user_registration[email]="$admin_email" \
|
|
-F sonata_user_registration[plainPassword][first]="$admin_password" \
|
|
-F sonata_user_registration[plainPassword][second]="$admin_password" \
|
|
"$protocol://$container_ip/index.php/project/initialize") || {
|
|
err "Failed to run project/initialize script"
|
|
echo "$out"
|
|
exit 1
|
|
}
|
|
|
|
|
|
# #e "$out" > "$SERVICE_DATASTORE/out.html"
|
|
# # debug "written $SERVICE_DATASTORE/out.html"
|
|
# had_error=
|
|
# while read-0 error_msg; do
|
|
# had_error=1
|
|
# err "Installation failed with these errors:"
|
|
# echo "- ${error_msg}" >&2
|
|
# done < <(e "$out" | xpath "//div[@class='errors']/ul/li/text()")
|
|
|
|
# if [ "$had_error" ]; then
|
|
# exit 1
|
|
# fi
|
|
|
|
# debug "No error catched on \`\`install.php\`\` result."
|
|
# e "$control" > "$CONTROL"
|
|
|
|
|
|
exit 0
|