2024-09-07 12:35:02 +02:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
2025-01-25 23:42:41 +01:00
|
|
|
CREATE_LOCAL_GCROOT=false
|
|
|
|
|
|
|
|
while [[ "$#" -gt 0 ]]; do
|
|
|
|
case "$1" in
|
|
|
|
--help)
|
|
|
|
echo "Use --create-local-gcroot to create local GC root"
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
--create-local-gcroot)
|
|
|
|
CREATE_LOCAL_GCROOT=true
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "Unknown option: $1"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2024-10-13 01:02:15 +02:00
|
|
|
first_server="${SERVERS%% *}"
|
2025-01-11 22:00:22 +01:00
|
|
|
previous_manifest=$(
|
2025-02-16 15:15:56 +01:00
|
|
|
envsubst <<EOF | ssh -T "root@$first_server.dmz"
|
2025-01-25 23:42:41 +01:00
|
|
|
if [[ -f "$GCROOTDIR/$NAME.yml" ]]; then
|
|
|
|
cat "$GCROOTDIR/$NAME.yml"
|
|
|
|
fi
|
2024-10-13 01:02:15 +02:00
|
|
|
EOF
|
|
|
|
)
|
|
|
|
|
|
|
|
set +e
|
|
|
|
if [ -z "$previous_manifest" ]; then
|
|
|
|
echo No previous manifest found!
|
|
|
|
else
|
2025-01-11 22:00:22 +01:00
|
|
|
$DYFF between <(echo "$previous_manifest") "$MANIFEST" \
|
2024-10-17 21:01:12 +02:00
|
|
|
--exclude-regexp metadata.labels.kubenix/hash \
|
|
|
|
--exclude-regexp labels.kubenix/hash \
|
2025-01-11 22:00:22 +01:00
|
|
|
--set-exit-code
|
2024-10-13 01:02:15 +02:00
|
|
|
fi
|
|
|
|
set -e
|
|
|
|
|
2025-01-11 22:00:22 +01:00
|
|
|
read -r -p "Continue? " _
|
2024-10-13 01:02:15 +02:00
|
|
|
|
2024-09-24 23:00:55 +02:00
|
|
|
echo Uploading closure...
|
|
|
|
for server in $SERVERS; do
|
2025-01-11 22:00:22 +01:00
|
|
|
echo Uploading closure to "$server"...
|
|
|
|
nix copy --to "ssh://root@$server.dmz" "$MANIFEST"
|
2024-09-24 23:00:55 +02:00
|
|
|
done
|
|
|
|
|
|
|
|
echo Applying Kubernetes manifest...
|
2024-09-07 12:35:02 +02:00
|
|
|
export KUBECTL_APPLYSET=true
|
2025-01-11 22:00:22 +01:00
|
|
|
vals eval -fail-on-missing-key-in-map <"$MANIFEST" |
|
|
|
|
kubectl apply -f - \
|
|
|
|
--prune \
|
|
|
|
--applyset applyset-"$NAME" \
|
|
|
|
--namespace "$NAMESPACE"
|
2025-01-25 23:42:41 +01:00
|
|
|
|
|
|
|
echo Creating GC roots
|
|
|
|
for server in $SERVERS; do
|
|
|
|
ssh "root@$server.dmz" "mkdir -p $GCROOTDIR && ln -sf $MANIFEST $GCROOTDIR/${NAME}.yml"
|
|
|
|
done
|
|
|
|
|
|
|
|
if $CREATE_LOCAL_GCROOT; then
|
|
|
|
mkdir -p ./.manifests
|
|
|
|
ln -sf "$MANIFEST" "./.manifests/${NAME}.yml"
|
|
|
|
fi
|