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.
|
|
#!/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
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
set -e
private_key=$(options-get private-key) || exit 1 target=$(options-get target) || exit 1 ident=$(options-get ident) || exit 1
home=/var/lib/rsync local_path_key=$home/.ssh host_path_key="$SERVICE_CONFIGSTORE${local_path_key}"
echo "$private_key" | file_put "$host_path_key/id_rsa" chmod 600 "$host_path_key/id_rsa"
schedule=$(relation-get schedule) || true
lock_opts=(-D -p 10 -k)
command=( docker run --rm -e LABEL_HOSTNAME="$ident" -v "$RSYNC_CONFIG_DIR:/etc/rsync" -v "$host_path_key:$local_path_key" -v "$HOST_DATASTORE:/mnt/source" -v "$HOST_COMPOSE_YML_FILE:/mnt/source/compose.yml" --network ${PROJECT_NAME}_default "$DOCKER_BASE_IMAGE" /mnt/source "$target" )
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"
|