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.
La commande est donc la suivante :
vagrant init bento/centos-7.2
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.
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.
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 »).
Répertoire partagé
Par défaut, vagrant va partager le répertoire courant de notre machine hôte avec la machine virtuelle. Ce répertoire va se retrouver à l’emplacement suivant :
/vagrant/
Cette fonctionnalité est très intéressante et souvent utilisée pour l’étape suivante : le 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 :
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
.
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 aurait pu être réalisé de la même manière dans notre machine virtuelle directement. Vagrant offre cependant certains avantages notables.
1. Upgrader facilement votre machine
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é.
2. Disposer d’un véritable bac à sable
Le deuxième intérêt est de disposer d’un véritable bac à sable. Exemple : j’ai suivi une formation sur mongoDB et lLes exercices nécessitaient de modifier de nombreux paramètres. Ce qui était 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.
3. Pouvoir partager votre VM
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, puis on lance la machine avec vagrant up
et c’est terminé.
Nous verrons dans un prochain article encore d’autres fonctionnalités proposées par Vagrant. A bientôt !
Votre adresse de messagerie est uniquement utilisée par Business & Decision, responsable de traitement, aux fins de traitement de votre demande et d’envoi de toute communication de Business & Decision en relation avec votre demande uniquement. En savoir plus sur la gestion de vos données et vos droits.