Conception d'un système d'information pour gérer des configurations Enos

(ou : "comment j'ai appris à ne plus m'en faire et à aimer générer des documents Yaml" [ref]).

I- Contexte

Enos est un outil permettant de déployer des infrastructures de Cloud Computing à partir d'un fichier Yaml.

Dans ce projet, nous vous demandons de développer un système d'information qui permet la gestion de configurations Enos.

Il devra permettre à l'utilisateur de créer, modifier, supprimer et eventuellement partager des configurations Enos.

En ce qui concerne les configurations Enos, on peut les considérer comme un document Yaml. Un exemple complet ressemble à cela:

Une grande partie de la configuration est immutable (ce qui est entre les lignes 35 à 66 ne change pas), tandis qu'une légère partie est mutable (ce qui est entre les lignes 5 et 33 change souvent) en fonction de la taille de l'infrastructure à déployer.

Dans l'exemple ci-dessus, nous déclarons une infrastructure de Cloud Computing qui contient 4 ordinateurs (computer-1, computer-2, computer-3, computer-4). Nous déclarons que computer-1 aura un rôle de contrôleur (control), que computer-2 pilotera le réseau (network) et que computer-3 et computer-4 serviront de noeuds de calcul (compute). Nous spécifions pour chacun des noeuds un utilisateur à utiliser pour s'y connecter.

Enfin nous déclarons une configuration réseau : celle-ci est composée de deux réseaux (11.8.0.* et 11.8.1.*). Pour chaque réseau, nous déclarons les paramètres suivants : cidr, start, end, gateway, dns.

La structure de la partie mutable est toujours déclarée de la manière suivante:

II- Objectif

Le système que vous allez développer devra permettre à l'utilisateur de configurer la partie mutable d'une configuration Enos : celui-ci pourra spécifier les ressources qu'il veut configurer, ainsi que les paramètres réseau de son infrastructure. Au final, votre système devra générer un fichier Yaml qui ressemble à celui présenté au début du présent document.

III- Cahier des charges

Le cahier des charges est relativement simple. Il s'agit de pouvoir créer des nouvelles configurations en demandant à l'utilisateur de fournir la partie mutable de la configuration et de sauvegarder ce qu'il a spécifié. L'utilisateur pourra ensuite télécharger la configuration qui contiendra alors la partie mutable (qu'il a spécifiée), ainsi que la partie immutable (qui aura été ajoutée en se basant sur une template), retrouvant ainsi le fichier yaml nécessaire au démarrage de l'outil Enos.

Nous vous conseillons d'organiser le travail de la manière suivante:

  1. Gestion de la collection de configurations (creation d'une nouvelle configuration, lister l'ensemble des configurations enregistrées, édition d'une configuration existante et enfin téléchargement d'une configuration au format yaml).
  2. Edition avancée d'une configuration - il s'agira ici de fournir les abstractions graphiques permettant de guider l'utilisateur dans les modifications (correcteur syntaxique en javascript afin de remonter une erreur à l'utilisateur lui empechant de valider les modifications)

De manière générale:

  • Les points suivants seront attendus: facilité de création d'une configuration en utilisant Flask + HTML + CSS
  • Les points suivants seront appréciés: utilisation d'un plugin CSS, utilisation d'un plugin Javascript, vérification de la syntaxe de la configuration, code dynamique (Ajax), ajout facilité d'ordinateurs et de rôles
  • Les points suivants sont en bonus, et seront très fortement appréciés: drag and drop (exemple, un exemple en angularJS), composition de la configuration de manière très graphique ( exemple), utilisation d'un framework Javascript MVC client-side (React, AngularJS )

IV- Contraintes

  • L'application devra se baser sur le framework Flask
  • L'application devra pouvoir générer une configuration sous forme d'un document Yaml valide
  • L'application devra mettre en oeuvre ce qui a été montré en cours, à savoir:
    • définitions de fonctions générant des vues
    • créations de formulaires
    • utilisation des templates
    • stockage de données dans une base de données
    • Utilisation d'un framework CSS et utilisation de Javascript
  • Un accent devra être mis sur l'ergonomie de l'application

V- Techniques avancées

  • Relations OneToOne, OneToMany, ManyToMany Documentation
  • VI- Quelques pistes ergonomiques

    A- Intégrer une vue arborescente dans une page web

    B- Intégrer un éditeur de code source dans une page web

    C- Jolis thèmes pour Bootstrap