Set-OPS-Public/roles/serveur_ops/templates/sonde-console-ops.sh.j2

61 lines
2.6 KiB
Text
Raw Normal View History

#!/bin/bash
# GENERE par Set-OPS (role serveur_ops). Ne pas editer a la main.
#
# SONDE « console-ops » — la console repond-elle, et son vestibule tient-il ?
#
# PAS UNE ENVELOPPE DE GREFFON, ET C'EST ASSUME. `check_http` sait dire « ce service
# repond ». La verite d'ici est l'inverse : « ce service REFUSE-t-il encore ceux qui
# n'ont pas de quoi entrer ». Aucun greffon standard ne pense a mesurer une serrure.
set -uo pipefail
GUI={{ serveur_ops_gui_ecoute }}:{{ serveur_ops_gui_port }}
VESTIBULE=127.0.0.1:{{ serveur_ops_gui_port_public }}
NOM='{{ serveur_ops_hostname }}'
MODE='{{ serveur_ops_gui_auth }}'
# 1. LE GUI VIT-IL ? On frappe la boucle locale, la ou il est le seul a pouvoir repondre.
code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 10 "http://${GUI}/" 2>/dev/null)
if [[ "${code}" != "200" ]]; then
echo "La console ne repond pas sur ${GUI} (HTTP ${code:-aucune reponse}) — plus personne ne pilote cet ecosysteme depuis le navigateur."
exit 2
fi
# 2. LE VESTIBULE REFUSE-T-IL ? On frappe SANS justificatif, avec le bon `Host` : c'est
# ainsi que nginx choisit son vhost, et sans cet en-tete on mesurerait le serveur par
# defaut — c'est-a-dire autre chose.
#
# UN 200 ICI EST LA PIRE DES REPONSES. Il veut dire que le vestibule laisse entrer : la
# console est alors ouverte a quiconque atteint l'adresse, avec `deployer`, `creer` et
# l'edition du plan. On le traite comme une panne, parce que c'en est une.
vu=$(curl -s -o /dev/null -w '%{http_code}' --max-time 10 \
-H "Host: ${NOM}" "http://${VESTIBULE}/" 2>/dev/null)
case "${vu}" in
401|403)
echo "Console vivante, vestibule (${MODE}) en place : une requete anonyme rend HTTP ${vu}."
exit 0
;;
30[12478])
# Une passerelle SSO renvoie vers son fournisseur d'identite : c'est un refus, dit
# autrement. On l'accepte seulement quand c'est le mode declare — en `locale`, une
# redirection signifierait que le `auth_basic` n'est plus applique.
if [[ "${MODE}" != "locale" ]]; then
echo "Console vivante, vestibule (${MODE}) en place : une requete anonyme est renvoyee (HTTP ${vu})."
exit 0
fi
echo "LE VESTIBULE NE DEMANDE PLUS RIEN : en mode locale, une requete anonyme devrait rendre 401, elle rend ${vu}."
exit 2
;;
200)
echo "LE VESTIBULE EST OUVERT : une requete anonyme obtient la console (HTTP 200). Deployer, creer et raser sont a la portee de qui trouve l'adresse."
exit 2
;;
"" | 000)
echo "Le vestibule ne repond pas sur ${VESTIBULE} — la console vit, mais l'edge ne peut plus l'atteindre."
exit 2
;;
*)
echo "Reponse inattendue du vestibule : HTTP ${vu}."
exit 1
;;
esac