feat(doctor): contrôler le pool de stockage Incus (0.1.84) - #193
Merged
Conversation
Un utilisateur a signalé, sur linux-dsoxlab-training#54, que sur un provisionnement Incus raté faute d'avoir joué « incus admin init --auto », seules les résolutions liées à KVM lui étaient proposées. Le symptôme avait raison, et l'hypothèse la plus évidente avait tort. _check_incus PROPOSE bien « incus admin init » — je l'avais écrit ailleurs, à tort, avant de lire le code. Il ne le propose que lorsque « incus list » échoue en le disant. Or « incus list » RÉUSSIT sur une installation jamais initialisée : elle rend simplement une liste vide. Le contrôle passait donc au vert, et la branche Incus de collect_checks n'ajoutait que l'outil ISO, là où la branche KVM contrôle son pool de stockage depuis longtemps. C'est cette asymétrie qui produisait la phrase de l'utilisateur. Le template incus crée le réseau mais suppose le pool : il écrit « pool = "default" » en dur dans chaque volume, sans jamais le créer. Sans « incus admin init », provision échoue donc, et rien ne l'annonçait. Le contrôle ajouté est le pendant exact de _check_libvirt_pool, avec ses trois états : pool présent, pool absent avec la remédiation, et sonde muette qui ne tranche pas — proposer une initialisation sur une machine dont on ignore l'état réinitialiserait peut-être une installation qui fonctionne. Un test vérifie que le template continue de supposer le pool sans le créer : le jour où Terraform le créera, ce test échouera et personne n'aura à se souvenir que ce diagnostic existait pour cette raison. Cette version rassemble les neuf changements 0.1.75 → 0.1.83 et clôt l'audit des angles morts : onze issues dont le fil commun était un seul défaut, un contrôle qui concluait au vert faute de pouvoir mesurer. Deux comportements sont délibérément renversés — une fixture qui manque fait désormais échouer run, un lab dont le moteur est injoignable n'est plus dit prêt — ce qui fait de cette version une mineure plutôt qu'un dixième correctif. Vérifié : 861 tests dont 7 neufs, éprouvés par deux mutations, 18 e2e, ruff, mypy strict, et le contrôle joué sur linux-dsoxlab-training avec le provider incus, où il apparaît à côté de incus et iso_tool. Closes stephrobert/linux-dsoxlab-training#54 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Le numéro mineur était une proposition de ma part, pas une décision de l'auteur. Le contrôle du pool Incus est un ajout de diagnostic : il ne change aucun contrat, aucune commande et aucune sortie existante. Un correctif suffit. Les entrées 0.1.75 à 0.1.83 restent où elles sont, chacune sous son propre numéro : les rassembler sous une version qui n'existe pas aurait rendu le CHANGELOG faux vis-à-vis des tags déjà publiés. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Un utilisateur a signalé sur
linux-dsoxlab-training#54
que sur un provisionnement Incus raté faute d'avoir joué
incus admin init --auto, seules les résolutions liées à KVM lui étaientproposées.
Le symptôme avait raison, l'hypothèse évidente avait tort
_check_incuspropose bienincus admin init— je l'avais écrit ailleurs àtort, avant de lire le code. Mais il ne le propose que lorsque
incus listéchoue en le disant.
Or
incus listréussit sur une installation jamais initialisée : elle rendsimplement une liste vide. Le contrôle passait donc au vert, et la branche Incus
de
collect_checksn'ajoutait que l'outil ISO — là où la branche KVM contrôleson pool de stockage depuis longtemps. C'est cette asymétrie qui produisait la
phrase de l'utilisateur.
Le template le confirme : il crée le réseau
(
resource "incus_network" "lab") mais écritpool = "default"en dur danschaque volume, sans jamais le créer.
Le contrôle ajouté
Pendant exact de
_check_libvirt_pool, avec ses trois états :defaultprésentokfailed, remédiationsudo incus admin init --autoincus storage listmuetunknown, aucune remédiationLe troisième compte : proposer une initialisation sur une machine dont on ignore
l'état réinitialiserait peut-être une installation qui fonctionne.
Un test vérifie que le template continue de supposer le pool sans le créer.
Le jour où Terraform le créera, ce test échouera — et personne n'aura à se
souvenir que ce diagnostic existait pour cette raison.
Sur le numéro de version
J'avais proposé 0.2.0 ; l'auteur a tranché pour 0.1.84, et c'est le bon
choix : ce contrôle est un ajout de diagnostic qui ne change ni contrat, ni
commande, ni sortie existante. Les entrées 0.1.75 à 0.1.83 restent chacune sous
son propre numéro, en accord avec les tags déjà publiés.
Type of change
Checklist
Always
uv run ruff check src/dsoxlab tests tests_e2e fuzz scriptspassesuv run mypy src/dsoxlabpasses (strict)uv run pytestpasses — 861 passed, dont 7 neufs, éprouvés par deux mutations (contrôle décâblé → 1 rouge ; pool absent redevenu vert → 2 rouges)uv run pytest tests_e2epasses — 18 passedpathlib.Paththroughoutlinux-dsoxlab-trainingavecDSOXLAB_PROVIDER=incus:incus_poolapparaît à côté deincusetiso_tool, et un dépôt KVM ne le voit pasWhen behavior changes
CHANGELOG.mdandCHANGELOG.fr.mdupdateduv.lockrefreshedWhen a command or option is added, removed or changed
i18n/strings/en.pyandi18n/strings/fr.py(3 clés), garde-fou i18n vertdoctorgagne un contrôle :fullhelpreste exactDSOXLAB_LANG=enandDSOXLAB_LANG=frWhen
.github/workflows/is touchedN/A — aucun fichier de
.github/workflows/n'est touché.When the declarative contract (
meta.yml/lab.yaml) changesN/A — le contrat est inchangé.
Related issues
Closes stephrobert/linux-dsoxlab-training#54
🤖 Generated with Claude Code