feat(snapshot): branche prod/hprod via prefixe hostname (vp/sp/lp = prod/metier ; reste = hprod/gestion) + fix matching DR vpsiaavcs1 (etait vpsicavcs1) + tolerance par name

This commit is contained in:
Pierre & Lumière 2026-05-04 16:15:46 +02:00
parent a68d9494f1
commit 9996757e4b
2 changed files with 24 additions and 13 deletions

View File

@ -692,9 +692,13 @@ async def iexec_snapshot(request: Request, row_id: int, db=Depends(get_db)):
if not hostname: if not hostname:
return JSONResponse({"ok": False, "detail": "Pas de hostname"}, status_code=400) return JSONResponse({"ok": False, "detail": "Pas de hostname"}, status_code=400)
# Branche prod / hprod selon l'environnement Excel # Branche prod / hprod basée sur le préfixe hostname (convention SANEF) :
env = str(row.environnement or "").lower() # vp/sp/lp → prod → vCenter "metier" (Nanterre, vpmetavcs1)
branch = "prod" if env.startswith("prod") else "hprod" # le reste → hprod → vCenter "gestion" (Senlis, vpgesavcs1)
# Plus fiable que la colonne environnement Excel (peut être bug-prone).
prefix = (hostname.split(".")[0] or "").lower()[:2]
PROD_PREFIXES = ("vp", "sp", "lp")
branch = "prod" if prefix in PROD_PREFIXES else "hprod"
# Nom snapshot : <intervenant>_<YYYY-MM-DD>_avant_patch # Nom snapshot : <intervenant>_<YYYY-MM-DD>_avant_patch
intervenant = (row.intervenant or "patcheur").strip().replace(" ", "_") intervenant = (row.intervenant or "patcheur").strip().replace(" ", "_")

View File

@ -77,8 +77,14 @@ def _take_snapshot(vm, snap_name, description=""):
def get_vcenter_order(db, branch): def get_vcenter_order(db, branch):
"""Retourne la liste ordonnee des vCenters selon la branche. """Retourne la liste ordonnee des vCenters selon la branche.
hprod: Senlis Nanterre DR Endpoints reconnus :
prod: Nanterre Senlis DR""" - gestion : vpgesavcs1(.sanef.groupe) (= Senlis)
- metier : vpmetavcs1(.sanef.groupe) (= Nanterre)
- DR/SIA : vpsiaavcs1(.sanef.groupe) (fallback ultime)
Matching tolérant par endpoint OU par name de la table vcenters.
Ordre :
prod : metier gestion dr
hprod : gestion metier dr"""
from sqlalchemy import text from sqlalchemy import text
vcenters = db.execute(text( vcenters = db.execute(text(
"SELECT id, name, endpoint FROM vcenters WHERE is_active = true ORDER BY id" "SELECT id, name, endpoint FROM vcenters WHERE is_active = true ORDER BY id"
@ -86,20 +92,21 @@ def get_vcenter_order(db, branch):
vc_map = {} vc_map = {}
for vc in vcenters: for vc in vcenters:
ep = vc.endpoint.lower() ep = (vc.endpoint or "").lower()
if "vpgesavcs1" in ep: nm = (vc.name or "").lower()
vc_map["senlis"] = vc if "vpgesavcs1" in ep or "gestion" in nm:
elif "vpmetavcs1" in ep: vc_map["gestion"] = vc
vc_map["nanterre"] = vc elif "vpmetavcs1" in ep or "metier" in nm:
elif "vpsicavcs1" in ep: vc_map["metier"] = vc
elif "vpsiaavcs1" in ep or "vpsicavcs1" in ep or "sia" in nm or nm == "dr":
vc_map["dr"] = vc vc_map["dr"] = vc
else: else:
vc_map.setdefault("other", []).append(vc) vc_map.setdefault("other", []).append(vc)
if branch == "prod": if branch == "prod":
order = [vc_map.get("nanterre"), vc_map.get("senlis"), vc_map.get("dr")] order = [vc_map.get("metier"), vc_map.get("gestion"), vc_map.get("dr")]
else: else:
order = [vc_map.get("senlis"), vc_map.get("nanterre"), vc_map.get("dr")] order = [vc_map.get("gestion"), vc_map.get("metier"), vc_map.get("dr")]
return [v for v in order if v is not None] return [v for v in order if v is not None]