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.
72 lines
2.1 KiB
72 lines
2.1 KiB
#!/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``.
|
|
## - use actions of other side for other side's business logic
|
|
|
|
. lib/common
|
|
|
|
|
|
##
|
|
## This script has to replace `exclude-dbs` options to match definition
|
|
## from `schedule-command` interface that is awaited by the target side
|
|
## in the `pre_deploy` script.
|
|
##
|
|
|
|
if [ -z "$RELATION_DATA_FILE" ]; then
|
|
err "$FUNCNAME: relation does not seems to be correctly setup."
|
|
exit 1
|
|
fi
|
|
|
|
if ! [ -r "$RELATION_DATA_FILE" ]; then
|
|
err "$FUNCNAME: can't read relation's data." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$(cat "$RELATION_DATA_FILE" | shyaml get-type)" == "str" ]; then
|
|
## Cached version already there
|
|
|
|
## Note that we rely on the fact that when the relations
|
|
## options are changed in the `compose.yml` file, the relation
|
|
## data file is recreated from the values of the
|
|
## `compose.yml`.
|
|
info "Previous relation data is still valid."
|
|
exit 0
|
|
fi
|
|
|
|
schedule=$(relation-get schedule) || true
|
|
exclude_dbs=$(relation-get exclude-dbs 2>/dev/null) || true
|
|
exclude_dbs=$(echo "$exclude_dbs" | shyaml get-values 2>/dev/null |
|
|
nspc) || true
|
|
|
|
|
|
lock_opts=(-D -p 10)
|
|
|
|
|
|
command=(
|
|
docker run --rm
|
|
-e PGHOST=${SERVICE_NAME}
|
|
--network ${PROJECT_NAME}_default
|
|
-e exclude_dbs="$exclude_dbs"
|
|
-v "$LOCAL_DB_PASSFILE":/root/.pgpass
|
|
-v "$HOST_CHARM_STORE/${CHARM_REL_PATH#${CHARM_STORE}/}/resources/bin/pg-backup:/usr/sbin/pg-backup"
|
|
-v "$SERVICE_DATASTORE/var/backups/pg:/var/backups/pg"
|
|
--entrypoint pg-backup
|
|
"$DOCKER_BASE_IMAGE"
|
|
)
|
|
|
|
quoted_command=()
|
|
for arg in "${command[@]}"; do
|
|
quoted_command+=("$(printf "%q" "$arg")")
|
|
done
|
|
|
|
printf "(%s) {%s} %s\n" \
|
|
"$schedule" \
|
|
"${lock_opts[*]}" \
|
|
"${quoted_command[*]}" > "$RELATION_DATA_FILE"
|
|
echo "data: '$(cat "$RELATION_DATA_FILE")'" >&2
|
|
|