Commit Graph

72 Commits

Author SHA1 Message Date
14f809335e Add tool import_plan_patching_xlsx : historique 2025+2026 (vert = patche) 2026-04-17 11:56:32 +00:00
c9890a274f Add tools/import_planning_xlsx.py : import patch_planning depuis xlsx Ayoub 2026-04-17 08:32:56 +00:00
55cd35eaf1 import_applications_ioda: gestion conflits nom_court (UNIQUE existant)
Strategy SELECT puis INSERT/UPDATE plutot que ON CONFLICT:
- Cherche par ioda_libelle d'abord, sinon par nom_court (apps non-IODA)
- Si UPDATE existant -> enrichit avec champs IODA
- Si INSERT et nom_court deja pris -> suffixe avec -IODA-<POS>

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 14:21:37 +02:00
34c8025b56 import_applications_ioda: cast str() pour cellules non-string (int)
Le fichier IODA a parfois des integers/floats dans lib_court ou autres
cols texte. Helper s() coerce + trim + None si vide.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 14:19:29 +02:00
b55e8d4e26 Import IODA applications + table qualys_missing_servers
- Migration deploy/migrations/2026-04-16_ioda_qualys_missing.sql:
  * ALTER applications: 13 colonnes ioda_* (libelle, code_pos, type, statut,
    perimetre, dept_domaine, resp_metier, resp_dsi, nb_components, etc.)
  * Index unique sur ioda_libelle (cle d'upsert idempotente)
  * Nouvelle table qualys_missing_servers avec server_id FK,
    reason_category enum (appliance/ot_scada/virtualisation/oubli/...),
    status (a_traiter/a_enroler/exempt/enrole/decom), priority 1-5,
    trigger updated_at

- tools/import_applications_ioda.py: lit deploy/ServeursAssoci*IODA*.xlsx
  sheet "Services Metiers", upsert sur ioda_libelle

- tools/import_qualys_missing.py: lit deploy/comparaison*.xlsx sheet
  RECAP, filtre col J (COMP1) sans 'Qualys', categorise auto via
  heuristique nom (BAC_/BEU_/... = ot_scada, esx*/vp*esx = virtu,
  presence 3 sources sans Qualys = oubli urgent), lien auto vers
  servers.id si match hostname/fqdn

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 13:59:53 +02:00
36c638c8ce Add link_qualys_by_ip: lie qualys_assets a servers via IP quand hostname mismatch (cas node3->vdameasxt3) 2026-04-15 12:22:04 +02:00
d72d4a711f Add test_ldap: diagnostic LDAP/AD step-by-step (bind admin + search user + bind user) 2026-04-15 11:21:50 +02:00
bfc996e50e Add SANEF Qualys Tags V3 ref (docx + xlsx) dans deploy/docs/
- tools/gen_tags_v3_xlsx.py: generateur Excel (3 sheets: DYN / STAT / Prefixes)
- deploy/docs/SANEF_Qualys_Tags_V3_RuleTypes.docx: reference Word
- deploy/docs/SANEF_Qualys_Tags_V3_RuleTypes.xlsx: reference Excel
2026-04-15 10:57:46 +02:00
adc8d40df3 Add gen_tags_v3_docx: genere un Word avec tableaux Tag V3/RuleType/Valeur/Couleur 2026-04-15 10:56:30 +02:00
1cc8d42e4a Add fill_domaine_from_weekly: extrait servers.domaine depuis col D des sheets S02..S16 2026-04-15 00:07:55 +02:00
8729b8470b test_psmp: derivation Fernet exacte identique a secrets_service 2026-04-14 23:46:23 +02:00
cdf976a9e8 test_psmp: dechiffre Fernet via secrets_service (mot de passe stocke chiffre) 2026-04-14 23:45:05 +02:00
1fc24f4684 Add test_psmp: diagnostic connexion PSMP CyberArk step-by-step 2026-04-14 23:41:05 +02:00
41f5e07e72 Add link_servers_applications: lie servers->applications depuis 2 Excel (ponderation 3/2/1) 2026-04-14 22:56:57 +02:00
fe6b05353c Add fill_responsables_by_probability: agregation ponderee des 2 Excel + contacts + domain_env
Source 1 (poids 3): Ayoub/Serveurs patchables 2026
Source 2 (poids 2): Plan de Patching/Histo-2025
Source 3 (poids 1 chacune): Plan de Patching/S02..S52 weekly
Source 4 (poids 1): fallback domain_environments

Par hostname et par role (responsable/referent), retient le nom au score max.
Canonicalise via contacts.name (case/accent-insensitive) avant ecriture.
2026-04-14 22:49:29 +02:00
b2b1b05028 tag_obsolete_os: normalise 'eol' -> 'obsolete' (filtre unifie) 2026-04-14 22:35:51 +02:00
47a4917d96 tag_obsolete_os: etend CHECK licence_support pour accepter 'obsolete' 2026-04-14 22:32:53 +02:00
5883ba5cc4 Add import_sanef_applications: import Solutions Applicatives iTop (nom/etat/responsable/admin) 2026-04-14 22:20:40 +02:00
2a11a27675 Add link_prod_nonprod: lie v[rtd]XXX <-> v[pi]XXX dans server_correspondance 2026-04-14 22:16:17 +02:00
52cb7b4cfc Add enrich_servers_from_qualys: pousse fqdn/os_family/os_version/domain_ltd depuis Qualys 2026-04-14 21:54:36 +02:00
8317dcd36b Add fill_ips_by_dns: fallback IP via DNS multi-suffix pour serveurs sans IP 2026-04-14 21:53:50 +02:00
ec82a7cd1e align_dmz: auto-detecte sheet (Histo-2025 prioritaire) + index DMZ via header 2026-04-14 21:39:14 +02:00
38756fbfd6 Add import_patch_history_xlsx: lit sheets hebdo S02..S52, detecte lignes vertes
Pour chaque serveur avec fond vert col A: insere patch_history avec
date (col N), heure (col O si presente), note 'Semaine XX'. Fallback
sur le lundi de la semaine ISO si pas de date.
2026-04-14 21:30:43 +02:00
90b03ec20b align_dmz: reconnait Exposition internet/Expo indirecte (SANEF) 2026-04-14 21:20:42 +02:00
197296b811 Add align_dmz_from_ayoub: tag servers.zone_id DMZ depuis colonne DMZ Excel 2026-04-14 20:55:04 +02:00
55d1c2b43d Add cleanup_referentiel + --overwrite sur fill_emails
cleanup_referentiel: aligne envs sur canoniques iTop (Test1/Test2->Test,
Developpement->Développement, Pre-production->Pré-Prod) + fusion domains
avec stem (Peages->Péage).

fill_emails --overwrite: force la reecriture des emails existants.
2026-04-14 20:51:16 +02:00
1ce72a8757 fill_emails: fallback prenom.nom@sanef.com si pas de match contact 2026-04-14 20:46:42 +02:00
7f7b04e775 fill_ssh_method: etend CHECK pour accepter rdp_local/rdp_psmp/ssh_psmp + cleanup_domains standalone 2026-04-14 20:45:31 +02:00
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