aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/update_hosts.sh
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xscripts/update_hosts.sh86
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