Un veilleur hors de Prometheus, pour que son silence cesse de ressembler au bon fonctionnement (#39)
Helm Charts / Detect changed charts (push) Successful in 10s
Helm Charts / Library charts tool (push) Skipped
Helm Charts / Application charts grafana (push) Skipped
Helm Charts / Application charts hashicorp-vault (push) Skipped
Helm Charts / Application charts minio (push) Skipped
Helm Charts / Application charts pgbouncer (push) Skipped
Helm Charts / Application charts pgcat (push) Skipped
Helm Charts / Application charts redis (push) Skipped
Helm Charts / Application charts chart (push) Skipped
Helm Charts / Application charts crowdsec (push) Skipped
Helm Charts / Application charts prometheus (push) Failing after 50s
Helm Charts / Detect changed charts (push) Successful in 10s
Helm Charts / Library charts tool (push) Skipped
Helm Charts / Application charts grafana (push) Skipped
Helm Charts / Application charts hashicorp-vault (push) Skipped
Helm Charts / Application charts minio (push) Skipped
Helm Charts / Application charts pgbouncer (push) Skipped
Helm Charts / Application charts pgcat (push) Skipped
Helm Charts / Application charts redis (push) Skipped
Helm Charts / Application charts chart (push) Skipped
Helm Charts / Application charts crowdsec (push) Skipped
Helm Charts / Application charts prometheus (push) Failing after 50s
Un CronJob toutes les 5 minutes interroge Prometheus depuis dehors et pousse lui-même sur Telegram. Il couvre les trois morts, dont celle qui est arrivée : répondre parfaitement en n'enregistrant rien. Éprouvé en vrai sur le cluster : 187 s entre la panne armée et le message accepté par Telegram, mesuré deux fois. Contre 4620 minutes de silence réel. Ferme #36. Co-Authored-By: Claude Opus 5 <[email protected]> Co-authored-by: Gabriel Radureau <[email protected]>
This commit was merged in pull request #39.
This commit is contained in:
@@ -35,6 +35,23 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
.helm_install_dependencies_sh: &helm_install_dependencies_sh |-
|
||||
# ⚠⚠ MESURÉ le 2026-09-07 (run 6728, étape « RELEVÉ ») : ce runner NE RÉSOUT
|
||||
# PAS `gitea.arcodange.lab` — `getent` code 2, `curl` code 6 — alors qu'il
|
||||
# résout parfaitement les registres publics. SEPT charts sur dix déclarent le
|
||||
# registre Helm interne en dépendance (crowdsec, grafana, hashicorp-vault,
|
||||
# pgbouncer, pgcat, prometheus, redis) : depuis que #32 a énuméré les charts,
|
||||
# leurs jobs mouraient TOUS ici, en 7 s, avant la moindre étape utile — et le
|
||||
# premier à en faire les frais est le premier à avoir été construit.
|
||||
#
|
||||
# Gitea donne au job sa PROPRE adresse joignable dans `GITHUB_SERVER_URL`
|
||||
# (mesuré : http://192.168.65.254:43000). On ne s'en sert qu'en REPLI, et
|
||||
# seulement après avoir constaté que le nom d'origine ne répond pas : rien ne
|
||||
# change sur un runner qui, lui, sait le résoudre. Lecture anonyme du registre
|
||||
# vérifiée (HTTP 200), donc aucun jeton n'entre ici.
|
||||
FORGE_INTERNE='https://gitea.arcodange.lab'
|
||||
|
||||
joignable() { curl -sf -o /dev/null -m 15 "$1"; }
|
||||
|
||||
helm_install_dependencies() {
|
||||
chart_file="$1/Chart.yaml"
|
||||
[[ ! -f "$chart_file" ]] && echo "Chart.yaml not found in $1" && return 1
|
||||
@@ -43,7 +60,27 @@ concurrency:
|
||||
name=$(jq -r '.name' <<< "$dep")
|
||||
version=$(jq -r '.version' <<< "$dep")
|
||||
repo=$(jq -r '.repository' <<< "$dep")
|
||||
|
||||
en_repli=non
|
||||
if ! joignable "${repo}/index.yaml"; then
|
||||
repli="${repo/$FORGE_INTERNE/${GITHUB_SERVER_URL:-$FORGE_INTERNE}}"
|
||||
if [[ "$repli" != "$repo" ]] && joignable "${repli}/index.yaml"; then
|
||||
echo " ⚠ ${repo} injoignable depuis ce runner — repli sur ${repli}"
|
||||
repo="$repli"
|
||||
en_repli=oui
|
||||
fi
|
||||
fi
|
||||
|
||||
url=$(curl -s "${repo}/index.yaml" | yq eval ".entries.${name}[] | select(.version == \"${version}\") | .urls[0]" -)
|
||||
# L'index du registre interne publie des URLs ABSOLUES vers le même nom
|
||||
# d'hôte : le repli doit les suivre, sinon on retombe dans le code 6.
|
||||
# ⚠ On ne réécrit QUE si l'on est effectivement en repli — sur un runner
|
||||
# sain, le chemin d'origine reste le chemin d'origine.
|
||||
# ⚠ Un `[[ … ]] && …` ici serait un piège : sous `set -e`, la liste rend
|
||||
# non nul quand la condition est fausse, et le script AVORTE.
|
||||
if [[ "$en_repli" = oui ]]; then
|
||||
url="${url/$FORGE_INTERNE/$GITHUB_SERVER_URL}"
|
||||
fi
|
||||
|
||||
echo "Dependency: $name, Version: $version, URL: $url"
|
||||
mkdir -p "$1/charts" && curl -sL "$url" -o "$1/charts/${name}-${version}.tgz"
|
||||
@@ -170,6 +207,52 @@ jobs:
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
# ⚠⚠ UNE GATE QUI N'EST CÂBLÉE NULLE PART N'EXISTE PAS (tools#36) — et une
|
||||
# gate placée APRÈS une étape qui échoue toujours n'existe pas non plus :
|
||||
# elle sort `Skipped`, ni rouge ni absente, rien ne dépasse. Le banc du
|
||||
# veilleur passe donc AVANT le téléchargement des dépendances, qui a besoin
|
||||
# du réseau et du registre Helm interne. Il n'a besoin d'aucun des deux :
|
||||
# stdlib Python seule, plus `yq`/`jq` déjà présents.
|
||||
- name: Banc du veilleur (chart prometheus)
|
||||
if: >-
|
||||
${{
|
||||
matrix.chart == 'prometheus'
|
||||
&& (
|
||||
contains(fromJSON('["","pull_request"]'), github.event_name)
|
||||
|| github.ref != 'refs/heads/main'
|
||||
)
|
||||
}}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
python3 -m unittest discover -s prometheus/veilleur -v
|
||||
|
||||
# Le témoin toujours allumé ne doit JAMAIS partir sur Telegram : sans
|
||||
# sa route vers le récepteur vide il sonnerait toutes les 3 h, et un
|
||||
# témoin qui sonne est un témoin qu'on coupe.
|
||||
yq -o=json eval '.prometheus.alertmanager.config' prometheus/values.yaml > /tmp/am.json
|
||||
jq -e '[.route.routes[] | select(.matchers[0] == "alertname=\"Veilleur\"") | .receiver] == ["neant"]' /tmp/am.json
|
||||
jq -e '[.receivers[] | select(.name == "neant") | keys] == [["name"]]' /tmp/am.json
|
||||
|
||||
# ⚠ RELEVÉ, PAS UNE GATE — il ne peut pas faire échouer le job. Le premier
|
||||
# run du job `Application charts prometheus` (le tout premier depuis que
|
||||
# #32 a énuméré les charts) est mort ICI, `curl` code 6 : le runner ne
|
||||
# RÉSOUT PAS l'hôte de la dépendance. Sept charts sur dix dépendent du
|
||||
# registre Helm interne `gitea.arcodange.lab` — donc sept jobs sur dix ne
|
||||
# peuvent pas passer, quel que soit leur contenu. Ce relevé nomme lequel
|
||||
# des deux hôtes tombe, pour que la prochaine session n'ait pas à le
|
||||
# deviner. À retirer quand le trou est bouché.
|
||||
- name: RELEVÉ — ce que le runner sait résoudre
|
||||
run: |
|
||||
set +e
|
||||
echo "GITHUB_SERVER_URL=${GITHUB_SERVER_URL:-<vide>}"
|
||||
for hote in gitea.arcodange.lab prometheus-community.github.io; do
|
||||
echo "--- $hote ---"
|
||||
getent hosts "$hote" || echo " PAS DE RÉSOLUTION (getent code $?)"
|
||||
curl -sS -o /dev/null -m 10 -w " http=%{http_code}\n" "https://$hote/" \
|
||||
|| echo " curl code $?"
|
||||
done
|
||||
exit 0
|
||||
|
||||
- run: *helm_install_dependencies_sh
|
||||
|
||||
- name: Install Helm for test
|
||||
|
||||
Reference in New Issue
Block a user