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:
parent
a68d9494f1
commit
9996757e4b
@ -692,9 +692,13 @@ async def iexec_snapshot(request: Request, row_id: int, db=Depends(get_db)):
|
||||
if not hostname:
|
||||
return JSONResponse({"ok": False, "detail": "Pas de hostname"}, status_code=400)
|
||||
|
||||
# Branche prod / hprod selon l'environnement Excel
|
||||
env = str(row.environnement or "").lower()
|
||||
branch = "prod" if env.startswith("prod") else "hprod"
|
||||
# Branche prod / hprod basée sur le préfixe hostname (convention SANEF) :
|
||||
# vp/sp/lp → prod → vCenter "metier" (Nanterre, vpmetavcs1)
|
||||
# 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
|
||||
intervenant = (row.intervenant or "patcheur").strip().replace(" ", "_")
|
||||
|
||||
@ -77,8 +77,14 @@ def _take_snapshot(vm, snap_name, description=""):
|
||||
|
||||
def get_vcenter_order(db, branch):
|
||||
"""Retourne la liste ordonnee des vCenters selon la branche.
|
||||
hprod: Senlis → Nanterre → DR
|
||||
prod: Nanterre → Senlis → DR"""
|
||||
Endpoints reconnus :
|
||||
- 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
|
||||
vcenters = db.execute(text(
|
||||
"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 = {}
|
||||
for vc in vcenters:
|
||||
ep = vc.endpoint.lower()
|
||||
if "vpgesavcs1" in ep:
|
||||
vc_map["senlis"] = vc
|
||||
elif "vpmetavcs1" in ep:
|
||||
vc_map["nanterre"] = vc
|
||||
elif "vpsicavcs1" in ep:
|
||||
ep = (vc.endpoint or "").lower()
|
||||
nm = (vc.name or "").lower()
|
||||
if "vpgesavcs1" in ep or "gestion" in nm:
|
||||
vc_map["gestion"] = vc
|
||||
elif "vpmetavcs1" in ep or "metier" in nm:
|
||||
vc_map["metier"] = vc
|
||||
elif "vpsiaavcs1" in ep or "vpsicavcs1" in ep or "sia" in nm or nm == "dr":
|
||||
vc_map["dr"] = vc
|
||||
else:
|
||||
vc_map.setdefault("other", []).append(vc)
|
||||
|
||||
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:
|
||||
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]
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user