Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018BAUeCFpDkRD6tU5wGsc1C
57 lines
1.8 KiB
Bash
Executable File
57 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# =============================================================================
|
|
# Enveloppe de la cle SSH de deploiement
|
|
# =============================================================================
|
|
# Reference depuis ~deploy/.ssh/authorized_keys sur app-01 :
|
|
#
|
|
# restrict,pty,command="/opt/xpeditis/infra-prod/scripts/ssh-deploy-wrapper.sh" ssh-ed25519 AAAA... github-actions-prod
|
|
#
|
|
# Le `command=` d'OpenSSH ignore ce que le client demande et execute ce script,
|
|
# en placant la commande d'origine dans SSH_ORIGINAL_COMMAND. Une cle volee ne
|
|
# donne donc pas un shell : elle ne peut lancer que ce qui est autorise ici.
|
|
set -euo pipefail
|
|
|
|
CMD="${SSH_ORIGINAL_COMMAND:-}"
|
|
LOG_TAG=xpeditis-ssh-deploy
|
|
|
|
deny() {
|
|
logger -t "$LOG_TAG" -- "REFUS: ${CMD}"
|
|
echo "Commande non autorisee pour cette cle." >&2
|
|
exit 126
|
|
}
|
|
|
|
logger -t "$LOG_TAG" -- "DEMANDE: ${CMD}"
|
|
|
|
case "$CMD" in
|
|
# rsync doit pouvoir se lancer en mode serveur pour recevoir infra/prod.
|
|
# --server et --sender uniquement, chemin de destination contraint.
|
|
"rsync --server "*"/opt/xpeditis/infra-prod/"*)
|
|
exec $CMD
|
|
;;
|
|
|
|
# Deploiement d'une version. Le tag est valide par une expression stricte :
|
|
# sans cela, `deploy.sh "; rm -rf /"` serait accepte.
|
|
"deploy "*)
|
|
TAG="${CMD#deploy }"
|
|
[[ "$TAG" =~ ^prod-[a-f0-9]{7,40}$ ]] || deny
|
|
exec /opt/xpeditis/infra-prod/scripts/deploy.sh "$TAG"
|
|
;;
|
|
|
|
# Retour arriere d'urgence.
|
|
"rollback")
|
|
kubectl -n xpeditis-prod rollout undo deploy/xpeditis-backend
|
|
kubectl -n xpeditis-prod rollout undo deploy/xpeditis-frontend
|
|
exec kubectl -n xpeditis-prod rollout status deploy/xpeditis-backend --timeout=180s
|
|
;;
|
|
|
|
# Diagnostic en lecture seule.
|
|
"status")
|
|
kubectl -n xpeditis-prod get pods,deploy -o wide
|
|
exec kubectl -n xpeditis-prod get events --sort-by=.lastTimestamp | tail -20
|
|
;;
|
|
|
|
*)
|
|
deny
|
|
;;
|
|
esac
|