Policy Engine Aquila PRO V1¶
Le policy engine est le cœur de l’édition PRO. Il transforme une demande d’exécution en décision explicite.
Entrées du moteur¶
Le moteur reçoit, pour chaque demande, un payload JSON du type :
{
"repository": "org/service-api",
"branch": "main",
"pipeline": "deploy-prod",
"metadata": {
"initiator": "github-actions",
"run_id": "123456789",
"environment": "production"
}
}
Étapes d’évaluation¶
- Contrôle de la licence
- Vérification de la licence PRO via la clé publique RSA.
-
Si licence invalide ou expirée : décision
refusedavec raisonlicence_expiredou équivalent. -
Résolution du projet
- Recherche du projet et du pipeline correspondants dans
projects.json. -
Si aucun projet/pipeline trouvé : décision pouvant être
refused(project_not_managed) ouacceptedselon la politique choisie. -
Application des règles globales
- Vérification de l’état du freeze global.
- Vérification des fenêtres horaires et du week‑end.
-
Si contrainte violée : décision
refused(freeze_active,time_window_violation, etc.). -
Application des règles locales
- Contrôle de la branche (
allowed_branches). - Contrôle du type de pipeline (ex. seuls certains pipelines autorisés en production).
-
Application du cooldown pour ce couple projet / pipeline / branche.
-
Construction de la décision
- Attribution d’un statut :
acceptedourefused. - Ajout d’une ou plusieurs raisons (
reasons[]) permettant d’expliquer la décision. - Persistance de l’événement dans l’historique (en cas d’activation de l’historisation).
Sortie du moteur¶
Exemple de réponse en cas d’acceptation :
{
"status": "accepted",
"reasons": [],
"project": "service-api",
"pipeline": "deploy-prod",
"branch": "main"
}
Exemple de réponse en cas de refus :
{
"status": "refused",
"reasons": [
{
"code": "cooldown",
"message": "Cooldown actif pour ce pipeline sur cette branche."
}
],
"project": "service-api",
"pipeline": "deploy-prod",
"branch": "main"
}
Extension et maintenance¶
- Les règles sont principalement définies dans la configuration (
global_policy.json,projects.json) et dans le code du policy engine. - Toute évolution doit être testée :
- via des tests unitaires ciblés sur les scénarios critiques ;
- via une recette contrôlée sur un environnement de pré‑production.