Aller au contenu

Boîte à outils — quels scripts lancer, et pour quoi

Catalogue des scripts opérables du dépôt (hors playbooks Ansible, qui sont joués par l’orchestrateur de banc ou décrits dans les RUNBOOK). Doctrine du choix d’outil : ADR 0049 — Ansible converge l’état durable ; le shell/Python porte l’orchestration, le diagnostic en lecture seule, l’accès, les tests et les actes que Ansible ne peut pas faire (poule/œuf, sans dépôt, destructif conscient).

Les chemins sont relatifs à la racine du dépôt. Chaque script documente son usage précis dans son en-tête (head -20 <script>). Les valeurs montrées ici sont génériques (ADR 0023) — surcharger avec les vraies valeurs de votre déploiement (config locale).

nestor (l’outil déclaratif : nestor up/preview/stack select…) est une fonction shell à sourcer, pas un exécutable. Pourquoi ? Pour que nestor stack select puisse poser KUBECONFIG dans ton shell — ce qu’un programme lancé ne peut pas faire (un enfant ne modifie pas l’environnement de son parent ; patron nvm/pyenv/direnv). La fonction délègue à l’implémentation scripts/nestor-exec et applique le export KUBECONFIG=… que stack select imprime.

nestor env a été supprimée (ADR 0097 §3) — elle incarnait le paramétrage-par-variable-d’environnement aboli. À la place, deux mécanismes :

  • nestor kubectl <args…> — lance kubectl sur la cible de la stack active, kubeconfig résolu automatiquement (banc Lima ou kubeconfig: de la topo prod, jamais ~/.kube/config par accident). C’est le remplaçant direct : nestor kubectl get pods -A au lieu de eval "$(nestor env)" ; kubectl …. Si la stack prod est active, il vise la prod ; si c’est le banc, il vise le banc — sans manipuler l’environnement du shell.
  • nestor stack select <topo> pose aussi un contexte kubectl nommé dans le kubeconfig de la cible (mécanisme standard kubectl --context <topo> …).

Installation — sourcer le fichier nestor.sh (racine du dépôt) dans ton profil :

Fenêtre de terminal
echo 'source <racine-du-dépôt>/nestor.sh' >> ~/.zshrc # ou ~/.bashrc
source ~/.zshrc # (ou ouvrir un nouveau shell)

Ensuite, depuis n’importe quel dossier :

Fenêtre de terminal
nestor up # monter le banc
nestor preview # voir l'état (VOULU/RÉEL/PLAN)
nestor stack select banc # activer une stack ET pointer KUBECONFIG (banc, ou
# /dev/null si pas de banc — jamais la prod, ADR 0053)

Sans sourcer (usage ponctuel, sans la pose auto de KUBECONFIG) : appeler l’implémentation directement — scripts/nestor-exec preview. La garde d’isolation (ADR 0053) protège la prod dans les deux cas.

Prérequis & contexte — « quels sont MES hôtes ? »

Section intitulée « Prérequis & contexte — « quels sont MES hôtes ? » »

Plusieurs scripts (bootstrap/state.sh, bootstrap/security/report.sh…) attendent une liste d’hôtes ou un kubeconfig. Or, par conception (ADR 0023), le dépôt ne contient pas tes vrais hôtes : ils vivent en config locale gitignorée.

Tu cherches…Où ça vit
Hôtes prodla topology.yaml active (nœuds + rôles) — l’inventaire en est DÉRIVÉ (ADR 0098)
Hôtes banc Limales VMs réelles — limactl list (noms cp1, node1…)
kubeconfig du bancbench/lima/.work/kubeconfig (généré par run-phases.sh)

Le plus simple — nestor dérive ton contexte de la stack active. Plus besoin d’un helper qui devine la cible : la stack sélectionnée (nestor stack select <topo>) porte la topologie, et les commandes la visent directement.

Pour piloter kubectl : nestor kubectl <args…> lance kubectl sur la cible SÛRE de la stack active (banc ou prod, jamais ~/.kube/config par accident — ADR 0053/0090). Plus de eval "$(… export)" ni de variable d’env à manipuler. Pour voir le contexte (VOULU + RÉEL + PLAN) : nestor preview.

Pour le diagnostic node-side, bootstrap/state.sh <nœuds> reste l’outil (drift par couche). Les nœuds se lisent de la topologie active (au banc : les VMs Lima ; en prod : les nœuds déclarés dans la topology.yaml).

Le banc Lima est l’environnement de validation e2e (ADR 0034). Tout passe par un orchestrateur unique :

