Aller au contenu principal

ADR-0151 : Matrice de compatibilité tenue par le catalogue signé, pas par une table compatibility_matrix

Contexte​

Le modèle de données de référence (B13.1) liste une table compatibility_matrix. Le Platform Manager décide la compatibilité d'une installation, d'une mise à niveau et d'une restauration à partir des versions de chaque service.

Décision​

La matrice de compatibilité est une donnée du catalogue, livrée et signée avec lui (navin-manager/catalog/stack.yaml et chaque catalog/services/<service>.yaml : version, upgrade.from, upgrade.stateful, upgrade.rollback). Le serveur la lit par services/context.py::supported_versions et services/upgrades.py::compatibility ; la vérification de restauration (recovery/restore.py::compatibility) compare les versions enregistrées dans l'artefact aux versions cibles. Aucune table compatibility_matrix n'est créée : une copie en base pourrait diverger du catalogue réellement déployé, alors que le catalogue est versionné, revu et signé avec le code qui l'applique, et passe tel quel dans le miroir hors ligne.

Conséquences​

Changer la matrice, c'est livrer un catalogue ; elle est auditée par l'historique du dépôt et la signature, pas par des lignes modifiables à chaud. L'API expose le résultat calculé (GET /api/v1/clusters/{cluster_id}/services/{service}/upgrade : allowed, problems avec motif) en anglais et en français.

Preuves​

  • navin-manager/server/tests/test_lifecycle_upgrades.py::test_upgrade_compatibility_refusals : refus des versions hors matrice.
  • navin-manager/server/tests/test_catalog.py::test_parameters_are_documented_and_valid : schéma du catalogue.