Commit Graph

44 Commits

Author SHA1 Message Date
a39a4866f3 Add fill_ssh_method_by_default: modes connexion SANEF par OS+env
Linux+Prod=ssh_psmp, Linux+other=ssh_key
Windows+Prod=rdp_psmp, Windows+other=rdp_local
2026-04-14 20:43:51 +02:00
6c8e2a3339 Add fill_emails_from_contacts: complete domain_environments emails depuis contacts 2026-04-14 20:41:29 +02:00
9f4d7707ef DNS fill timeout via thread + tag_obsolete_os supporte els/obsolete separement 2026-04-14 20:37:46 +02:00
7f6ccc763b Add tag_obsolete_os: licence_support=obsolete pour OS EOL (RHEL 5/6/7, Win 2008/2012, Debian 8-10, etc.) 2026-04-14 20:36:19 +02:00
0cfdab7c61 Add fill_domain_ltd_by_dns: resolution DNS multi-suffix pour cas residuels 2026-04-14 20:31:41 +02:00
b315cee98b Add fill_domain_ltd_by_prefix: convention SANEF vp/vi=sanef.groupe, vr/vt/vd=sanef-rec.fr 2026-04-14 20:21:29 +02:00
de41b66a34 Add import_domain_ltd_from_qualys: extrait domain_ltd depuis Qualys FQDN 2026-04-14 20:18:06 +02:00
489524ac38 import_ips_from_qualys: enleve suffixe /32 inet 2026-04-14 20:15:52 +02:00
154faceaff Fix: qualys_assets.ip_address est inet pas text, cast en text 2026-04-14 20:15:05 +02:00
e072adb717 Add import_ips_from_qualys: fallback IPs depuis Qualys pour serveurs sans IP iTop 2026-04-14 20:13:11 +02:00
c8a5f73616 import_sanef_ips: csv.reader par indice (evite conflit Nom/Nom duplique) 2026-04-14 20:10:51 +02:00
a66e0d853e Fix schema server_ips: ip_type au lieu de is_primary, VRF/GW/MASK dans description 2026-04-14 19:55:42 +02:00
c905ab6db3 import_sanef_ips: CAST inet + hostname multi-source + skip doublons 2026-04-14 19:50:40 +02:00
b66ef0a122 Fix SQLAlchemy: CAST(:ip AS inet) au lieu de :ip::inet (conflit avec bind marker) 2026-04-14 19:48:42 +02:00
e2f61af818 Add import_ips_from_assets: lit colonne IP directe des CSV VM/physical
Contourne l'export Interface Réseau (souvent incomplet). Utilise la
colonne IP directe du CSV VMs (attribut iTop sur la VM) + VRF si
present. Gère plusieurs IPs separees par virgule.
2026-04-14 19:47:37 +02:00
78ad32045e import_databases: lire Systeme->Nom en priorite (Serveur->Nom vide pour VM) 2026-04-14 19:39:35 +02:00
7c56725f6e Add import_sanef_databases: table server_databases + import CSV iTop
Cree server_databases (FK servers.id, UNIQUE hostname+instance_name).
Pour chaque instance BDD iTop: match hostname via Serveur->Nom, store
type (SAP Hana/Oracle/PostgreSQL/SQL Server/MySQL), version, edition,
cluster, environnement, etat.
2026-04-14 19:36:11 +02:00
2379a2fdc0 align_from_ayoub: dedoublonne les domaines case/accent-insensitive
Fusionne 'Flux Libre'/'flux libre', 'Péage'/'peage'/'PeagE' en gardant la
forme propre (avec accents et capitale). Update domain_environments.domain_id
vers le keeper et supprime les doublons.
2026-04-14 19:32:28 +02:00
991f4dd6dc align_from_ayoub: dry-run affiche les domains/envs/paires a creer 2026-04-14 19:26:26 +02:00
331e6b2946 align_from_ayoub: normalise Environnement (production->Production, Test 1->Test) 2026-04-14 19:25:10 +02:00
b6bb7e2edd align_from_ayoub: switch vers jointure (auto-cree domains/envs/de)
Auto-cree les domains / environments / domain_environments absents en
utilisant les valeurs iTop verbatim (domains.name='BI', etc.), avec codes
slug auto-generes (evite collision).

