diff options
| author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2026-07-30 15:18:51 +0200 |
|---|---|---|
| committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2026-07-30 15:18:51 +0200 |
| commit | 484673d59bdd15fb10bdc366f5d8b15fee596b8e (patch) | |
| tree | e8aa7e9ea8081275790daf8eeab827852e30d509 /scripts/update_hosts.sh | |
| parent | modules: Use namespaces (diff) | |
| download | nixos-server-484673d59bdd15fb10bdc366f5d8b15fee596b8e.zip | |
scripts/{build.sh,update_host.sh}: Make smarter
Diffstat (limited to 'scripts/update_hosts.sh')
| -rwxr-xr-x | scripts/update_hosts.sh | 75 |
1 files changed, 68 insertions, 7 deletions
diff --git a/scripts/update_hosts.sh b/scripts/update_hosts.sh index cc459ed..94003b8 100755 --- a/scripts/update_hosts.sh +++ b/scripts/update_hosts.sh @@ -3,21 +3,82 @@ set -e base_dir="$(git rev-parse --show-toplevel)" -user="${1-$USER}" -hosts="${2-server2 server3}" -branch="${3-main}" +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 "Copying closure ..\n" - nix copy --substitute-on-destination --to "ssh://$user@$host.vhack.eu" ".#nixosConfigurations.$host.config.system.build.toplevel" - printf "Deploying remote side script ..\n" scp "$base_dir/scripts/update_hosts.remote" "$user@$host.vhack.eu:update_host.remote" + set -x + + 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'" + 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 |
