feat(os): profils Proxmox/RPi + machine_probe + proxy persistent (tâche 2 SJ-7)

- templates proxmox/ (update-analyze: dépôts PVE ; full-upgrade) et raspbian/
  (update-analyze: espace disque ; full-upgrade)
- execute résout les actions APT par profil OS (resolveTemplate) → proxmox/
  raspbian si dispo, sinon fallback apt/ (non-régression debian/ubuntu vérifiée)
- machine_probe (lecture seule) : template + parseProbe/proposeCorrections (TDD)
  → propose os_family/machine_kind/virtualization, persiste machine_hardware,
  n'applique jamais auto ; branche execute + allowlist route
- apt_proxy_persistent : ActionType + template idempotent (/etc/apt/apt.conf.d/
  01proxy, backup) + TemplateVars.aptProxyUrl + allowlist route

tsc 0 · 95 tests · build OK · résolution OS vérifiée.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-06 07:14:43 +02:00
parent b5ec14dcd8
commit bafb085995
13 changed files with 490 additions and 15 deletions
@@ -0,0 +1,39 @@
# Tâche 2 — SJ-7 : Profils OS Proxmox/RPi + machine_probe + proxy persistent
> Statut : **implémenté** (2026-06-06). tsc 0 · 95 tests · build OK. Résolution OS vérifiée.
> Réf. design : `docs/design/tache2/60-profils-os-machine.md`, `80-sous-jalons.md` SJ-7.
## Périmètre livré (additif, fallback base préservé)
- **Templates OS-spécifiques** :
- `templates/proxmox/update-analyze.sh.tpl` (détection dépôts PVE enterprise/no-subscription)
+ `full-upgrade.sh.tpl` (dist-upgrade kernel/proxmox-ve/Ceph).
- `templates/raspbian/update-analyze.sh.tpl` (contrôle espace disque carte SD)
+ `full-upgrade.sh.tpl` (`apt full-upgrade`). `rpi-update` volontairement non utilisé.
- **Résolution par profil OS dans `execute.ts`** : les actions APT passent par
`resolveTemplate(file, osFamily)``proxmox/`/`raspbian/` si dispo, sinon `apt/`.
Vérifié : proxmox/raspbian pris ; debian/ubuntu → fallback `apt/` (non-régression jalon 1).
`refresh.ts` résolvait déjà `update-analyze`.
- **`machine_probe`** (action lecture seule) :
- `templates/apt/machine-probe.sh.tpl` (os-release, arch, systemd-detect-virt, /etc/pve,
/proc/cpuinfo RPi, lspci GPU, ip addr).
- `machineProbe.ts` : `parseProbe` + `proposeCorrections` (TDD, 4 cas : Proxmox/RPi/VM KVM)
→ propose `os_family`/`machine_kind`/`virtualization`. `runProbe` persiste les faits
matériels (`machine_hardware` gpus/network) et renvoie un diff **jamais appliqué auto**.
- Branche `execute` (archiveExecution) + allowlist route.
- **Proxy APT persistant** (`apt_proxy_persistent`) :
- ActionType ajouté ; `templates/apt/apt-proxy-persistent.sh.tpl` écrit
`/etc/apt/apt.conf.d/01proxy` (idempotent, sauvegarde horodatée de l'existant).
- `TemplateVars.aptProxyUrl` ; rendu avec `m.aptProxyUrl` ; allowlist route.
## Sécurité / invariants
- `machine_probe` ne modifie rien ; les corrections OS/kind sont **proposées**, l'opérateur
garde le dernier mot (pas d'application auto).
- Proxy persistant = action explicite idempotente avec backup ; l'URL n'est pas un secret.
- Aucun secret dans les templates ; fallback `base` garantit la non-régression Debian/Ubuntu.
## Reste tâche 2
SJ-8 / SJ-9 (post-install : bootstrap/identité, paquets de base/Docker officiel/partages/VM tools).
UI : bouton « Sonder » + affichage des propositions, sélecteur de proxy persistant = tâche 3.