onboard: niente piu' esiti verdi su passi falliti, git e AWS verificati davvero
- configura.sh e progetti.sh escono 1 se un passo non riesce (scrittura di ~/.ssh/config, chiave SSH, clone, chiave AWS), e lo dicono in rosso; - git: per l'indirizzo di Gitea si usa solo il gestore "store", e un token vecchio rimasto in ~/.git-credentials si sostituisce (prima si aggiungeva solo se mancava: API buona e git clone rotto). verifica.sh chiede a git la credenziale che userebbe davvero, invece di accontentarsi di un gestore qualsiasi; - AWS: la chiave si controlla PRIMA di salvarla, e deve essere l'utente della persona nell'account di OTO (ARN completo, non solo il nome). Senza Gitea il passo si salta e verifica.sh non da' piu' verde a una chiave qualsiasi. Avviso se AWS_PROFILE o AWS_ACCESS_KEY_ID... fanno usare un'altra chiave; - API di Gitea: codice HTTP controllato, "Gitea non risponde" distinto da "token non valido", elenco dei progetti interrotto solo su una pagina vuota vera; token passato a curl da stdin; JSON letto anche con gli spazi; - progetti.sh: nomi confrontati in modo esatto, accetta organizzazione/nome e dice quando un nome corto e' ambiguo; - la chiave ~/.ssh/oto_ed25519 viene collegata anche ai nomi che cercano i deploy dei progetti (oto_staging_ed25519, oto_production_ed25519): su un PC preparato da qui il primo deploy si fermava con "Chiave privata non trovata"; - verifica.sh --senza-vpn, per chi non ha la VPN: staging giallo e non rosso. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+52
-21
@@ -2,7 +2,8 @@
|
||||
#
|
||||
# DICE VERDE O ROSSO PER OGNI ACCESSO, e per ogni rosso cosa fare.
|
||||
#
|
||||
# ./verifica.sh
|
||||
# ./verifica.sh # per chi ha la VPN
|
||||
# ./verifica.sh --senza-vpn # per chi non la ha: staging non raggiungibile e' giallo
|
||||
#
|
||||
# Non modifica niente e non chiede niente: si puo' lanciare quando si vuole,
|
||||
# anche da Claude. Esce 0 se e' tutto verde, 1 altrimenti.
|
||||
@@ -11,6 +12,15 @@ set -u
|
||||
cd "$(dirname "$0")" || exit 1
|
||||
. ./comune.sh
|
||||
|
||||
# Chi non ha la VPN non arriva a staging, ed e' giusto cosi': senza questa
|
||||
# opzione quel rosso faceva uscire 1 anche un PC preparato bene per il suo ruolo.
|
||||
SENZA_VPN=0
|
||||
case "${1:-}" in
|
||||
--senza-vpn) SENZA_VPN=1 ;;
|
||||
"") ;;
|
||||
*) echo "Uso: ./verifica.sh [--senza-vpn]" >&2 ; exit 2 ;;
|
||||
esac
|
||||
|
||||
ROSSI=0
|
||||
rosso () { male "$@" ; ROSSI=$((ROSSI + 1)) ; }
|
||||
|
||||
@@ -24,17 +34,44 @@ if c_e docker ; then
|
||||
fi
|
||||
if c_e claude ; then ok "Claude Code" ; else attento "Claude Code non installato (non obbligatorio, ma ti guida)" ; fi
|
||||
|
||||
titolo "Gitea"
|
||||
UTENTE="$(utente_gitea)" ; ESITO_GITEA=$?
|
||||
if [ -n "$UTENTE" ] ; then
|
||||
ok "token valido (utente $UTENTE)"
|
||||
# Si chiede a git la credenziale che userebbe davvero: un gestore qualsiasi
|
||||
# configurato non vuol dire che abbia quella giusta, e un token vecchio
|
||||
# rimasto li' fa funzionare l'API ma non git clone.
|
||||
GIT_PASSWORD="$(password_git_gitea)"
|
||||
if [ "$GIT_PASSWORD" = "$(token_gitea)" ] ; then
|
||||
ok "git entra su $GITEA_HOST con il tuo token"
|
||||
elif [ -n "$GIT_PASSWORD" ] ; then
|
||||
rosso "git usa un accesso a Gitea diverso dal tuo token (vecchio o di un altro): rilancia ./configura.sh, che lo sostituisce"
|
||||
else
|
||||
rosso "git non ha le credenziali di Gitea: rilancia ./configura.sh"
|
||||
fi
|
||||
unset GIT_PASSWORD
|
||||
elif [ "$ESITO_GITEA" = "2" ] ; then
|
||||
rosso "Gitea ($GITEA_URL) non risponde: controlla la connessione a internet e rilancia"
|
||||
else
|
||||
rosso "token Gitea mancante o non valido: rilancia ./configura.sh"
|
||||
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"
|
||||
# che tutto quello che fa su AWS risulta fatto da lui. Senza Gitea non si puo'
|
||||
# dire che la chiave sia sua, e quindi non e' verde.
|
||||
AWS_OPZ=(--cli-connect-timeout 10 --cli-read-timeout 15)
|
||||
CONFLITTI="$(aws_variabili_in_conflitto)"
|
||||
[ -n "$CONFLITTI" ] && attento "nel terminale sono impostate $CONFLITTI: la AWS CLI usa quelle, non la chiave di ~/.aws/credentials"
|
||||
if c_e aws && IDENTITA="$(AWS_MAX_ATTEMPTS=1 aws sts get-caller-identity "${AWS_OPZ[@]}" --query Arn --output text 2> /dev/null)" && [ -n "$IDENTITA" ] ; then
|
||||
if [ -z "$UTENTE" ] ; then
|
||||
rosso "c'e' una chiave AWS (${IDENTITA#arn:aws:iam::}), ma finche' Gitea non va non posso dire che sia tua"
|
||||
elif aws_e_di "$IDENTITA" "$UTENTE" ; then
|
||||
ok "accesso: $UTENTE"
|
||||
else
|
||||
ok "accesso: ${IDENTITA##*/}"
|
||||
rosso "la chiave AWS di questo PC e' di ${IDENTITA#arn:aws:iam::}, non tua ($UTENTE nell'account OTO $AWS_ACCOUNT): rilancia ./configura.sh, che la sostituisce"
|
||||
fi
|
||||
if aws ssm get-parameter --region "$AWS_REGIONE" --name "$SSM_PROVA" --query Parameter.Name --output text > /dev/null 2>&1 ; then
|
||||
if AWS_MAX_ATTEMPTS=1 aws ssm get-parameter "${AWS_OPZ[@]}" --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"
|
||||
@@ -43,20 +80,12 @@ 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
|
||||
# I nomi con cui la cercano i deploy dei progetti
|
||||
for ALTRA in $CHIAVI_SSH_PROGETTI ; do
|
||||
[ -e "$ALTRA" ] || rosso "manca $ALTRA, che usano i deploy dei progetti: rilancia ./configura.sh"
|
||||
done
|
||||
|
||||
titolo "VPN e server"
|
||||
# La VPN si riconosce da una cosa sola: staging, che sta su rete privata,
|
||||
@@ -85,11 +114,13 @@ entra () {
|
||||
return 2
|
||||
}
|
||||
if porta_aperta "$STAGING_HOST" 22 ; then
|
||||
ok "VPN attiva (staging raggiungibile)"
|
||||
ok "staging raggiungibile (la VPN e' accesa)"
|
||||
entra "$STAGING_NOME" ; ESITO=$?
|
||||
if [ "$ESITO" = "0" ] ; then ok "entri su staging ($STAGING_NOME)"
|
||||
elif [ "$ESITO" = "1" ] ; then rosso "staging non accetta la tua chiave: l'amministratore deve ancora aggiungerla"
|
||||
else rosso "staging ($STAGING_NOME): $MOTIVO" ; fi
|
||||
elif [ "$SENZA_VPN" = "1" ] ; then
|
||||
attento "staging non raggiungibile: senza VPN e' normale"
|
||||
else
|
||||
rosso "staging non raggiungibile: la VPN e' accesa?"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user