Pour…CommandeDétails
Monter le banc par étapes (gate par phase)bench/lima/run-phases.sh <phase>bench/lima/README.md
Monter un chemin nommé completbench/lima/run-phases.sh socle|atlas|atlas-ceph|storage-realADR 0045
Voir l’état du banc (VMs, nœuds, phases, UIs)bench/lima/run-phases.sh statuslecture seule
(Ré)exporter le kubeconfig du bancbench/lima/run-phases.sh kubeconfig
Détruire le banc (VMs + disques)bench/lima/run-phases.sh downdestructif
Prouver une reprise après faute (arrêt injecté)BANC_JETABLE=1 bench/lima/run-phases.sh bootstrap-faultADR 0050destructif, banc jetable
Pour…CommandeDétails
Rendre le banc consommable depuis l’hôte (URLs NodePort cliquables + secrets + .env)nestor access (--stop pour fermer)ADR 0048/0101
Premier accès SSH à des nœuds Debian fraîchement installés (poule/œuf avant Ansible)bootstrap/first-access.shprérequis d’Ansible
Identifiants / gestion du dashboard Kubernetesplatform/k8s-dashboard/manage.sh, platform/k8s-dashboard/credentials.sh

Ansible converge l’état ; il ne reporte pas. Le diagnostic vit donc en shell (ADR 0049).

Pour…CommandeDétails
Piloter kubectl sur la cible sûre de la stack activenestor kubectl <args…>banc ou prod, jamais ~/.kube/config par accident (ADR 0053/0090)
État des nœuds + composantes cluster (drift + prochaine étape)bootstrap/state.sh <hôte…>SSH + kubectl ; hôtes pris en args ; verdicts purs testés (state-classify.sh + health-classify.sh)
Tableau de bord du durcissement (preuves observables par hôte)bootstrap/security/report.shbootstrap/security/
Vérifier l’épinglage des images par digest d’index multi-archscripts/audit-image-digests.shinvariant ADR 0006
Vérifier la fraîcheur des preuves de banc (par chemin)bench/lima/check-freshness.shADR 0042
Détecter les pages Markdown orphelinespython3 scripts/check_md_orphans.pyADR 0029

Garde-fou de cible (EXPECT_CLUSTER) — les couches cluster de state.sh (Cilium, Rook-Ceph, StorageClasses, plateforme) auditent le KUBECONFIG ambiant. Pour qu’elles ne vérifient pas le banc en croyant viser la prod (ADR 0053), elles refusent tout verdict (skip « cible non confirmée ») tant que EXPECT_CLUSTER n’est pas posée — l’empreinte du cluster visé (affichée par la 1ʳᵉ couche kubectl) ou une étiquette libre (prod/lima). Les couches nœuds (SSH) ne sont pas concernées.

Pour…CommandeDétails
Lancer tous les scénarios e2e (PASS/FAIL récapitulé)bench/scenarios/run-all.shbench/scenarios/README.md
Lancer un scénario (résilience, sécurité active, DataOps, GitOps, UI)bench/scenarios/NN-*.shscénarios 01→29
Smoke S3 réel (PUT/GET/DELETE) sur le RGW Cephstorage/ceph/storageClass/datalake/smoke-test.sh
Tests des fonctions pures (bash)pnpm test:shell (bats)bench/unit/
Spike de latence Cluster Mesh (jetable)bench/spikes/clustermesh-latency/{up,probe,down}.sh

Convergence hors Ansible (cas particuliers assumés)

Section intitulée « Convergence hors Ansible (cas particuliers assumés) »

Ces actes ne passent pas par Ansible, par nécessité (ADR 0049) :

Pour…CommandePourquoi pas Ansible
Poser Cilium (CNI) dans la VMbootstrap/cni.sh (joué par l’orchestrateur)tourne dans la VM, sans le dépôt
Wipe destructif des disques avant rebuild Cephstorage/ceph/cleanup.shdestructif, lancé consciemment
Seed du dépôt Gitea (org/repo/workflow)bench/lima/gitea-init.shdonnées, pas convergence (ADR 0044)
Anonymiser un .env en .env-examplepython3 bootstrap/security/blur_env.pytexte/regex pur → Python
Pour…Commande
Lint complet (format, yamllint, shellcheck, kubeconform, ansible-lint, jscpd, bats)pnpm lint
Construire la doc (échoue sur lien mort)pnpm docs:build

markdownlint et trivy sont des jobs CI séparés non couverts par pnpm lint — les reproduire localement avant de pousser (CONTRIBUTING.md).