Files
hcornet c46836ab1c
build / Garde-fou (push) Successful in 11m43s
build / Images Harbor (catalog-sync, Dockerfile.catalog-sync) (push) Successful in 9m57s
build / Images Harbor (web, Dockerfile) (push) Successful in 13m29s
Dix-neuf packs applicatifs : JMX, API REST, SNMP
2026-09-12 11:31:25 +02:00

6.0 KiB

Enclume

Site public de génération de configuration CLAPI pour Centreon. On y construit ses commandes de contrôle, ses modèles de service et ses modèles d'hôte — de zéro ou en partant d'un pack du catalogue — et on repart avec les fichiers à jouer sur son central.

Projet indépendant, sans lien avec Centreon SAS.

Ce que fait le site

  • Éditeur libre : commandes, modèles de service, modèles d'hôte, hôtes. Héritage, duplication, rattachement des services aux modèles d'hôte.

  • Catalogue de départ : 71 packs, 266 sondes, importables puis modifiables.

  • Validation avant génération : noms en double, références manquantes, point-virgule interdit, services rattachés à aucun modèle d'hôte, mots de passe en clair.

  • Quatre fichiers : deploy.sh (avec --dry-run), deploy.clapi (import CLAPI), et les deux rollback correspondants.

  • Version de Centreon au niveau du projet : les macros sortent en 3 ou 5 champs selon la cible.

  • Prérequis d'installation : un pack peut déclarer ses paquets et ses droits, générés dans un prerequis.sh distinct du CLAPI.

  • Notifications par périmètre : calendriers, destinataires, états déclencheurs et message personnalisé par domaine applicatif ou système — voir docs/NOTIFICATIONS.md.

  • Partage par lien, projets enregistrés et soumission de packs quand l'instance est configurée pour — voir docs/COMPTES-ET-MODERATION.md.

Ce que le serveur ne fait pas

Il n'exécute rien. Ni CLAPI, ni prérequis, ni contribution : il écrit des fichiers que l'utilisateur relit avant de les jouer.

Sans configuration, le projet vit dans le navigateur (localStorage), s'exporte en JSON et se réimporte ; le serveur valide et génère sans rien conserver. Avec une base, le partage et l'enregistrement deviennent possibles — et les macros marquées « mot de passe » sont vidées avant toute écriture, quelle qu'elle soit.

Architecture

Cloudflare Tunnel → Traefik ─┬→ web           (image maison, sans état)
                             │
             volume catalogue ┴← catalog-sync (git → volume, puis /recharger)
                                 db           (postgres, à partir du chantier 2)

Chaque évolution produit une image versionnée. Le déploiement et le retour arrière se font en changeant une ligne dans .env : voir docs/EXPLOITATION.md.

Développement

python3 -m venv .venv && . .venv/bin/activate
pip install -r requirements.txt
ENCLUME_DEBUG=1 python3 run.py           # http://127.0.0.1:8080
python3 -m pytest -q

Ou en conteneur, avec le code monté en direct :

docker compose -f compose.dev.yaml up --build

Ligne de commande et API

Le même moteur sert au site, à la CLI et à la CI :

python3 -m enclume.cli --list
python3 -m enclume.cli --pack os-linux-snmp --prefix ACME- --out ./sortie --strict
python3 -m enclume.cli --projet mon-projet.json --out ./sortie
Route Usage
GET /api/packs catalogue
GET /api/packs/<id>/projet un pack converti en objets de projet
POST /api/packs/<id>/fusionner ajoute un pack au projet en cours
GET /api/fuseaux fuseaux horaires connus du système
GET /api/valeurs-standards modèles parents, versions SNMP, criticités
GET /aide/snmp installer et sécuriser SNMP, par système
GET /api/commandes-usuelles commandes de vérification livrées par Centreon
POST /api/valider validation seule
POST /api/generer validation et génération des quatre fichiers
POST /telecharger archive zip
POST /api/partages GET /api/partages/<id> partage par lien
GET POST DELETE /api/projets projets enregistrés (connexion requise)
POST /api/soumissions/verifier POST /api/soumissions contribution d'un pack
/api/moderation/... file de modération (groupe d'administration)
GET /health (alias /sante) version, commit, état du catalogue, fonctions actives
GET / page d'accueil publique
GET /editeur l'éditeur
GET /mentions mentions légales et données personnelles
POST /recharger relecture du catalogue (appelé par catalog-sync)

Ajouter un pack au catalogue

Un pack est un fichier YAML déposé dans catalog/<catégorie>/. Le format et un exemple commenté sont dans catalog/exemple-pack.yml.example. Aucun code à modifier, aucune image à reconstruire : catalog-sync le prend en charge au prochain cycle.

Contribuer et livrer

Les conventions de nommage et la revue à passer avant chaque version sont dans docs/CONVENTIONS.md. En résumé : ruff check, la suite de tests, et une installation en environnement vierge — dans cet ordre, avant tout tag.

Structure

run.py                      point d'entrée de développement
enclume/model.py              modèle de projet, validation, retrait des secrets
enclume/generator.py          projet → opérations CLAPI → quatre fichiers
enclume/catalog.py            lecture du catalogue YAML
enclume/packs.py              pack du catalogue → objets de projet
enclume/webapp.py             routes Flask
enclume/cli.py                usage en ligne de commande et en CI
enclume/static/editeur.js      éditeur, sans dépendance ni étape de build
tests/                      garde-fous sur la génération
Dockerfile                  image de l'application
Dockerfile.catalog-sync     image du synchroniseur
compose.yaml                production, derrière Traefik
compose.dev.yaml            développement local
.gitea/workflows/build.yaml construction, tests, publication sur Harbor

Chantiers

  1. Éditeur libre — fait
  2. Empaquetage Docker, CI, exploitation — fait
  3. Partage par lien et projets enregistrés — fait
  4. Connexion optionnelle via Authentik — fait
  5. Soumission de packs et modération, demandes de fusion Gitea — fait
  6. Habillage public : page d'accueil, mentions, documentation d'usage