Files
Enclume/README.md
T
hcornet de7a691861
Construction et publication / verifier (push) Successful in 41s
Construction et publication / verifier (pull_request) Successful in 11s
Construction et publication / publier (pull_request) Skipped
Construction et publication / publier (push) Failing after 6m3s
Enclume : editeur CLAPI, catalogue de 26 packs, empaquetage Docker
2026-09-10 11:32:03 +02:00

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 deux rollback correspondants.
  • 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

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