Browse Source

new: [postgres] new ``sql`` indirect action

Signed-off-by: Valentin Lab <valentin.lab@kalysto.org>
pull/29/head
Valentin Lab 2 years ago
parent
commit
1ec11bf0f4
  1. 110
      postgres/actions/relations/postgres-database/sql

110
postgres/actions/relations/postgres-database/sql

@ -0,0 +1,110 @@
#!/bin/bash
## Load action gets a first argument a FILE/DIRECTORY/URL holding the necessary files.
##
##
if [ -z "$SERVICE_DATASTORE" ]; then
echo "This script is meant to be run through 'compose' to work properly." >&2
exit 1
fi
version=0.1
usage="$exname [-h|--help] DBNAME"
help="
USAGE:
$usage
DESCRIPTION:
Read stdin and content to related postgres service in the database
DBNAME. If DBNAME is not provided, it'll take the default database
from the ${DARKCYAN}postgres-database${NORMAL} relation of current
service.
EXAMPLES:
$exname < foo.sql
$exname mydb2 < foo.sql
"
dbname=
output=
while [ "$1" ]; do
case "$1" in
"--help"|"-h")
print_help >&2
exit 0
;;
"--force"|"-f")
force=yes
;;
--*|-*)
err "Unexpected optional argument '$1'"
print_usage >&2
exit 1
;;
*)
[ -z "$dbname" ] && { dbname=$1 ; shift ; continue ; }
err "Unexpected positional argument '$1'"
print_usage >&2
exit 1
;;
esac
shift
done
if [ -z "$dbname" ]; then
##
## Fetch default dbname in relation to postgres-database
##
## XXXvlab: can't get real config here
if ! read-0 ts _ _ < <(get_service_relation "$SERVICE_NAME" "postgres-database"); then
err "Couldn't find relation ${DARKCYAN}postgres-database${NORMAL}."
exit 1
fi
relation_dir=$(get_relation_data_dir "$SERVICE_NAME" "$ts" "postgres-database") || {
err "Failed to find relation dir"
exit 1
}
postgres_config=$(cat "$relation_dir"/data) || exit 2
dbname="$(e "$postgres_config" | shyaml get-value dbname)" || {
err "Couldn't retrieve information of ${DARKCYAN}postgres-database${NORMAL}'s relation."
exit 1
}
dbuser="$(e "$postgres_config" | shyaml get-value user)" || {
err "Couldn't retrieve information of ${DARKCYAN}postgres-database${NORMAL}'s relation."
exit 1
}
password="$(e "$postgres_config" | shyaml get-value password)" || {
err "Couldn't retrieve information of ${DARKCYAN}postgres-database${NORMAL}'s relation."
exit 1
}
fi
set -e
containers="$(get_running_containers_for_service "$RELATION_TARGET_SERVICE")"
if [ -z "$containers" ]; then
err "No containers running for service $DARKYELLOW$service$NORMAL."
exit 1
fi
## XXXvlab: taking first container is probably not a good idea
container_id="$(echo "$containers" | head -n 1)"
docker exec -i -u 0 \
-e PGUSER="$dbuser" \
-e PGPASSWORD="$password" \
"${container_id}" psql -qAt "$dbname"
Loading…
Cancel
Save