From 991f4dd6dc9096fbefae72d38d03967059182690 Mon Sep 17 00:00:00 2001 From: Admin MPCZ Date: Tue, 14 Apr 2026 19:26:26 +0200 Subject: [PATCH] align_from_ayoub: dry-run affiche les domains/envs/paires a creer --- tools/align_from_ayoub.py | 61 ++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/tools/align_from_ayoub.py b/tools/align_from_ayoub.py index 27bdf83..c893c6e 100644 --- a/tools/align_from_ayoub.py +++ b/tools/align_from_ayoub.py @@ -180,6 +180,9 @@ def main(): seen_dom = {} seen_env = {} changes = [] + would_create_dom = set() + would_create_env = set() + would_create_de = set() for row in ws.iter_rows(min_row=2, values_only=True): hostname = clean(row[idx_host]) if idx_host < len(row) else None @@ -209,40 +212,43 @@ def main(): de_id = srv.domain_env_id if dom_name and env_name: if dom_name not in seen_dom: - before = conn.execute(text("SELECT COUNT(*) FROM domains")).scalar() - if not args.dry_run: - did = get_or_create_domain(conn, dom_name) - else: - row_ = conn.execute(text("SELECT id FROM domains WHERE name=:n"), + existing = conn.execute(text("SELECT id FROM domains WHERE name=:n"), {"n": dom_name}).fetchone() - did = row_.id if row_ else -1 - after = conn.execute(text("SELECT COUNT(*) FROM domains")).scalar() - if after > before: + if existing: + seen_dom[dom_name] = existing.id + elif args.dry_run: + would_create_dom.add(dom_name) + seen_dom[dom_name] = -1 # sera cree au vrai run + else: + seen_dom[dom_name] = get_or_create_domain(conn, dom_name) stats["dom_created"] += 1 - seen_dom[dom_name] = did if env_name not in seen_env: - before = conn.execute(text("SELECT COUNT(*) FROM environments")).scalar() - if not args.dry_run: - eid = get_or_create_env(conn, env_name) - else: - row_ = conn.execute(text("SELECT id FROM environments WHERE name=:n"), + existing = conn.execute(text("SELECT id FROM environments WHERE name=:n"), {"n": env_name}).fetchone() - eid = row_.id if row_ else -1 - after = conn.execute(text("SELECT COUNT(*) FROM environments")).scalar() - if after > before: + if existing: + seen_env[env_name] = existing.id + elif args.dry_run: + would_create_env.add(env_name) + seen_env[env_name] = -1 + else: + seen_env[env_name] = get_or_create_env(conn, env_name) stats["env_created"] += 1 - seen_env[env_name] = eid did = seen_dom[dom_name] eid = seen_env[env_name] if did > 0 and eid > 0: - if not args.dry_run: - before = conn.execute(text("SELECT COUNT(*) FROM domain_environments")).scalar() + existing = conn.execute(text( + "SELECT id FROM domain_environments WHERE domain_id=:d AND environment_id=:e" + ), {"d": did, "e": eid}).fetchone() + if existing: + de_id = existing.id + elif args.dry_run: + would_create_de.add((dom_name, env_name)) + else: de_id = get_or_create_dom_env(conn, did, eid) - after = conn.execute(text("SELECT COUNT(*) FROM domain_environments")).scalar() - if after > before: - stats["de_created"] += 1 + stats["de_created"] += 1 + if not args.dry_run and de_id: # Sync responsable/referent sur domain_environments (max 1 valeur — on garde la derniere vue) if resp or ref: up = {} @@ -279,6 +285,15 @@ def main(): conn.execute(text(f"UPDATE servers SET {sets} WHERE id=:sid"), params) stats["updated"] += 1 + if args.dry_run: + if would_create_dom: + print(f"\n[DRY-RUN] Domaines a creer ({len(would_create_dom)}) : {sorted(would_create_dom)}") + if would_create_env: + print(f"[DRY-RUN] Environnements a creer ({len(would_create_env)}) : {sorted(would_create_env)}") + if would_create_de: + print(f"[DRY-RUN] Paires (domaine,env) a creer : {len(would_create_de)}") + for d, e in sorted(would_create_de)[:20]: + print(f" ({d}, {e})") if args.dry_run and changes: print(f"\n[DRY-RUN] {len(changes)} serveurs a mettre a jour (premiers 20):") for h, u in changes[:20]: