Lancement du Projet ImageValidator
Le second billet sur mon projet de créer avec vous, un outil pour valider les images de machines virtuelles (VM) avant de les déployer sur un cloud. C’est un projet passionnant qui va nous permettre d’utiliser des bibliothèques spécialisées sur la manipulation des images de VM entre autre.
Dans ce billet, je vous explique comment j’ai posé les bases du projet, avec son hébergement sur GitHub. Je vous explique aussi comment j’ai construit la base du code en faisant des choix techniques.
Choix des librairies Python
Pour simplifier l’écriture du code sur la gestion des arguments et options de la
CLI, j’ai fait le choix d’utiliser Click
. Click est une bibliothèque Python
qui permet de créer des applications en ligne de commande de manière simplifiée.
Cette bibliothèque permet de définir des commandes, options, et arguments, tout
en gérant les erreurs de saisie et en affichant automatiquement l’aide. Voici un
exemple de base pour illustrer l’utilisation de Click.
Pour la gestion des logs, je fais appel pour le moment au module logging
.
Hébergement du projet sur GitHub
La première étape a consisté à créer un dépôt GitHub pour centraliser tout ce qui touche au projet. Un bon dépôt GitHub permet non seulement de gérer le code, mais aussi de collaborer, documenter et organiser les tâches à accomplir.
1. Création du dépôt
J’ai choisi le nom ImageValidator et ajouté une description simple pour
clarifier son objectif (validation de la conformité des images VM pour le
cloud).-J’ai également renseigné la section About
et ajouté des mots-clés
comme Python
, cloud
, et libguestfs
pour augmenter la visibilité du projet.
2. Documentation initiale avec le README.md
Le README.md est l’un des fichiers les plus importants pour tout projet open source. Voici ce que j’ai inclus dans ce fichier pour bien démarrer :
- Introduction au projet : J’explique pourquoi l’outil est utile et quels problèmes il résout.
- Prérequis : Une liste des dépendances comme Python, libguestfs, et pyyaml, pour que chaque contributeur puisse rapidement préparer son environnement.
- Installation : Des instructions pour cloner le dépôt et installer les dépendances.
- Contributions : Des instructions pour contribuer au projet.
- Licence : J’ai inclus la licence MIT pour permettre à tout le monde de contribuer au projet.
3. Création de la structure du projet
J’ai commencé par créer la structure de répertoires suivante :
- CHANGELOG.md
- LICENSE
- README.md
- config.yaml
- launch_image_validator.py
- renovate.json
- requirements.txt
- setup.py
Répertoiresrc/
Répertoireimagevalidator
- init .py
- config.py
- imagevm.py
- log_config.py
- main.py
Comme vous le remarquez, j’utilise direnv pour
gérer l’environnement virtuel Python. Voici le contenu du fichier .envrc
:
Un petit coup de :
Et j’ai mon environnement Python prêt à l’emploi.
Pour installer les librairies nécessaires au projet, j’ai utilisé la commande suivante :
Pour installer guestfs
, j’ai utilisé la commande suivante en installant au
préalable KVM sur la machine :
J’ai créé ensuite le fichier requirements.txt avec la commande suivante :
J’ai vérifié le contenu du fichier requirements.txt
auquel j’ai ajouté la
dernière version de flake8
pour le Lint du code Python (encore un sujet à
détailler) :
Ensuite, j’ai créé le fichier src/main.py
qui contient le code de base du
script. J’ai également créé le fichier src/config.py
qui contient le
chargement du fichier de configuration de l’application et log_config.py
qui
contient la mise en place les logs.
Le fichier de configuration config.yaml
est un fichier YAML
qui contient les
informations nécessaires pour valider les images VM. Voici un exemple de fichier
de configuration (non validé) :
J’ai créé aussi à la racine du projet le fichier setup.py
qui contient
les instructions pour installer le projet.
Ce fichier est utilisé pour installer localement le projet avec pip install -e.
et packager le projet avec python setup.py sdist bdist_wheel
. Enfin, j’ai
créé le fichier .gitignore
qui contient les fichiers et dossiers que je ne
veux pas inclure dans le projet.
4. Mise en place du pipeline CI/CD avec GitHub Actions
Pour garder le code propre et robuste, j’ai configuré un pipeline CI/CD avec GitHub Actions. Cela permet d’automatiser pour le moment la qualité du code à chaque push. Voici comment je l’ai configuré :
J’ai activé l’application Renovate pour automatiser la mise à jour des dépendances. À chaque nouvelle version d’une des dépendances Renovate crée une pull request pour mettre à jour le projet.
5. Création des issues pour organiser les étapes
Les issues sont essentielles pour structurer le travail dès le début. Elles permettent de diviser le projet en tâches claires et d’avoir une vue d’ensemble sur les étapes à venir. Voici des idées d’issues que je pourrais créer pour lancer le projet :
- Installer et configurer guestfs : Documenter l’installation de cette bibliothèque essentielle pour manipuler les disques de VM avec les étapes pour faciliter la prise en main.
- Chargement d’une image avec libguestfs : Cette première étape sera le cœur de l’application. Pour optimiser le fonctionnement, nous créerons une classe qui se chargera lors de l’initialisation de l’application de charger l’image qui sera saisi dans la ligne de commande. À la sortie de l’application, il faudra fermer cette image correctement.
- Rapports de conformité : Il est prévu de générer un rapport de conformité pour chaque image analysée.
6. Création d’un fil de discussion
Pour discuter du projet, j’ai aussi activé le fil de discussion dans ce projet. Nous pouvons, par exemple parler des objectifs principaux du projet ou me proposer de nouvelles fonctionnalités. Sentez-vous libre de le faire.
Vous voulez contribuer ?
Si vous souhaitez contribuer au projet, il suffit de cloner le projet sur votre machine et de suivre les étapes décrites dans le fichier README.md.
Je suis ouvert à toutes les propositions et remarques. Il suffit de se rendre sur le fil de discussions du projet ↗.
Conclusion
Cette première phase de création du projet ImageValidator est essentielle pour poser des bases solides. En créant un dépôt bien structuré, en organisant les issues et en mettant en place une documentation, je pense avoir préparé le terrain pour que le projet puisse grandir et accueillir des contributeurs.