From 2ed919e914beb6a892d7f2c3b382007c2cac808e Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Fri, 3 Jul 2026 17:04:34 -0400 Subject: [PATCH] =?UTF-8?q?Module=20BPM=20=C3=A9prouv=C3=A9=20+=20codifi?= =?UTF-8?q?=C3=A9=20=E2=80=94=20pile=20Icinga=20compl=C3=A8te?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit serveur_icingaweb2 installe + active businessprocess, crée le répertoire des processus (éditable UI) et sème des processus BPM en IaC (serveur_icingaweb2_bpm_processes). Format host;service éprouvé via les fixtures du module. Prouvé : processus « Supervision Chezlepro » (roll-up load/procs/swap/ ping4/ssh en ET) rend un état dans l'UI, backend IcingaDB (pas d'IDO). Rôle re-prouvé (reset → recrée le processus). Pile Icinga = moteur + Web 2 + BPM. Co-Authored-By: Claude Opus 4.8 --- CHANGELOG.md | 11 ++++++++- docs/catalogue-services.md | 6 ++--- roles/serveur_icingaweb2/defaults/main.yml | 10 ++++++++ roles/serveur_icingaweb2/tasks/main.yml | 28 +++++++++++++++++++--- 4 files changed, 48 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2781d56..ba3fa63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,16 @@ `testmail` (LDAP) se connecte (`/dashboard`), et le **module IcingaDB affiche la supervision** (hôte `icinga`). Déploiement `failed=0` (le rôle est bon ; les frictions étaient dans le simulateur de login curl : contrôle de cookie `_checkCookie`, champs `uid`/`submit_login`, - valeur CSRF avant `name`). **Reste de la pile Icinga : le module BPM.** + valeur CSRF avant `name`). +- **Module BPM (Business Process) éprouvé + codifié — pile Icinga complète.** `serveur_icingaweb2` + installe + active `icingaweb2-module-businessprocess` (`serveur_icingaweb2_modules`), crée le + répertoire des processus (éditable via l'UI, groupe `icingaweb2`, setgid) et **sème des processus + métier en IaC** (`serveur_icingaweb2_bpm_processes`, nom → contenu `.conf`). Format des feuilles + `host;service` (éprouvé via les fixtures du module). **Prouvé** : un processus « Supervision + Chezlepro » (agrège load/procs/swap/ping4/ssh du host `icinga` en logique ET) **rend un état** + dans l'UI (`testmail` connecté), **avec le backend IcingaDB** (pas d'IDO). Rôle re-prouvé (reset + → recrée le processus, idempotent). BPM n'est **pas remplaçable par Grafana** (roll-up d'impact + métier). Pile Icinga = **moteur + Web 2 + BPM**, complète. - **Cœur Icinga éprouvé (supervision active).** `serveur_icinga` (cœur : `icinga2` + `icingadb` + `icingadb-redis`) déployé sur `sup-01` (🔧→⭐), base `icingadb` PostgreSQL via le registre. **Prouvé** : 3 services actifs, et le moteur **supervise** — IcingaDB peuplée (1 hôte, 12 diff --git a/docs/catalogue-services.md b/docs/catalogue-services.md index 9f5b312..9e0f397 100644 --- a/docs/catalogue-services.md +++ b/docs/catalogue-services.md @@ -44,9 +44,9 @@ sur `forge-01`, PostgreSQL via registre, **branché au SSO OIDC** — 2e app : ` compte auto-créé). Et **`serveur_redis`** (sur `data-sql-01`, cache réseau, auth obligatoire — SET/GET prouvé, accès sans mot de passe refusé). Et le **cœur `serveur_icinga`** (sur `sup-01` : icinga2 + icingadb + redis dédié, base PostgreSQL via registre — supervise, IcingaDB peuplée) + -**`serveur_icingaweb2`** (UI native, PHP/nginx local, module IcingaDB, **auth LDAP** — `testmail` -se connecte et voit la supervision ; **reste le module BPM**). Restent « code non éprouvé » : -`serveur_sendmail`. +**`serveur_icingaweb2`** (UI native, PHP/nginx local, module IcingaDB + **module BPM**, **auth LDAP** — +`testmail` se connecte, voit la supervision, et un processus métier BPM rend un état). +**Pile Icinga complète : moteur + Web 2 + BPM.** Restent « code non éprouvé » : `serveur_sendmail`. > **Lacunes connues sur Keycloak** (déployé mais pas complet) : la **fédération LDAP** (Keycloak > → OpenLDAP, modèle d'identité A) n'est **pas encore automatisée** dans le rôle ; l'**edge nginx** diff --git a/roles/serveur_icingaweb2/defaults/main.yml b/roles/serveur_icingaweb2/defaults/main.yml index 802278b..26293c5 100644 --- a/roles/serveur_icingaweb2/defaults/main.yml +++ b/roles/serveur_icingaweb2/defaults/main.yml @@ -4,6 +4,7 @@ # Auth LDAP direct (OpenLDAP) — icingaweb2 n'a pas d'OIDC natif ; SSO via proxy = raffinement. serveur_icingaweb2_paquets: - icingadb-web # module IcingaDB (tire icingaweb2 en dépendance) + - icingaweb2-module-businessprocess # module BPM (vues d'impact métier) - php8.4-fpm - php8.4-cli - php8.4-pgsql @@ -43,3 +44,12 @@ serveur_icingaweb2_ldap_user_attr: "uid" # Qui reçoit le rôle Administrateur (liste d'uid séparés par des virgules). serveur_icingaweb2_admins: "testmail" + +# Modules icingaweb2 à activer. +serveur_icingaweb2_modules: + - icingadb + - businessprocess + +# Processus métier (BPM) à semer, en IaC (nom -> contenu du .conf). Vide par défaut : +# les processus sont normalement édités via l'UI. Un contenu ici est géré par Ansible. +serveur_icingaweb2_bpm_processes: {} diff --git a/roles/serveur_icingaweb2/tasks/main.yml b/roles/serveur_icingaweb2/tasks/main.yml index fe3e66e..9834f6f 100644 --- a/roles/serveur_icingaweb2/tasks/main.yml +++ b/roles/serveur_icingaweb2/tasks/main.yml @@ -45,12 +45,34 @@ label: "{{ item.d }}" notify: Redémarrer php-fpm -- name: Activer le module IcingaDB - ansible.builtin.command: icingacli module enable icingadb +- name: Activer les modules icingaweb2 (IcingaDB, BPM) + ansible.builtin.command: "icingacli module enable {{ item }}" args: - creates: "{{ serveur_icingaweb2_config_dir }}/enabledModules/icingadb" + creates: "{{ serveur_icingaweb2_config_dir }}/enabledModules/{{ item }}" + loop: "{{ serveur_icingaweb2_modules }}" when: not ansible_check_mode +- name: Assurer le répertoire des processus BPM (éditable via l'UI) + ansible.builtin.file: + path: "{{ serveur_icingaweb2_config_dir }}/modules/businessprocess/processes" + state: directory + owner: root + group: icingaweb2 + mode: "2770" + when: "'businessprocess' in serveur_icingaweb2_modules" + +- name: Semer les processus métier BPM (IaC, optionnel) + ansible.builtin.copy: + content: "{{ item.value }}" + dest: "{{ serveur_icingaweb2_config_dir }}/modules/businessprocess/processes/{{ item.key }}.conf" + owner: root + group: icingaweb2 + mode: "0660" + loop: "{{ serveur_icingaweb2_bpm_processes | dict2items }}" + loop_control: + label: "{{ item.key }}" + when: serveur_icingaweb2_bpm_processes | length > 0 + - name: Déployer le vhost nginx local d'Icinga Web 2 ansible.builtin.template: src: nginx.conf.j2