From c905ab6db3391567e738a4fff77584d52ae92a00 Mon Sep 17 00:00:00 2001 From: Admin MPCZ Date: Tue, 14 Apr 2026 19:50:40 +0200 Subject: [PATCH] import_sanef_ips: CAST inet + hostname multi-source + skip doublons --- tools/import_sanef_ips.py | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/tools/import_sanef_ips.py b/tools/import_sanef_ips.py index 79def7e..f34519a 100644 --- a/tools/import_sanef_ips.py +++ b/tools/import_sanef_ips.py @@ -39,8 +39,13 @@ def main(): skipped = 0 for r in rows: - vm_name = (r.get("Machine virtuelle->Nom") or "").strip() - ip = (r.get("Adresse IP") or "").strip() + # Hostname peut venir de Machine virtuelle / Serveur / Nom selon l'export iTop + vm_name = (r.get("Machine virtuelle->Nom") or r.get("Machine virtuelle") + or r.get("Serveur->Nom") or r.get("Serveur") + or r.get("Système->Nom") or r.get("Nom") or "").strip() + if vm_name: + vm_name = vm_name.split(".")[0].lower() + ip = (r.get("Adresse IP") or r.get("IP") or "").strip() gw = (r.get("Passerelle") or "").strip() or None mask = (r.get("Masque de sous réseau") or "").strip() or None vrf = (r.get("VRF") or "").strip() or None @@ -56,22 +61,20 @@ def main(): continue try: + existing = conn.execute(text( + "SELECT id FROM server_ips WHERE server_id=:sid AND ip_address=CAST(:ip AS inet)" + ), {"sid": srv.id, "ip": ip}).fetchone() + if existing: + skipped += 1 + continue conn.execute(text(""" INSERT INTO server_ips (server_id, ip_address, is_primary, gateway, netmask, vrf) - VALUES (:sid, :ip, true, :gw, :mask, :vrf) + VALUES (:sid, CAST(:ip AS inet), true, :gw, :mask, :vrf) """), {"sid": srv.id, "ip": ip, "gw": gw, "mask": mask, "vrf": vrf}) linked += 1 except Exception as e: - # colonnes optionnelles peut-être absentes, fallback minimal - try: - conn.execute(text(""" - INSERT INTO server_ips (server_id, ip_address, is_primary) - VALUES (:sid, :ip, true) - """), {"sid": srv.id, "ip": ip}) - linked += 1 - except Exception as e2: - print(f" [ERR] {vm_name} {ip}: {str(e2)[:150]}") - skipped += 1 + print(f" [ERR] {vm_name} {ip}: {str(e)[:150]}") + skipped += 1 conn.close() print(f"[DONE] Liés: {linked} | Hostname introuvable: {missing} | Ignoré: {skipped}")