Pour chaque serveur:
 - set servers.domain_env_id vers la paire (domaine, env)
 - sync servers.environnement plain-text (pour filtre/affichage existant)
 - populate domain_environments.responsable_nom / referent_nom si NULL

Preserve les valeurs existantes non-NULL dans domain_environments.
2026-04-14 19:20:36 +02:00
c16a360cdd Add align_from_ayoub: alignement servers depuis Excel Planning Patching
Lit la sheet 'Serveurs patchables 2026' et met a jour pour chaque hostname :
 - domaine (nouvelle colonne text iTop verbatim, ajoutee si absente)
 - environnement (override si non vide)
 - responsable_nom (Responsable Domaine DTS)
 - referent_nom (Referent technique)

Pas de jointure via domain_env_id: stockage plain-text aligne sur iTop.
Dry-run affiche les diff avant/apres.
2026-04-14 19:17:25 +02:00
9048a87397 Drop NOT NULL sur servers.etat pour accepter les physiques non-lifecycle 2026-04-14 19:06:05 +02:00
a366427daf Fix: iTop exporte 2 colonnes Etat (lifecycle+condition), prendre la 1ere
Python csv.DictReader ne garde que le dernier quand 2 colonnes ont le
meme nom: le Nouveau (condition) ecrasait le Production (lifecycle).
Switch vers csv.reader + lecture par indice de colonne (1ere occurrence
de Etat = lifecycle).
2026-04-14 19:05:08 +02:00
ce2ac219db Fix: lire Etat en priorite (Status toujours Production, inutile) + condition -> NULL 2026-04-14 18:51:57 +02:00
56f91ca9a8 Add list_csv_etats: liste valeurs distinctes Etat/Status/Environnement 2026-04-14 18:49:29 +02:00
1c2d0b958e Etat/Environnement dropdowns alignes strict iTop SANEF
Etat: 6 valeurs lifecycle uniquement (Production, Implémentation,
Stock, Obsolète, prêt, tests). Suppression des valeurs condition
(Nouveau, Cassé, En panne, etc.) et de EOL qui n'existent pas
dans iTop SANEF.

Environnement: 7 valeurs iTop (Développement, Intégration, Pré-Prod,
Production, Recette, Test, Formation). Filtre env bascule de
e.code (legacy) vers s.environnement.

tools/import_etat_itop.py:
- CHECK 6 valeurs lifecycle + NULL
- Migration mappe les anciennes condition/EOL -> NULL
- Lit Status en priorite dans le CSV (lifecycle), fallback Etat
- Fix format print pour None

tools/import_sanef_*.py: ITOP_ETATS reduit a 6 valeurs
2026-04-14 18:48:30 +02:00
753d4076c9 Migre etat vers labels iTop verbatim (Production, Nouveau, etc.)
Aligne la colonne servers.etat sur les valeurs iTop exactes au lieu
des codes lowercase internes.

Impact:
- servers.etat stocke: Production, Implémentation, Stock, Obsolète,
  EOL, prêt, tests, Nouveau, A récupérer, Cassé, Cédé, En panne,
  Perdu, Recyclé, Occasion, A détruire, Volé
- Remplace tous les 'production'/'obsolete'/'stock'/'eol'/'implementation'
  en WHERE/comparisons par les labels iTop verbatim (~10 fichiers)
- Templates badges/filtres: valeurs + labels iTop
- itop_service: maintient mapping iTop API internal code <-> DB label
- import_sanef_*: norm_etat retourne la valeur iTop verbatim ou None
  (plus de fallback silencieux sur 'production')

