Files
_OTO_IT_onboard/verifica.sh
T
FabioandClaude Opus 5.5 608438323f configura.sh e verifica.sh: anche la produzione nuova
In ~/.ssh/config c'era solo oto-production-old. Adesso c'e' anche
oto-production (10.110.137.20, dietro VPN), con il suo utente
admin.produzione: l'utente non e' piu' uno solo per tutti i server.
verifica.sh controlla tutte e due le produzioni, un tentativo per macchina.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 12:59:58 +02:00

106 lines
4.1 KiB
Bash
Executable File

#!/bin/bash
#
# DICE VERDE O ROSSO PER OGNI ACCESSO, e per ogni rosso cosa fare.
#
# ./verifica.sh
#
# Non modifica niente e non chiede niente: si puo' lanciare quando si vuole,
# anche da Claude. Esce 0 se e' tutto verde, 1 altrimenti.
set -u
cd "$(dirname "$0")" || exit 1
. ./comune.sh
ROSSI=0
rosso () { male "$@" ; ROSSI=$((ROSSI + 1)) ; }
titolo "Programmi"
for P in git docker aws curl ssh ; do
if c_e "$P" ; then ok "$P" ; else rosso "$P non installato" ; fi
done
if c_e docker ; then
if docker info > /dev/null 2>&1 ; then ok "Docker risponde"
else rosso "Docker installato ma non risponde (e' acceso? il tuo utente e' nel gruppo docker?)" ; fi
fi
if c_e claude ; then ok "Claude Code" ; else attento "Claude Code non installato (non obbligatorio, ma ti guida)" ; fi
titolo "AWS"
# Chi e' la persona lo dice Gitea: una chiave AWS di un altro sul PC vuol dire
# che tutto quello che fa su AWS risulta fatto da lui.
UTENTE="$(utente_gitea)"
if c_e aws && IDENTITA="$(aws sts get-caller-identity --query Arn --output text 2> /dev/null)" ; then
if [ -n "$UTENTE" ] && [ "${IDENTITA##*/}" != "$UTENTE" ] ; then
rosso "la chiave AWS di questo PC e' di ${IDENTITA##*/}, non tua ($UTENTE): rilancia ./configura.sh, che la sostituisce"
else
ok "accesso: ${IDENTITA##*/}"
fi
if aws ssm get-parameter --region "$AWS_REGIONE" --name "$SSM_PROVA" --query Parameter.Name --output text > /dev/null 2>&1 ; then
ok "legge i segreti comuni su SSM"
else
rosso "non legge SSM: all'amministratore serve darti il ruolo di sviluppo"
fi
else
rosso "AWS non configurato: rilancia ./configura.sh, che ti dice dove crearti la chiave nella console ($AWS_CONSOLE)"
fi
titolo "Gitea"
if [ -n "$UTENTE" ] ; then
ok "token valido (utente $UTENTE)"
if grep -q "@$GITEA_HOST" "$HOME/.git-credentials" 2> /dev/null || [ -n "$(git config --global credential.helper)" ] ; then
ok "git sa come entrare su $GITEA_HOST"
else
rosso "git non ha le credenziali di Gitea: rilancia ./configura.sh"
fi
else
rosso "token Gitea mancante o non valido: rilancia ./configura.sh"
fi
titolo "Chiave SSH"
if [ -f "$CHIAVE_SSH" ] ; then ok "$CHIAVE_SSH" ; else rosso "chiave mancante: rilancia ./configura.sh" ; fi
titolo "VPN e server"
# La VPN si riconosce da una cosa sola: staging, che sta su rete privata,
# risponde sulla porta SSH. Niente `timeout`: sul Mac non c'e'.
porta_aperta () {
bash -c "exec 3<>/dev/tcp/$1/$2" 2> /dev/null & local pid=$!
( sleep 5 ; kill "$pid" 2> /dev/null ) & local sveglia=$!
wait "$pid" 2> /dev/null ; local esito=$?
kill "$sveglia" 2> /dev/null
return "$esito"
}
if porta_aperta "$STAGING_HOST" 22 ; then
ok "VPN attiva (staging raggiungibile)"
if ssh -o BatchMode=yes -o ConnectTimeout=8 "$STAGING_NOME" true 2> /dev/null ; then
ok "entri su staging ($STAGING_NOME)"
else
rosso "staging non accetta la tua chiave: l'amministratore deve ancora aggiungerla"
fi
else
rosso "staging non raggiungibile: la VPN e' accesa?"
fi
# Le produzioni sono due finche' i siti non sono migrati tutti. La nuova sta
# dietro la stessa VPN di staging. Un tentativo solo per macchina: la nuova
# chiude le porte per un po' a chi sbaglia il login piu' volte di fila.
if porta_aperta "$PRODUZIONE_HOST" 22 ; then
if ssh -o BatchMode=yes -o ConnectTimeout=8 "$PRODUZIONE_NOME" true 2> /dev/null ; then
ok "entri in produzione ($PRODUZIONE_NOME)"
else
attento "produzione ($PRODUZIONE_NOME): non entri (normale se non hai il ruolo di rilascio, o se la tua chiave non e' ancora stata aggiunta)"
fi
else
attento "produzione ($PRODUZIONE_NOME): non raggiungibile (sta dietro la VPN, come staging)"
fi
if ssh -o BatchMode=yes -o ConnectTimeout=8 "$PRODUZIONE_VECCHIA_NOME" true 2> /dev/null ; then
ok "entri nella produzione vecchia ($PRODUZIONE_VECCHIA_NOME)"
else
attento "produzione vecchia ($PRODUZIONE_VECCHIA_NOME): non entri (normale se non hai il ruolo di rilascio, o se la tua chiave non e' ancora stata aggiunta)"
fi
titolo "Risultato"
if [ "$ROSSI" = "0" ] ; then
ok "tutto a posto. Prossimo passo: ./progetti.sh"
exit 0
fi
male "$ROSSI cose da sistemare (sopra, in rosso)"
exit 1