kubernetes-deployments/applyset-deploy.sh

69 lines
1.4 KiB
Bash
Raw Normal View History

2024-09-07 12:35:02 +02:00
#!/usr/bin/env bash
set -euo pipefail
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=$(
envsubst <<EOF | ssh -T "root@$first_server.dmz"
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" \
--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
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"
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"
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