Qu’est ce que Vagrant ?

Vagrant est un logiciel permettant d’automatiser la création de machines virtuelles. Par défaut, Vagrant utilise Virtualbox mais il est possible de déployer les machines virtuelles sur d’autres fournisseurs comme VMWare, HyperV, KVM, AWS ou même Azure.

Vagrant fonctionne sur la plupart des systèmes d’exploitation. Pour ma part, je dispose d’une machine sous macOs. J’ai donc commencé par installer Virtualbox puis Vagrant.

Initialisation de la machine virtuelle et première connexion

Je vous conseille de créer un répertoire puis d’initialiser la machine grâce à la commande suivante: vagrant init nom_de_la_box

Pour connaître les box disponibles, il suffit d’aller sur le site de vagrant puis de cliquer sur BOXES. Dans mon cas, j’ai fait une recherche sur Centos et j’ai retenu la version bento/centos-7.2.

Boxes

La commande est donc la suivante: vagrant init bento/centos-7.2

Initialisation

La commande d’initialisation crée en fait un fichier de paramétrage Vagrantfile dans le répertoire courant. Nous le verrons juste après.

On va créer la machine virtuelle avec la commande vagrant up puis se connecter avec vagrant ssh. On est alors connecté à notre machine Linux avec le compte vagrant qui dispose des droits sudo pour administrer la machine.

Connexion ssh

Intéressant mais on peut faire mieux ! On va quitter la VM avec la commande CTRL + D Puis détruire la VM avec vagrant destroy

Paramétrage de la machine virtuelle

Pour se faire, on va modifier le fichier Vagrantfile. Par défaut, la machine est créée avec 1 core et 1024 Mo de RAM. On va lui en donner un peu plus.

Configuration

On paramètre aussi le nom de la machine (“mongo.bd”). Afin de rajouter des logiciels, on déclare un fichier de provisioning (“bootstrap.sh”).

Vagrant provisioning

Répertoire partagé

Par défaut, vagrant va partager le répertoire courant de notre machine hôte avec la machine virtuelle. On va le retrouver à l’emplacement suivant: /vagrant/ C’est une fonctionnalité très intéressante que l’on utilisera assez souvent dans l’étape suivante de provisioning.

Paramétrage du provisioning

Le fichier bootstrap.sh contient des commandes shell qui sont exécutées par l’utilisateur vagrant. Comme cet utilisateur a les droits sudo, on va pouvoir faire beaucoup de choses ;)

On peut par exemple modifier des fichiers de configuration grâce à la commande sed. Dans la commande suivante, je vais désactiver SELINUX sur ma machine virtuelle: sudo sed -i 's/SELINUX=permissive/SELINUX=disabled/g' /etc/selinux/config

On peut installer des composants, par exemple le module de réglage de l’heure: sudo yum install -q -y ntp ntpdate ntp-doc

Ou encore démarrer des services: sudo service ntpd start

Plutôt que de modifier des fichiers avec la commande sed, on peut aussi utiliser directement les fichiers présents sur notre répertoire partagé. Dans l’exemple suivant, j’ai récupéré le fichier repository de mongoDB sur le site et je l’ai placé dans mon répertoire partagé. Il ne me reste plus qu’à le copier dans le bon emplacement pour qu’il soit reconnu ensuite par la commande yum.

sudo cp /vagrant/mongodb-org-3.2.repo /etc/yum.repos.d/

L’installation de mongoDB nécessite d’ajuster plusieurs paramètres. Tout pourra se faire en automatique grâce au fichier bootstrap.

Voici mon fichier complet de provisioning: Bootstrap Mongo

Lancement de la machine

Une fois le paramétrage terminé, il suffit de relancer la machine avec la commande: vagrant up

Au bout d’une à deux minutes, la machine est opérationnelle. On s’y connecte simplement avec vagrant ssh. Le service mongod est déjà lancé: on peut donc accéder au shell en tapant simplement mongo.

Connexion Mongo

Pourquoi utiliser Vagrant ?

Une fois toutes ces opérations réalisées, on peut encore se demander à quoi sert réellement Vagrant. Il est vrai que tout ce que nous avons fait, nous aurions pu le réaliser de la même manière directement dans notre machine virtuelle.

L’intérêt principal que je vois est de pouvoir upgrader facilement notre machine. Un changement de version de Mongo ? Je modifie mon fichier bootstrap, je relance ma machine et le tour est joué.

Le deuxième intérêt est de disposer d’un véritable bac à sable. J’ai par exemple suivi une formation sur mongoDB. Les exercices nécessitaient de modifier de nombreux paramètres. Un peu pénible à détricoter pour se remettre à la fin dans une configuration standard. Avec Vagrant, pas de soucis: je détruis ma VM, je la relance et je me retrouve avec une VM toute neuve à chaque fois.

Le dernier intérêt est de pouvoir partager notre VM avec d’autres développeurs. Il suffit pour cela de s’échanger principalement les fichiers vagrantfile et bootstrap et l’on peut reconstituer à l’identique une VM à partir de 0. Un moyen simple pour cela est de les publier sur Github. On clone le projet, on lance la machine avec vagrant up et c’est terminé.

On verra dans un prochain post encore d’autres fonctionnalités proposées par Vagrant. A bientôt !