Au fil des flows

23juil/140

Getting started avec Vagrant

En tant que développeur, vous débutez beaucoup de projets. Certains sans lendemain, certains que vous souhaitez mener au bout. Chacun de ces projets peut avoir des spécificités d'environnement. Parfois un serveur apache qui tourne sur votre machine, parfois une machine virtuelle pour héberger votre projet (un linux avec la chaîne de compilation qui va bien, ...).

Avez-vous entendu parler de ces outils comme Chef, Puppet ou CfEngine qui permette de reproduire un environnement à la demande ? Vous vous êtes déjà dit, je parie, comment faire pareil pour mon poste de travail ?

Vous voulez à partir d'une ligne de commande que votre environnement soit prêt pour démarrer. Vous voulez que cet environnement soit propre. Je n’entends pas 4 versions de python qui tourne dessus, 50 librairies dont certaines vous avez oublié le nom, sans un serveur Apache qui héberge aussi 2 instances de PHP. Vous avez également 3 PC que vous utilisez fréquemment, vous voulez pouvoir travailler sur chacun d'eux.

Vagrant est un outil qui vous permettra de faire ça. A l'aide d'un fichier de configuration, vous pourrez réaliser 4 choses :

  • Avoir une machine virtuelle qui s'installe en quelques minutes
  • Monter un dossier partagé lié à votre environnement de travail (dans mon cas windows)
  • Pouvoir supprimer la machine virtuelle (ça prend de la place ces bêtes-là) et la remonter à la demande
  • Que ces recettes soient sauvegardés dans votre gestionnaire de source, prêt à être exécuté sur une autre machine

Vagrant

Je vous invite à me suivre pour un premier voyage. Je travaille sur un PC utilisant Windows (j'ai mes raisons ...) et je souhaite monter un environnement pour pouvoir exécuter en toute simplicité des scripts pythons.

Philosophie

Vagrant interagit avec des machines virtuelles comme Virtual Box, VmWare, ... Depuis un script vagrant, vous pouvez exécuter des scripts shell, ou utiliser des recettes Chef ou Puppet pour automatiser complètement la construction de votre machine virtuelle.

Vue globale vagrant

Vous téléchargez un projet sur GitHub ou depuis le gestionnaire de source de votre entreprise. Vous ouvrez un terminal, allez dans un dossier contenant le fichier VagrantFile et vous exécutez la commande :

vagrant up

Et la magie se passe. Vous n'avez plus qu'à observer :

log-vagrant

Utiliser SSH sous windows

Votre machine virtuelle est montée. Vous voulez vous connecter depuis votre console PowerShell. Il faudra que vous ayez un client SSH installé.

Pour cela, il vous suffit d'installer cygwin avec Chocolatey :

cinst cygwin

A présent, vous pouvez vous connecter sur votre vm vagrant en tapant :

vagrant ssh

Il est temps d'aller faire les courses

Vous pouvez vous connecter à votre machine virtuelle. Elle est juste un peu à nu. Dans mon cas, j'ai besoin d'installer git et pip (gestionnaire de package pour python).

L'installation et la configuration de nouveaux paquets sur votre VM est appelé Provisionner.

Dans un premier temps, je vous propose d'exécuter un simple script shell lors de l'installation de la VM.
Voici une liste des outils dont j'ai besoin pour mon projet :

Outil Role
Git Récupérer et gérer les sources de mon projet
Pip Gestionnaire de paquets de python
Winpdb Debugger pour python (utile pour pouvoir debugger à distance)

Pour finir voici le script bootstrap.sh pour provisionner ma machine virtuelle.

#!/usr/bin/env bash

apt-get update
apt-get install -y git
apt-get install -y python-pip
apt-get install -y winpdb

Enregistrez-le avec le nom bootstrap.sh dans le même dossier que votre VagrantFile. Vous avez votre premier fichier de recette. Ce fichier permet d'installer des paquets. Si vous souhaitez installer vos paquets avec une configuration particulière, je vous recommande de vous diriger vers Puppet ou Chef.

Pour que les provisions soient connues, vous devez référencer votre fichier dans votre VagrantFile. Ajoutez la ligne suivante :

config.vm.provision :shell, path: "bootstrap.sh"

Dans votre terminal, exécutez la commande suivante :

vagrant reload --provision

Si on veut debugger à distance, ...

Il va falloir déclarer un réseau pour pouvoir se connecter sur la machine virtuelle. Vous avez 2 possibilités, déclarer que la machine virtuelle s'enregistrera sur un réseau publique ou au contraire, n'autoriser la connexion que depuis votre machine.

Dans mon cas, j'ai besoin d'un accès local seulement. Pour le déclarer, vous devez éditer VagrantFile.
Ajoutez ou décommenter la ligne suivante :

# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.0.2"

Il vous suffit de relancer votre machine virtuelle avec la commande.

vagrant reload

Pour conclure

Au travers de cet article, vous venez de vivre un avant-goût de devops.

Vagrant vous aide à rationaliser votre poste de travail. Un nouveau développeur arrive dans votre équipe. En quelques minutes, il a tous les outils pour travailler.

Oui, un projet informatique débouche sur la création d'un produit (livrable ou artefact selon votre méthodologie). Plutôt que de livrer des documents plus ou moins complète et soumise à interprétation, livrer des recettes exécutables par une machine "nue" pour faire fonctionner votre produit.

A tout moment, vous pouvez détruire et remonter votre environnement. Le mouvement devops vous engage à aller bien plus loin et d'appliquer l'exemple que vous avez suivi au-dessus à tout votre parc informatique. Une machine est vieillissante, en quelques secondes, vous pouvez en monter une nouvelle. Ça laisse rêveur ?

Posted by Fabien Arcellier

Remplis sous: Non classé Laisser un commentaire
Commentaires (0) Trackbacks (0)

Aucun commentaire pour l'instant


Leave a comment

Aucun trackbacks pour l'instant