#!/bin/bash ## When writing relation script, remember: ## - they should be idempotents ## - they can be launched while the dockers is already up ## - they are launched from the host ## - the target of the link is launched first, and get a chance to ``relation-set`` ## - both side of the scripts get to use ``relation-get``. ## could generate this also if not set DBNAME=$(relation-get dbname) [ "$(relation-get password 2>/dev/null)" ] && exit 0 . lib/common set -e USER=$(relation-get user) PASSWORD="$(gen_password)" POSTGIS=$(relation-get postgis 2>/dev/null) || true UNACCENT=$(relation-get unaccent 2>/dev/null) || true ensure_db_docker_running db_has_database "$DBNAME" || UNACCENT="$UNACCENT" POSTGIS="$POSTGIS" db_create "$DBNAME" if ! db_has_user "$USER"; then info "Creating a new user $USER." db_create_user "$USER" "$PASSWORD" else info "Updating password of user $USER." db_change_password "$USER" "$PASSWORD" fi db_grant_rights "$DBNAME" "$USER" pgpass_line="*:*:*:$USER:$PASSWORD" pgpass_file="$CONFIGSTORE/$BASE_CHARM_NAME/root/.pgpass" if [ -e "$pgpass_file" ]; then sed -ri "/^.+:.+:.+:$USER:.*$/d" "$pgpass_file" fi mkdir -p "$(dirname "$pgpass_file")" echo "$pgpass_line" >> "$pgpass_file" chmod 600 "$pgpass_file" relation-set password "$PASSWORD"