patchcenter/app/services
Admin MPCZ 517b02f602 feat(prepatch): iteration multi-candidats SSH selon priorite SANEF
Probleme: vrexpbtex1 est sur .sanef.groupe (exception a la convention vr*=.sanef-rec.fr).
Le code tentait UN seul target via _resolve (TCP port 22 only) et echouait sans fallback SSH.

Logique de resolution revisee:
1. Convention en 1er: suffixe le plus probable selon prefixe (vr/lr/sr=>.sanef-rec.fr,
   vp/lp/sp=>.sanef.groupe, etc.)
2. servers.fqdn (BDD) en 2e position si renseigne et plausible (commence par hostname.)
3. Autres suffixes du referentiel ensuite

Implementation:
- _candidate_targets(hostname) : nouvelle fonction qui retourne la liste ordonnee
  des FQDN candidats a essayer SSH
- _connect(target, hostname, errors=...) : accepte une list errors optionnelle ou
  les exceptions de chaque tentative (PSMP/cle/password) sont append en clair pour
  diagnostic. Retro-compatible (errors=None par defaut)
- _connect_via_psmp(target, errors=...) : meme pattern
- _fqdn_is_consistent : assoupli, ne verifie plus la convention SANEF (qui rejetait
  les exceptions legitimes), juste que le FQDN commence par hostname.
- run_all_checks: itere _candidate_targets et essaie _connect sur chaque, accumule
  les erreurs de tous les candidats, retourne le 1er qui aboutit

UI:
- check_dns: si target trouve mais client KO, status=warn et liste des candidats tentes
- check_ssh: classification erreur (no route/timeout/refused/permission denied/etc.)
  + liste des candidats tentes + suggestion pour FQDN exception
2026-05-07 19:31:14 +02:00
..
__init__.py PatchCenter v2.0 — Initial commit 2026-04-04 03:00:12 +02:00
agent_deploy_service.py Admin applications + correspondance cleanup + tools presentation DSI 2026-04-13 21:11:58 +02:00
audit_service.py Sync SANEF : audit_service + schema.sql + data deploy + gitignore 2026-04-17 09:20:57 +02:00
cache.py Cache mémoire 10min pour Qualys API, bouton Resync temps réel, page Agents (activation keys + versions) 2026-04-06 23:04:48 +02:00
campaign_service.py Migre etat vers labels iTop verbatim (Production, Nouveau, etc.) 2026-04-14 18:40:56 +02:00
correspondance_service.py Migre etat vers labels iTop verbatim (Production, Nouveau, etc.) 2026-04-14 18:40:56 +02:00
itop_service.py fix(servers/edit): timeout iTop reduit (3s connect / 10s read au lieu de 30s) + indicateur de chargement htmx visible (bouton change en 'Sauvegarde...' + message en bas du form) 2026-05-05 15:47:12 +02:00
ldap_service.py LDAP: restriction groupe AD + auto-provisioning users (sans permissions) 2026-04-15 11:45:33 +02:00
patch_run_service.py feat(patching/iexec B3.6): bouton 3e Reboot manuel (double confirmation, jamais auto) + 3f Wait reconnexion (poll TCP/22 + SSH uptime, timeout 10min) - shutdown -r +1 avec audit log 2026-05-05 12:06:50 +02:00
prepatch_check_service.py feat(prepatch): iteration multi-candidats SSH selon priorite SANEF 2026-05-07 19:31:14 +02:00
prereq_service.py feat(servers): drop colonnes legacy (snapshot_required/pre_patch_script/post_patch_script/satellite_host/need_pct) avec migration donnees + recreation views v_servers / v_patchable / v_conformity_todo + adaptation prereq_service et server_detail.html 2026-05-05 15:11:30 +02:00
profile_service.py Users/Contacts: workflow profils + LDAP + sync iTop + etat aligne 2026-04-12 18:50:43 +02:00
qualys_service.py fix(qualys): strip() defensif sur credentials + extraction enrichie de l erreur Qualys (responseCode + errorMessage + errorResolution + RAW fallback si format inconnu) 2026-05-05 18:28:13 +02:00
qualys_tags_service.py fix(qualys): API 2.0 confirmee (3.0 OTHER_ERROR car endpoint inexistant, 5.0 INVALID_API_VERSION) + body XML + mapping field user-friendly vers nom Qualys (hostname->name, fqdn->dnsHostName, ip->address) - cause racine 401 = mot de passe API expire 2026-05-05 16:56:56 +02:00
query_helpers.py Optim: logging structure + query_helpers.py + fix exceptions silencieuses routers 2026-04-17 23:19:18 +00:00
quickwin_log_service.py QuickWin: prereq/snapshot services, referentiel, logs, correspondance 2026-04-10 18:13:00 +02:00
quickwin_prereq_service.py QuickWin: prereq/snapshot services, referentiel, logs, correspondance 2026-04-10 18:13:00 +02:00
quickwin_service.py Migre etat vers labels iTop verbatim (Production, Nouveau, etc.) 2026-04-14 18:40:56 +02:00
quickwin_snapshot_service.py chore(snapshot): strip() defensif sur credentials vCenter (copier-coller peut ajouter newline/CR) 2026-05-04 16:29:20 +02:00
realtime_audit_service.py feat(prepatch): iteration multi-candidats SSH selon priorite SANEF 2026-05-07 19:31:14 +02:00
secrets_service.py PatchCenter v2.0 — Initial commit 2026-04-04 03:00:12 +02:00
server_service.py fix(servers): filtre Zone=LAN match aussi zone_id IS NULL (la colonne affiche 'LAN' par defaut quand zone vide) + comparaison case-insensitive sur z.name 2026-05-05 16:05:25 +02:00
teams_service.py feat(pct): workflow prevenance PCT (auto-detection + gate confirmation + suffixe Teams) 2026-05-07 08:19:19 +02:00