Premiers pas avec Vagrant

Tut's Linux juin 18, 2020

Tout nouveau sur Vagrant, je vous propose ma documentation vous permettant de prendre en main rapidement l'outil et comprendre son utilité.

Volontairement, les commandes et les Vagrantfile sont simplistes, il existe plusieurs façons de faire et celle que je vous propose n'est sans doute pas la meilleure. Des optimisations sont à prévoir.


Intérêt

A force de faire et refaire des machines virtuelles pour tout type de tests, vous allez créer des modèles, puis les cloner, recommencer d'autres modèles, d'autres VM... Bref une sacrée organisation à tenir.

Vagrant arrive ici pour vous permettre de générer des VM "à la volée", sans persistence, avec une configuration de machine que vous spécifierez dans un fichier précis. Le but étant de produire des environnements éphémères - les VM créées peuvent être détruites suite à vos tests.
C'est un outil souvent utilisé dans le monde devops, notamment pour les développeurs, leur permettant d'avoir rapidement quelques VM pour tester leurs produits.
En tant qu'adminsys, cet outil est particulièrement intéressant pour tester des mises à jour, des outils, ou encore "se faire la main" très rapidement sur une version précise d'un OS.


Pré-requis

Installation de libvirt (et dépendances), VirtualBox 6.0 (pas de version supérieure pour le moment, tant que Vagrant ne gère pas les versions futures) et lib nécessaires.
Nous ajouterons l'utilisateur local de la machine au groupe "libvirt" pour avoir les droits de création de VM.

apt update && apt upgrade

touch /etc/apt/sources.list.d/virtualbox.list && echo "deb [arch=amd64] https://download.virtualbox.org/virtualbox/debian buster contrib" > /etc/apt/sources.list.d/virtualbox.list

wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | apt-key add -
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | apt-key add -

apt update && apt install gcc make perl linux-headers-amd64 qemu-kvm libvirt-clients libvirt-daemon-system virtualbox-6.0

usermod -aG libvirt <username>

Environnement de test Vagrant

Avant de se lancer dans la génération de machines virtuelles avec Vagrant, nous allons générer un premier environnement de tests, dans le répertoire local de l'utilisateur, dans un dossier que je nommerai "Vagrants".
De plus, j'utiliserai pour cet exemple uniquement VirtualBox comme hôte de machines virtuelles.

mkdir ~/Vagrants
touch ~/Vagrants/Vagrantfile

Création VM Debian 10 pour VirtualBox

Par défaut, la première carte réseau générée est de type NAT, pour que Vagrant puisse communiquer avec l'hôte (vous). La ligne "config.vm.post_up_message" spécifiera un message personnalisé une fois la VM construite et fonctionnelle/démarrée.

Editons le fichier "Vagrantfile" (pas d'extension de fichier) :

# -*- mode: ruby -*-
# vi: set ft=ruby :

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'virtualbox'

Vagrant.configure("2") do |config|
  config.vm.define "deb10-test-vagrant" do |config|
  config.vm.hostname = "deb10-test-vagrant"
  config.vm.box = "debian/buster64"
  config.vm.post_up_message = "VM deb10-test-vagrant Ok"
  end
end

Ce "Vagrantfile" est vraiment le plus simple possible : génération d'une VM Debian 10, rien de plus !

Pour avoir une seconde carte réseau dans la VM et la connecter dans le réseau privé hôte VirtualBox (permet la communication entre les VM et l'hôte), ajoutez cette ligne juste après le "config.vm.define..." :

  config.vm.network "private_network", type: "dhcp"

Création de 3 VM Debian 10 (configuration similaire)

Pour créer plusieurs VM avec un seul Vagrantfile, rien de plus simple :

# -*- mode: ruby -*-
# vi: set ft=ruby :

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'virtualbox'

Vagrant.configure("2") do |config|
  config.vm.define "deb10-test-vagrant1" do |config|
  config.vm.hostname = "deb10-test-vagrant1"
  config.vm.box = "debian/buster64"
  config.vm.post_up_message = "VM 1 Ok"
  end

  config.vm.define "deb10-test-vagrant2" do |config|
  config.vm.hostname = "deb10-test-vagrant2"
  config.vm.box = "debian/buster64"
  config.vm.post_up_message = "VM 2 Ok"
  end

  config.vm.define "deb10-test-vagrant3" do |config|
  config.vm.hostname = "deb10-test-vagrant3"
  config.vm.box = "debian/buster64"
  config.vm.post_up_message = "VM 3 Ok"
  end
end

Copiez le groupe de bloc correspondant en changeant le nom des machines !


Lignes de commande habituelles

Ajouter une box (modèle de VM)

vagrant box add distrib/version
# e.q. "vagrant box add debian/buster64"

Lister les box (modèle de VM)

vagrant box list

Liste de box usuelles

vagrant box add debian/buster64
vagrant box add ubuntu/bionic64
vagrant box add centos/7

Lors du téléchargement, Vagrant vous demandera quelle image récupérer en fonction du provider (libvirt, virtualbox, VMware, Hyper-V).

Générer les VM

vagrant up

Se connecter dans une VM via Vagrant

vagrant ssh <nom-vm.define>

Eteindre gentiment (gracefull) toutes les VM/le projet

vagrant halt

Détruire toutes les VM/le projet

vagrant destroy

L'article sera modifié dans le temps pour avoir la meilleure base possible. N'hésitez pas à nous faire part de vos commentaires pour que nous puissions prendre en compte vos avis/critiques !

Mots clés

Julien HOMMET

Bercé par l'informatique depuis mon plus jeune âge, je transforme ma passion en expertise.