PatchCenter - Application web de gestion du patching
Probleme: vrexpbtex1 est sur .sanef.groupe (exception a la convention vr*=.sanef-rec.fr). Le code tentait UN seul target via _resolve (TCP port 22 only) et echouait sans fallback SSH. Logique de resolution revisee: 1. Convention en 1er: suffixe le plus probable selon prefixe (vr/lr/sr=>.sanef-rec.fr, vp/lp/sp=>.sanef.groupe, etc.) 2. servers.fqdn (BDD) en 2e position si renseigne et plausible (commence par hostname.) 3. Autres suffixes du referentiel ensuite Implementation: - _candidate_targets(hostname) : nouvelle fonction qui retourne la liste ordonnee des FQDN candidats a essayer SSH - _connect(target, hostname, errors=...) : accepte une list errors optionnelle ou les exceptions de chaque tentative (PSMP/cle/password) sont append en clair pour diagnostic. Retro-compatible (errors=None par defaut) - _connect_via_psmp(target, errors=...) : meme pattern - _fqdn_is_consistent : assoupli, ne verifie plus la convention SANEF (qui rejetait les exceptions legitimes), juste que le FQDN commence par hostname. - run_all_checks: itere _candidate_targets et essaie _connect sur chaque, accumule les erreurs de tous les candidats, retourne le 1er qui aboutit UI: - check_dns: si target trouve mais client KO, status=warn et liste des candidats tentes - check_ssh: classification erreur (no route/timeout/refused/permission denied/etc.) + liste des candidats tentes + suggestion pour FQDN exception |
||
|---|---|---|
| agents | ||
| app | ||
| deploy | ||
| docs | ||
| scripts | ||
| tools | ||
| .gitignore | ||
| cleanup_fqdn_incoherents.sql | ||
| fill_fqdn_from_domain_ltd.sql | ||
| migrate_applications.sql | ||
| migrate_correspondance.sql | ||
| migrate_drop_legacy_servers.sql | ||
| migrate_etat.sql | ||
| migrate_missing_tables_20260427.sql | ||
| migrate_patch_excludes_v2_20260507.sql | ||
| migrate_patch_excludes_v2_fix_20260507.sql | ||
| migrate_patch_excludes_wiki.sql | ||
| migrate_patching_notes_20260507.sql | ||
| migrate_patching_notes_fix_20260507.sql | ||
| migrate_pct_workflow_20260507.sql | ||
| migrate_planning_imports_v2.sql | ||
| migrate_planning_imports_v3.sql | ||
| migrate_planning_imports_v4.sql | ||
| migrate_planning_imports.sql | ||
| migrate_qualys_vuln_dashboard.sql | ||
| migrate_servers_satellite.sql | ||
| migrate_teams_pct_workflow.sql | ||
| migrate_teams_rules_20260506.sql | ||
| migrate_teams_rules_v2_20260506.sql | ||
| migrate_users.sql | ||
| populate_zones.sql | ||
| README.md | ||
| replace_etat.py | ||
| requirements.txt | ||
| resync_servers_text_fields.sql | ||
| run.sh | ||
| schema.sql | ||
| tailwind.config.js | ||
| update_zone_dmz.sql | ||
PatchCenter — SLPM (SANEF Linux Patch Manager)
App web FastAPI/PostgreSQL pour piloter le patching Linux SANEF : plan de patching, historique, users AD/LDAP, intégration iTop, API Qualys.
Source de vérité : VM CT 116 (pc.mpcz.fr, 172.28.199.185 + pct exec 116 -- ...) + repo Gitea adminmpmcz/patchcenter.
Workflow de dev (validé 2026-04-17)
- Claude modifie direct sur CT 116 via SSH →
git pushGitea - Khalid sur poste SANEF (
C:\patchcenter) →git pull→ test sur127.0.0.1:8080 - Si OK : Khalid ajoute ses modifs +
git pushGitea - Claude sur CT 116 →
git pull+systemctl restart patchcenter
Stack
- Python 3.11+ / FastAPI / Uvicorn
- PostgreSQL (patchcenter)
- Jinja2 + Tailwind (templates)
- LDAP (AD SANEF) pour auth
Structure
app/— code FastAPI (auth, models, routers, services)deploy/— scripts déploiement + migrations SQLtools/— scripts d'import/enrichissement (Qualys, iTop, Ayoub, etc.)docs/— DEPLOY.md, SANEF_PATCHING_PROCESS.mdmigrate_*.sql— migrations DB manuelles
Lancer en local (poste SANEF, pas la copie locale Claude)
python -m uvicorn app.main:app --host 0.0.0.0 --port 8080
Gitea
- Repo :
http://172.28.199.202:3000/adminmpmcz/patchcenter - Creds HTTPS :
adminmpmcz/Admin@2025
Notes
SECRET_KEYcôté VM :sanef-patchcenter-demo-key-change-me(drop-in systemd)- DB échangée via Gitea Releases (attachment
.sql), jamais dans le git tree - Après restore DB :
ALTER TABLE ... OWNER TO patchcenterpour toutes les tables+sequences