PatchCenter - Application web de gestion du patching
- Migration migrate_pct_workflow_20260507.sql: ajoute patch_planning_import_rows
pct_required (boolean default false), pct_confirmed_at (timestamptz),
pct_confirmed_by_user_id (FK users). Backfill depuis servers.pct_required.
- Auto-detection a l'import (planning_import.py): scan referent_technique +
mode_operatoire + impacts + commentaire pour pattern \bPCT\b mot entier
(insensible casse) -> pct_required=true sur la row. Propage egalement vers
servers.pct_required si pas deja true.
- UI iexec: badge orange '⚠ Prév PCT à faire' sur la cellule asset_name si
pct_required=true et pas confirme, badge vert '✅ PCT ok' une fois confirme.
- Gate avant Step 3 (PATCH REEL): scan des serveurs cibles, si certains ont
pct_required && !pct_confirmed -> 2 confirmations successives + appel
POST /patching/iexec/confirm-pct qui marque pct_confirmed_at + user_id.
Ne lance pas le patch si l'operateur annule.
- Endpoint POST /patching/iexec/confirm-pct: marque les rows comme PCT confirmes
(pct_confirmed_at = now(), pct_confirmed_by_user_id = current user).
- Notif Teams: send_notification accepte planning_row_id optionnel ; si la row
a pct_required && pct_confirmed, le message debut/fin est suffixe par
' (Prévenance PCT ok)' pour informer le responsable que l'amont a ete gere.
|
||
|---|---|---|
| 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_wiki.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