4.2 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 : 26 packs, environ 124 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 deuxrollbackcorrespondants. - Version de Centreon au niveau du projet : les macros sortent en 3 ou 5 champs selon la cible.
Ce que le serveur ne fait pas
Le projet vit dans le navigateur du visiteur (localStorage), s'exporte en JSON et se
réimporte. Le serveur valide et génère, sans rien conserver. Les macros marquées « mot de
passe » ne sont jamais stockées ni partagées : elles sont vidées avant toute écriture côté
serveur.
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/valider |
validation seule |
POST /api/generer |
validation et génération des quatre fichiers |
POST /telecharger |
archive zip |
GET /sante |
version, commit, état du catalogue |
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.
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
- Éditeur libre — fait
- Empaquetage Docker, CI, exploitation — fait
- Partage par lien et projets enregistrés (PostgreSQL)
- Connexion optionnelle via Authentik
- Soumission de packs et modération, écriture dans Gitea
- Habillage public : page d'accueil, mentions, documentation d'usage