Trolli Schmittlauch
2e16c5e914
The `rsyncrepo` and `rsynchydra` scripts now support an optional 3rd argument to define the target name on the host instead of auto-determining it from the basename. This is important for syncing local directories of varying names all to the same `fc-nixos` target for dev checkouts on VMs.
85 lines
2.2 KiB
Nix
85 lines
2.2 KiB
Nix
{ pkgs, lib, ... }:
|
|
''
|
|
# rsync -rlptzv --progress --delete --exclude=.git --exclude=.vscode --exclude=result --exclude=channels/ /Users/os/src/fc.qemu os@hydra01:
|
|
# rsync -rlptzv --progress --rsh="ssh -J fcio-whq-jump" --delete --exclude=.git --exclude=.vscode --exclude=result --exclude=channels/ /Users/os/src/fc-nixos/ os@patty:fc-nixos/
|
|
|
|
|
|
DEFAULT_JUMPHOST="fcio-whq-jump"
|
|
|
|
_parse_rsync_args() {
|
|
# reset pre-defined variables that are read and manipulated throughout this function
|
|
unset JUMPHOST
|
|
# arrays are bash or zsh specific
|
|
RSYNC_OPTS=("-rlptzv" "--progress" "--delete" "--exclude=.git" "--exclude=.vscode" "--exclude=result" "--exclude=channels/" "--exclude=.mypy_cache")
|
|
|
|
while getopts ':Jj:' OPT; do
|
|
case $OPT in
|
|
j)
|
|
if [ -n "$JUMPHOST" ]; then
|
|
echo "-j and -J are conflicting arguments" >&2
|
|
return 1
|
|
fi
|
|
JUMPHOST="$OPTARG"
|
|
;;
|
|
J)
|
|
if [ -n "$JUMPHOST" ]; then
|
|
echo "-j and -J are conflicting arguments" >&2
|
|
return 1
|
|
fi
|
|
JUMPHOST="$DEFAULT_JUMPHOST"
|
|
;;
|
|
?)
|
|
echo "rsyncrepo [-J] [-j <jumphost>] <directory> <hostname> [target dir name]"
|
|
return 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# trim CLI parameters
|
|
shift "$(($OPTIND -1))"
|
|
|
|
RR_FROM="$1"
|
|
RR_TO="$2"
|
|
RR_TARGET="$3"
|
|
}
|
|
|
|
_do_rsync() {
|
|
# parameter check
|
|
if [ -z "$1" ] || [ -z "$2" ]; then
|
|
echo "Missing arguments, required: <directory> <hostname>" >&2
|
|
return 1
|
|
fi
|
|
|
|
if [ -n "$JUMPHOST" ]; then
|
|
RSYNC_OPTS+=("--rsh=${lib.getExe pkgs.openssh} -J ''${JUMPHOST}")
|
|
fi
|
|
|
|
for OPTI in "''${RSYNC_OPTS[@]}"; do
|
|
echo "$OPTI"
|
|
done
|
|
|
|
# If no $3 is specified, we sync /path/to/dir/ to hostname:dir
|
|
if [ -z "$3" ]; then
|
|
RR_DEST="''${2}:$(basename $(realpath "''${1}"))"
|
|
else
|
|
RR_DEST="''${2}:''${3}"
|
|
fi
|
|
|
|
echo "Syncing ''${1} to ''${RR_DEST}…"
|
|
|
|
# ensure trailing slash for src to avoid recreating directory
|
|
${lib.getExe pkgs.rsync} "''${RSYNC_OPTS[@]}" "''${1}/" "''${RR_DEST}"
|
|
}
|
|
|
|
rsyncrepo() {
|
|
_parse_rsync_args "$@"
|
|
# inherits parsed arguments through variables
|
|
_do_rsync "$RR_FROM" "$RR_TO" "$RR_TARGET"
|
|
}
|
|
|
|
rsynchydra() {
|
|
_parse_rsync_args "$@"
|
|
_do_rsync "$RR_FROM" "hydra01" "$RR_TARGET"
|
|
}
|
|
''
|