Sync iTop: import emails responsable serveur/domaine dans servers + domain_environments

This commit is contained in:
Pierre & Lumière 2026-04-11 13:55:25 +02:00
parent 29e5a28a27
commit df4cd3be6f

View File

@ -177,6 +177,12 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass):
env_map = {r.name.lower(): r.id for r in db.execute(text("SELECT id, name FROM environments")).fetchall()}
zone_map = {r.name.lower(): r.id for r in db.execute(text("SELECT id, name FROM zones")).fetchall()}
# Person name → email lookup
person_email = {}
for p in persons:
fullname = f"{p.get('first_name','')} {p.get('name','')}".strip()
person_email[fullname.lower()] = p.get("email", "")
# ─── 7. VirtualMachines ───
vms = client.get_all("VirtualMachine",
"name,description,status,managementip,osfamily_id_friendlyname,"
@ -208,8 +214,12 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass):
de_id = row.id
else:
try:
db.execute(text("INSERT INTO domain_environments (domain_id, environment_id, responsable_nom) VALUES (:d, :e, :r)"),
{"d": did, "e": eid, "r": v.get("responsable_domaine_name", "")})
resp_dom_name = v.get("responsable_domaine_name", "")
resp_dom_email = person_email.get(resp_dom_name.lower(), "")
db.execute(text("INSERT INTO domain_environments (domain_id, environment_id, responsable_nom, responsable_email, referent_nom, referent_email) VALUES (:d, :e, :rn, :re, :fn, :fe)"),
{"d": did, "e": eid, "rn": resp_dom_name, "re": resp_dom_email,
"fn": v.get("responsable_serveur_name", ""),
"fe": person_email.get(v.get("responsable_serveur_name", "").lower(), "")})
db.commit()
row = db.execute(text("SELECT id FROM domain_environments WHERE domain_id=:d AND environment_id=:e"),
{"d": did, "e": eid}).fetchone()
@ -225,6 +235,9 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass):
pref_jour = (v.get("pref_patch_jour_name", "") or "").lower() or "indifferent"
pref_heure = v.get("patch_window", "") or "indifferent"
resp_srv_name = v.get("responsable_serveur_name", "")
resp_dom_name = v.get("responsable_domaine_name", "")
vals = {
"hostname": hostname, "fqdn": v.get("name", hostname),
"os_family": "linux" if "linux" in v.get("osfamily_id_friendlyname", "").lower() else "windows",
@ -232,8 +245,10 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass):
"machine_type": "vm",
"etat": itop_status.get(v.get("status", ""), "en_production"),
"de_id": de_id, "zone_id": zone_id,
"resp_srv": v.get("responsable_serveur_name", ""),
"resp_dom": v.get("responsable_domaine_name", ""),
"resp_srv": resp_srv_name,
"resp_srv_email": person_email.get(resp_srv_name.lower(), ""),
"resp_dom": resp_dom_name,
"resp_dom_email": person_email.get(resp_dom_name.lower(), ""),
"desc": v.get("description", ""),
"ip": v.get("managementip", ""),
"tier": tier, "ssh_method": ssh_method,
@ -247,7 +262,8 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass):
if existing:
db.execute(text("""UPDATE servers SET fqdn=:fqdn, os_family=:os_family, os_version=:os_version,
etat=:etat, domain_env_id=:de_id, zone_id=:zone_id,
responsable_nom=:resp_srv, referent_nom=:resp_dom, commentaire=:desc,
responsable_nom=:resp_srv, responsable_email=:resp_srv_email,
referent_nom=:resp_dom, referent_email=:resp_dom_email, commentaire=:desc,
tier=:tier, ssh_method=:ssh_method, ssh_user=:ssh_user,
patch_frequency=:patch_freq, patch_excludes=:patch_excludes,
domain_ltd=:domain_ltd, pref_patch_jour=:pref_jour, pref_patch_heure=:pref_heure,
@ -259,11 +275,13 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass):
else:
try:
db.execute(text("""INSERT INTO servers (hostname, fqdn, os_family, os_version, machine_type,
etat, domain_env_id, zone_id, responsable_nom, referent_nom, commentaire,
etat, domain_env_id, zone_id, responsable_nom, responsable_email,
referent_nom, referent_email, commentaire,
ssh_port, ssh_user, ssh_method, tier, patch_frequency, patch_excludes,
domain_ltd, pref_patch_jour, pref_patch_heure)
VALUES (:hostname, :fqdn, :os_family, :os_version, :machine_type,
:etat, :de_id, :zone_id, :resp_srv, :resp_dom, :desc,
:etat, :de_id, :zone_id, :resp_srv, :resp_srv_email,
:resp_dom, :resp_dom_email, :desc,
22, :ssh_user, :ssh_method, :tier, :patch_freq, :patch_excludes,
:domain_ltd, :pref_jour, :pref_heure)"""), vals)
db.flush()