#!/bin/bash # Managed by Ansible (role s3_replicate). hel1 -> fsn1, one bucket at a time; # a failing pair does not stop the others, but fails the run. set -uo pipefail failed=0 rclone() { docker run --rm --env-file /etc/s3-replicate/env \ rclone/rclone:{{ s3_replicate_rclone_version }} "$@" } {% for p in s3_replicate_pairs %} echo "s3-replicate: {{ p.src }} -> {{ p.dst }}" rclone sync hel1:{{ p.src }} fsn1:{{ p.dst }} \ --fast-list --checkers 16 --transfers 8 --max-delete {{ s3_replicate_max_delete }} \ {% for e in p.exclude | default([]) %} --exclude '{{ e }}' \ {% endfor %} --stats-one-line -v || failed=1 {% endfor %} if [ $failed = 0 ]; then f={{ monitoring_textfile_dir }}/s3_replicate.prom printf '# HELP s3_replicate_last_success_timestamp_seconds Last fully successful hel1 to fsn1 replica.\n# TYPE s3_replicate_last_success_timestamp_seconds gauge\ns3_replicate_last_success_timestamp_seconds %s\n' "$(date +%s)" > "$f.tmp" && mv "$f.tmp" "$f" fi exit $failed