Ajoute:
- tools/import_etat_itop.py : migration lowercase -> iTop + re-import CSV
- tools/import_environnement.py : fix dry-run pour ADD COLUMN idempotent

Supprime:
- tools/fix_etat_extend.py (obsolete par import_etat_itop.py)
2026-04-14 18:40:56 +02:00
242641a085 Add import_environnement: colonne environnement + import CSV iTop verbatim 2026-04-14 18:33:40 +02:00
0f031b2150 fix_etat_extend: ajoute pret et tests au mapping iTop 2026-04-14 18:32:00 +02:00
fd748ce3fd Add fix_etat_extend: extend etat CHECK + remap from iTop CSV
Ajoute les 11 etats 'condition physique' iTop (nouveau, casse, en_panne,
cede, perdu, recycle, occasion, a_recuperer, a_detruire, vole) au CHECK
constraint servers.etat. Relit les CSV pour mettre a jour uniquement
la colonne etat sans tout reimporter.

Fix bug: norm_etat() precedent defaultait tout non-reconnu sur 'production',
masquant les serveurs 'Nouveau' ou 'En panne' qui ne doivent pas etre patches.
2026-04-14 18:15:25 +02:00
987e21377b Add move_esxi_extras + move_chassis scripts
move_esxi_extras: identifie ESXi par description (patch_owner_details
contient ESXi/hebergeant/hyperviseur) pour les PDP BAC_* et autres
hyperviseurs non presents dans le CSV Hyperviseur iTop. Deplace vers
hypervisors (kind=hypervisor).

move_chassis: deplace les chassis (CPEM*) vers une table chassis dediee
(non patchables, pas d'agent Qualys).
2026-04-14 18:09:26 +02:00
d3b7fc2e22 Add move_vcenters script + kind column on hypervisors 2026-04-14 17:48:46 +02:00
0a00c401d7 Add hypervisors table + move script (preserves VM->hypervisor link via vcenter_vm_name) 2026-04-14 17:40:24 +02:00
683a86346d Add SANEF physical/hypervisor import script 2026-04-14 17:34:33 +02:00
faa267c3ff Add SANEF contacts import script 2026-04-14 14:22:03 +02:00
612f3c7cea Add SANEF IPs import script (from Interface réseau export) 2026-04-14 13:57:27 +02:00
b72f1244dd Use autocommit mode to persist inserts immediately 2026-04-14 13:43:25 +02:00
c6113bc537 Drop ON CONFLICT (no unique constraint on hostname) 2026-04-14 13:39:11 +02:00
2215067987 Use savepoints per row to isolate failing inserts 2026-04-14 13:38:16 +02:00
f0fe6eba81 Fix etat mapping: use only production/implementation/stock/obsolete/eol 2026-04-14 13:34:07 +02:00
42fb16d67e Fix import script: auto-detect FK tables before truncate 2026-04-14 13:31:00 +02:00
338c0ecc0f Add SANEF asset CSV import script 2026-04-14 13:24:42 +02:00
677f621c81 Admin applications + correspondance cleanup + tools presentation DSI
- Admin applications: CRUD module (list/add/edit/delete/assign/multi-app)
  avec push iTop bidirectionnel (applications.py + 3 templates)
- Correspondance prod<->hors-prod: migration vers server_correspondance
  globale, suppression ancien code quickwin, ajout filtre environnement
  et solution applicative, colonne environnement dans builder
- Servers page: colonne application_name + equivalent(s) via get_links_bulk,
  filtre application_id, push iTop sur changement application
- Patching: bulk_update_application, bulk_update_excludes, validations
- Fix paramiko sftp.put (remote_path -> positional arg)
- Tools: wiki_to_pdf.py (DokuWiki -> PDF) + generate_ppt.py (PPTX 19 slides
  DSI patching) + contenu source (processus_patching.txt, script_presentation.txt)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 21:11:58 +02:00