diff options
Diffstat (limited to '')
| -rwxr-xr-x | scripts/update_hosts.sh | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/scripts/update_hosts.sh b/scripts/update_hosts.sh new file mode 100755 index 0000000..4f32722 --- /dev/null +++ b/scripts/update_hosts.sh @@ -0,0 +1,86 @@ +#! /usr/bin/env sh +set -e + +base_dir="$(git rev-parse --show-toplevel)" + +user="$USER" +set_hosts="" +branch="main" +direct=false + +while [ "$#" -ne 0 ]; do + case "$1" in + --user) + shift 1 + user="$1" + ;; + --host) + shift 1 + set_hosts="$set_hosts $1" + ;; + --hosts) + shift 1 + if [ -n "$set_hosts" ]; then + echo "Warning: --hosts overrides --host" + fi + set_hosts="$1" + ;; + --branch) + shift 1 + branch="$1" + ;; + --direct) + direct=true + ;; + *) + echo "Arg '$1' not known." + exit 2 + ;; + esac + shift 1 +done + +hosts="${set_hosts-"server2 server3"}" + +echo "update_hosts.sh --user '$user' --hosts '$hosts' --branch '$branch' --direct '$direct'" + +for host in $hosts; do + echo "Updating '$user@$host.vhack.eu' ..." + + printf "Deploying remote side script ..\n" + scp "$base_dir/scripts/update_hosts.remote" "$user@$host.vhack.eu:update_host.remote" + + flake_path="" + if [ "$direct" = true ]; then + printf "Deploying git config ..\n" + + flake_path="path:$(git archive --format=tar.gz HEAD | + ssh "$user@$host.vhack.eu" \ + 'flake_path=$(mktemp -d -t update_hosts_XXXXX); cd $flake_path && tar -xz; echo $flake_path')" + + fi + + tmp="$(mktemp -d -t "server_build_script_XXXXX")" + trap 'rm -r "$tmp"' EXIT + if [ "$direct" = true ]; then + git archive --format=tar.gz HEAD | { + cd "$tmp" + tar -xz + } + else + git clone "git.foss-syndicate.org" --branch="$branch" "$tmp" + fi + cd "$tmp" + + printf "Copying closure ..\n" + nix copy --substitute-on-destination --to "ssh://$user@$host.vhack.eu" ".#nixosConfigurations.$host.config.system.build.toplevel" + + printf "Executing remote side script ..\n" + ssh -t "$user@$host.vhack.eu" "chmod +x update_host.remote; ./update_host.remote '$branch' '$flake_path'" +done + +# Give the servers some time to reboot +sleep 5 +ping_hosts.sh "$user" "$hosts" + +# vim: ft=sh |
