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 # SSH HELPERS
# ============================================================================== # ==============================================================================
def build_fqdn(server, env): 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: if "." in server:
return [server] return [server]
env_low = env.lower() env_low = (env or "").lower()
if "recette" in env_low or "rec" in env_low: is_nonprod = any(k in env_low for k in ("recette", "rec", "test", "tst", "dev", "qa"))
return [server, f"{server}.sanef-rec.fr"] if is_nonprod:
else: # Non-prod : recette en priorite, fallback groupe au cas ou
return [server, f"{server}.sanef.groupe"] 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): def load_key(keyfile):
"""Charge une clé SSH privée. Retourne l'objet PKey ou None. """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 continue
else: else:
# SSH direct avec clé # 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: try:
client = paramiko.SSHClient() client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 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) look_for_keys=False, allow_agent=False)
client._eff_host = hostname client._eff_host = hostname
return client, 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 continue
return None, None return None, None