Epic 5 : Gestion de la configuration

Pour plus de détails et d’éléments de contexte, voir la page Serveur de configuration.

E5-1 : Charger les dictionnaires Creole à partir d’un service “source de données”

Contexte

Afin de pouvoir manipuler les données de configuration d’un serveur, il nous faut tout d’abord charger les informations constituant le cadre de manipulation de celles ci. Dans le cas des distributions EOLE, ce cadre est donné par les dictionnaires Creole. Nous devons donc implémenter un système qui nous permettra de charger ces fichiers dans l’environnement Zéphir et le stocker dans un format exploitable par l’application.

Proposition

L’arborescence dataset/* du service datasource devra être étendue/modifiée afin de prendre en charge la mise à disposition des dictionnaires XML Creole.

Suite à la notification de disponibilité d’un service datasource par l’orchestrateur Consul, le service servermodel-data devra vérifier les mises à jour des dictionnaires disponibles. Il devra effectuer un chargement des fichiers modifiés et mettre à jour les entités Document/ApplicationService/ServerModel associées le cas échéant.

Les dictionnaires XML Creole devront être copiés de la source de données vers le service storage-minio par le service servermodel-data (source de données != données de travail).

Critères d’acceptation

  • Les dictionnaires Creole sont correctement copiés depuis la source de données vers le service storage-minio
  • Les entités Document et ApplicationService sont correctement mises à jour lorsqu’un dictionnaire est mis à jour
  • Des messages sont envoyés sur le bus de message lorsque les entités Document et ApplicationService sont modifiées/créées.

E5-2 : Fournir un modèle de configuration associé à un modèle de serveur

Contexte

Une fois chargés et associés à un modèle de serveur, un “modèle de configuration” (i.e. l’ensemble des dictionnaires Creole “aplatis” pour un modèle de serveur donné) devrait pouvoir être généré afin d’ouvrir des sessions d’édition de configuration.

Proposition

Étendre le service servermodel-manager afin que l’on puisse récupérer le modèle de configuration associé à un modèle de serveur. Ce modèle de configuration devra prendre en compte la chaîne de parenté du modèle de serveur.

Critères d’acceptation

  • Un message permet d’interroger et de récupérer le modèle de configuration associé à un modèle de serveur.

E5-3 : Implémenter le service “backend” qui alimentera GenConfig

Contexte

Afin de pouvoir fonctionner, GenConfig va nécessiter un backend qui sera capable de s’alimenter des modèles de configuration fournis par le service servermodel-manager pour générer sa propre base interne de travail.

Proposition

Implémenter le service backend pour GenConfig

Critères d’acceptation

  • TODO

E5-4 : Embarquer GenConfig dans un conteneur afin d’initier des sessions d’édition de valeurs de configuration

Contexte

L’application GenConfig devrait pouvoir être utilisée pour éditer les valeurs de configuration au sein de l’application Zéphir.

On devrait pouvoir créer/fermer des sessions d’édition des valeurs de configuration pour plusieurs modèles de configuration en parallèle.

Proposition

Extraire l’application GenConfig de l’environnement EOLE et l’adapter afin qu’elle puisse être utilisée dans un conteneur isolé.

Mettre en place un mécanisme afin que l’on puisse créer des sessions distinctes d’édition des valeurs de configuration pour un modèle de configuration donné.

msc {

  wordwraparcs=true,hscale=4;

  Browser,HTTPGateway,APIBridge,GenConfigManager,GenConfig,ServerManager;


  --- [ label = "L'utilisateur ouvre une nouvelle session d'édition de la configuration" ];
  Browser->HTTPGateway [ label="POST /api/v1/config.session.new <server_id>" ];
  HTTPGateway->APIBridge [ label="POST /api/v1/config.session.new <server_id>" ];
  APIBridge->GenConfigManager [ label = "v1.config.session.new <server_id>" ];
  GenConfigManager->ServerManager [ label = "v1.server.describe <server_id>" ];
  ServerManager->GenConfigManager [ label = "{ <server_id> ... }" ];
  GenConfigManager box GenConfigManager [ label = "Création d'une nouvelle session d'édition de configuration\n combinant un serveur et son modèle de configuration." ];
  GenConfigManager->APIBridge [ label = "<session_id>" ];

  APIBridge->HTTPGateway [ label = "<session_id>" ];
  HTTPGateway->Browser [ label = "<session_id>" ];

  --- [ label = "L'utilisateur accède à la session GenConfig initialisée" ];

  Browser->HTTPGateway [ label = "GET /config/<session_id>" ];
  HTTPGateway->GenConfig [ label = "GET /?sid=<session_id>" ];
  GenConfig->GenConfigManager [ label = "v1.config.session.describe <session_id>" ];
  GenConfigManager->GenConfig [ label = "{ <session_id> <server_id> <configuration_model_url> }" ];
  GenConfig->HTTPGateway [ label = "Status: 200 <html>...</html>" ];
  HTTPGateway->Browser [ label = "Status: 200 <html>...</html>" ];

  --- [ label = "L'utilisateur édite ses valeurs de configuration et sauvegarde celle ci." ];

  Browser->HTTPGateway [ label="POST /api/v1/config.session.save <session_id>" ];
  HTTPGateway->APIBridge [ label="POST /api/v1/config.session.save <session_id>" ];
  APIBridge->GenConfigManager [ label = "v1.config.session.save <session_id>" ];

  GenConfigManager->GenConfig [ label = "???" ];
  GenConfig->GenConfigManager [ label = "???" ];

  GenConfigManager box GenConfigManager [ label = "Le manager enregistre les paramètres de configuration et publie un message sur le bus WAMP pour notifier les autres services du changement." ];

  --- [ label = "L'utilisateur clôt sa session d'édition" ];

  Browser->HTTPGateway [ label="POST /api/v1/config.session.close <session_id>" ];
  HTTPGateway->APIBridge [ label="POST /api/v1/config.session.close <session_id>" ];
  APIBridge->GenConfigManager [ label = "v1.config.session.close <session_id>" ];
  GenConfigManager box GenConfigManager [ label = "Le manager clos la session d'édition." ];

}

Critères d’acceptation

  • GenConfig fonctionne comme un service Zéphir

  • On peut ouvrir/accéder à des sessions d’édition de valeurs de configuration

  • Des messages sont envoyés sur le bus de message lors des événements suivants:
    • Une session d’édition commence
    • Des valeurs de configuration sont “enregistrées”
    • Une session d’édition se termine

E5-5 : Rendre accessible une session d’édition de configuration sur la passerelle HTTP

Contexte

Les sessions d’édition des valeurs de configuration devraient être accessibles à l’utilisateur.

Proposition

Créer un point d’entrée dans la passerelle HTTP (service kong) permettant aux utilisateurs d’accéder aux différentes sessions d’édition des valeurs de configuration (GenConfig).

Critères d’acceptation

  • Les sessions d’édition des valeurs de configuration sont accessibles par les utilisateurs à travers la passerelle HTTP
  • Chaque session a une URL unique d’accès

E5-6 : Enregistrer/réutiliser les valeurs de configuration issues d’une session d’édition et les associer à un instance de serveur

Contexte

Les valeurs de configuration associées à une session d’édition doivent être enregistrées afin de pouvoir être réutilisées plus tard lors de l’application d’un modèle de configuration sur un serveur.

Ces mêmes valeurs de configuration doivent également pouvoir être réutilisées lors de l’ouverture d’une session d’édition des valeurs de configuration.

Proposition

Réagir au message émit lors de l’enregistrement des valeurs de configuration par le service GenConfig pour enregistrer l’export des valeurs et implémenter un mécanisme pour pouvoir réutiliser des valeurs de configuration pour une nouvelle session d’édition.

Critères d’acceptation

  • Les valeurs de configuration sont sauvegardées et associées à un serveur
  • On peut réutiliser les valeurs de configuration pour démarrer une session d’édition des valeurs de configuration avec un modèle de configuration

E5-7 : Calculer des paramètres sur le Serveur

Contexte

Des valeurs de configuration peuvent nécessité d’être récupérer directement sur le serveur. En pratique, cela ne va concerner qu’un nombre limité de valeur, mais il faut une sonde installé sur le serveur qui remonte les valeurs et le changement de valeur de ces variables.

Ces sondes doivent être lancé avant la mise a disposition de la configuration du serveur. Il faut donc que ces sondes s’exécute sans connaitre le contexte.

Proposition

A l’appairage la sonde devra remonter le résultat d’un nombre défini de de calcul. C’est donc une des premiers actions que devrait réalisé Salt-minion.

Salt-minion devrait également remonter tout changement dans le résultat des calculs au server-configuration.

La mise à jour des valeurs provoquera automatiquement la regénération de la configuration.

Critères d’acceptation

  • la sonde remonte les valeurs a l’appairage d’un serveur

E5-8 : Mettre à jour les configurations suite à une mise à jour d’une sonde

Contexte

Lorsqu’une sonde signal la modification d’une valeur, celle-ci lance un message pour le signaler. Le server-configuration doit réagir.

Proposition

Lorsque le server-configuration reçoit le message il devra mettre à jour la configuration et regénérer les paramètres.

Critères d’acceptation

  • un changement de valeur regénère la configuration du serveur