fix(ssh): build_fqdn elargi - Test/Dev/QA testent aussi .sanef-rec.fr (etait limite a 'recette') + log d'erreur ssh_connect detaille

This commit is contained in:
Pierre & Lumière 2026-04-29 15:15:32 +02:00
parent 92528043d0
commit c23dda0a46

View File

@ -661,13 +661,19 @@ def read_excel_servers(filepath, sheet_name=None):
# SSH HELPERS
# ==============================================================================
def build_fqdn(server, env):
"""Genere les candidats FQDN a tester. Convention SANEF :
- .sanef-rec.fr pour env Recette/Test/Dev (les VMs non-prod sont en recette)
- .sanef.groupe pour env Prod / autres (AD interne)
Tente d'abord le hostname brut puis chaque suffixe."""
if "." in server:
return [server]
env_low = env.lower()
if "recette" in env_low or "rec" in env_low:
return [server, f"{server}.sanef-rec.fr"]
else:
return [server, f"{server}.sanef.groupe"]
env_low = (env or "").lower()
is_nonprod = any(k in env_low for k in ("recette", "rec", "test", "tst", "dev", "qa"))
if is_nonprod:
# Non-prod : recette en priorite, fallback groupe au cas ou
return [server, f"{server}.sanef-rec.fr", f"{server}.sanef.groupe"]
# Prod : groupe en priorite, fallback recette au cas ou
return [server, f"{server}.sanef.groupe", f"{server}.sanef-rec.fr"]
def load_key(keyfile):
"""Charge une clé SSH privée. Retourne l'objet PKey ou None.
@ -809,7 +815,10 @@ def ssh_connect(server, env, settings, pkey, pkey2, cyb_password=None):
continue
else:
# SSH direct avec clé
for key in [k for k in [pkey, pkey2] if k]:
keys = [k for k in [pkey, pkey2] if k]
if not keys:
print(f"[ssh_connect] {hostname}: AUCUNE CLE chargee (pkey/pkey2 = None) → check load_key.last_error")
for idx, key in enumerate(keys, 1):
try:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
@ -819,7 +828,9 @@ def ssh_connect(server, env, settings, pkey, pkey2, cyb_password=None):
look_for_keys=False, allow_agent=False)
client._eff_host = hostname
return client, hostname
except Exception:
except Exception as ex_ssh:
print(f"[ssh_connect] {hostname} cle#{idx} ({type(key).__name__}) "
f"user={settings.get('target_user','?')}{type(ex_ssh).__name__}: {ex_ssh}")
continue
return None, None