Sync iTop enrichie: responsable_serveur + responsable_domaine + creation VMs
- Import: responsable_serveur_name → responsable_nom, responsable_domaine_name → referent_nom - Import: environnement iTop synchronise - Export: cree les VMs manquantes dans iTop (classe VirtualMachine, org MPCZ) - Export: hostname comme nom (pas fqdn)
This commit is contained in:
parent
53e59e7305
commit
db74111d58
@ -41,7 +41,8 @@ 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,contacts_list"
|
||||
"organization_name,location_name,business_criticity,cpu,ram,"
|
||||
"contacts_list,responsable_serveur_name,responsable_domaine_name,environnement"
|
||||
})
|
||||
if r.get("code") == 0 and r.get("objects"):
|
||||
for key, obj in r["objects"].items():
|
||||
@ -67,12 +68,14 @@ class ITopClient:
|
||||
"brand": f.get("brand_name", ""),
|
||||
"model": f.get("model_name", ""),
|
||||
"serial": f.get("serialnumber", ""),
|
||||
"org": f.get("org_name", ""),
|
||||
"org": f.get("organization_name", ""),
|
||||
"location": f.get("location_name", ""),
|
||||
"criticity": f.get("business_criticity", ""),
|
||||
"cpu": f.get("cpu", ""),
|
||||
"ram": f.get("ram", ""),
|
||||
"responsable_nom": contact_names[0] if contact_names else "",
|
||||
"responsable_nom": f.get("responsable_serveur_name", "") or (contact_names[0] if contact_names else ""),
|
||||
"responsable_domaine": f.get("responsable_domaine_name", ""),
|
||||
"environnement": f.get("environnement", ""),
|
||||
})
|
||||
return servers
|
||||
|
||||
@ -188,9 +191,15 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass):
|
||||
if s.get("responsable_nom"):
|
||||
sets.append("responsable_nom = :resp_nom")
|
||||
updates["resp_nom"] = s["responsable_nom"]
|
||||
if s.get("responsable_domaine"):
|
||||
sets.append("referent_nom = :ref_nom")
|
||||
updates["ref_nom"] = s["responsable_domaine"]
|
||||
if s.get("description"):
|
||||
sets.append("commentaire = :comm")
|
||||
updates["comm"] = s["description"]
|
||||
if s.get("ip"):
|
||||
sets.append("fqdn = :fqdn")
|
||||
updates["fqdn"] = s["name"]
|
||||
if sets:
|
||||
sets.append("updated_at = NOW()")
|
||||
db.execute(text(f"UPDATE servers SET {', '.join(sets)} WHERE id = :sid"), updates)
|
||||
@ -219,7 +228,7 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass):
|
||||
def sync_to_itop(db, itop_url, itop_user, itop_pass):
|
||||
"""Exporte les serveurs PatchCenter vers iTop (mise a jour)"""
|
||||
client = ITopClient(itop_url, itop_user, itop_pass)
|
||||
stats = {"updated": 0, "errors": []}
|
||||
stats = {"updated": 0, "created": 0, "errors": []}
|
||||
|
||||
# Get current iTop servers for matching
|
||||
itop_servers = {s["name"].lower(): s for s in client.get_servers()}
|
||||
@ -251,5 +260,19 @@ def sync_to_itop(db, itop_url, itop_user, itop_pass):
|
||||
else:
|
||||
stats["errors"].append(f"{srv.hostname}: {r.get('message')}")
|
||||
|
||||
else:
|
||||
# Server not in iTop — create as VirtualMachine
|
||||
fields = {
|
||||
"name": srv.hostname,
|
||||
"org_id": "SELECT Organization WHERE name = 'MPCZ'",
|
||||
"status": status_map.get(srv.etat, "production"),
|
||||
"description": srv.commentaire or f"OS: {srv.os_version or 'N/A'}",
|
||||
}
|
||||
r = client.create_server("VirtualMachine", fields)
|
||||
if r.get("code") == 0:
|
||||
stats["created"] += 1
|
||||
else:
|
||||
stats["errors"].append(f"Create {srv.hostname}: {r.get('message')}")
|
||||
|
||||
log.info(f"iTop export: {stats}")
|
||||
return stats
|
||||
|
||||
Loading…
Reference in New Issue
Block a user