#!/usr/bin/env bash
#/ Usage: ghe-restore-minio <host>
#/ Restore additional minio files from an rsync snapshot.
#/
#/ Note: This script typically isn't called directly. It's invoked by the
#/ ghe-restore command.
set -e

# Bring in the backup configuration
# shellcheck source=share/github-backup-utils/ghe-backup-config
. "$(dirname "${BASH_SOURCE[0]}")/ghe-backup-config"

# Show usage and bail with no arguments
[[ -z ${*} ]] && print_usage

bm_start "$(basename "${0}")"

# Grab host arg
GHE_HOSTNAME="${1}"

# The snapshot to restore should be set by the ghe-restore command but this lets
# us run this script directly.
: "${GHE_RESTORE_SNAPSHOT:=current}"

# Path to snapshot dir we're restoring from
GHE_RESTORE_SNAPSHOT_PATH="${GHE_DATA_DIR}/${GHE_RESTORE_SNAPSHOT}"

port="$(ssh_port_part "${GHE_HOSTNAME}")"
host="$(ssh_host_part "${GHE_HOSTNAME}")"

# No need to restore anything, early exit
if [ ! -d "${GHE_RESTORE_SNAPSHOT_PATH}/minio" ]; then
  log_warn "Warning: minio backup missing. Skipping ..."
  exit 0
fi

# Perform a host-check and establish GHE_REMOTE_XXX variables.
ghe_remote_version_required "${host}"

# Transfer all minio data from the snapshot to the user data directory using rsync.
ghe_verbose "* Transferring minio files to ${host} ..."

ghe-ssh -p "${port}" "${host}" -- sudo mkdir -p "${GHE_REMOTE_DATA_USER_DIR}/minio"
ghe-ssh -p "${port}" "${host}" -- sudo chown -R minio:minio "${GHE_REMOTE_DATA_USER_DIR}/minio"
log_rsync "BEGIN: minio rsync" 1>&3
ghe-rsync \
  --verbose \
  --archive \
  --hard-links \
  --relative \
  --delete \
  --rsh="ghe-ssh -p ${port}" \
  --rsync-path='sudo -u minio rsync' \
  "${GHE_RESTORE_SNAPSHOT_PATH}/minio/./" \
  "${host}:${GHE_REMOTE_DATA_USER_DIR}/minio/" 1>&3
log_rsync "END: minio rsync" 1>&3
bm_end "$(basename "${0}")"
