Sync iTop: ajout responsable serveur (contacts_list) + commentaire/description

This commit is contained in:
Pierre & Lumière 2026-04-10 23:23:48 +02:00
parent f73ea25d5d
commit 53e59e7305

View File

@ -33,7 +33,7 @@ class ITopClient:
return {"code": -1, "message": str(e)}
def get_servers(self):
"""Recupere tous les serveurs iTop (Server + VirtualMachine)"""
"""Recupere tous les serveurs iTop (Server + VirtualMachine) avec contacts"""
servers = []
for cls in ["Server", "VirtualMachine"]:
r = self._call("core/get", **{
@ -41,11 +41,20 @@ class ITopClient:
"key": f"SELECT {cls}",
"output_fields": "name,description,status,managementip,osfamily_id_friendlyname,"
"osversion_id_friendlyname,brand_name,model_name,serialnumber,"
"org_name,location_name,business_criticity,cpu,ram"
"org_name,location_name,business_criticity,cpu,ram,contacts_list"
})
if r.get("code") == 0 and r.get("objects"):
for key, obj in r["objects"].items():
f = obj["fields"]
# Extract contacts (responsable serveur)
contacts = f.get("contacts_list", [])
contact_names = []
contact_emails = []
for c in contacts:
cname = c.get("contact_id_friendlyname", "")
if cname:
contact_names.append(cname)
servers.append({
"itop_id": obj["key"],
"itop_class": cls,
@ -63,6 +72,7 @@ class ITopClient:
"criticity": f.get("business_criticity", ""),
"cpu": f.get("cpu", ""),
"ram": f.get("ram", ""),
"responsable_nom": contact_names[0] if contact_names else "",
})
return servers
@ -175,6 +185,12 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass):
if s["location"]:
sets.append("site = :site")
updates["site"] = s["location"]
if s.get("responsable_nom"):
sets.append("responsable_nom = :resp_nom")
updates["resp_nom"] = s["responsable_nom"]
if s.get("description"):
sets.append("commentaire = :comm")
updates["comm"] = s["description"]
if sets:
sets.append("updated_at = NOW()")
db.execute(text(f"UPDATE servers SET {', '.join(sets)} WHERE id = :sid"), updates)
@ -209,7 +225,7 @@ def sync_to_itop(db, itop_url, itop_user, itop_pass):
itop_servers = {s["name"].lower(): s for s in client.get_servers()}
# Get patchcenter servers
rows = db.execute(text("SELECT hostname, fqdn, os_version, os_family, etat, site FROM servers")).fetchall()
rows = db.execute(text("SELECT hostname, fqdn, os_version, os_family, etat, site, responsable_nom, commentaire FROM servers")).fetchall()
status_map = {"en_production": "production", "decommissionne": "obsolete",
"stock": "stock", "en_cours": "implementation"}
@ -221,7 +237,9 @@ def sync_to_itop(db, itop_url, itop_user, itop_pass):
if itop_srv:
fields = {}
if srv.os_version:
if srv.commentaire:
fields["description"] = srv.commentaire
elif srv.os_version:
fields["description"] = f"OS: {srv.os_version}"
if srv.etat:
fields["status"] = status_map.get(srv.etat, "production")