Vagrant
| Fiche express | |
|---|---|
| Type | Gestion d'environnements de développement virtualisés |
| Écrit en | Ruby |
| Providers | VirtualBox, VMware, libvirt, Hyper-V... |
| Voir aussi | Ansible · Puppet · Foreman |
Vagrant est un outil qui automatise la création et la configuration de machines
virtuelles de développement à partir d'un fichier déclaratif unique (Vagrantfile).
Il permet de lancer rapidement un environnement reproductible (OS, réseau, montages de dossiers,
provisioning) identique pour toute une équipe, puis de le détruire et recréer à volonté.
Contrairement aux outils de conteneurisation (Docker et assimilés), qui virtualisent la couche
applicative, Vagrant pilote la couche machine virtuelle complète, en déléguant la
configuration applicative à un provisioner externe.
Principe
- Un
Vagrantfiledécrit la ou les VM à créer : image de base (box), ressources,
réseau, dossiers partagés.
- Un « provider » prend en charge la virtualisation elle-même (VirtualBox par défaut, VMware,
libvirt/KVM, ou des providers cloud).
- Un « provisioner » optionnel configure automatiquement la VM une fois démarrée : script shell,
Ansible, Puppet, Chef...
Exemple minimal
# Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "debian/bookworm64"
config.vm.network "private_network", ip: "192.0.2.10"
config.vm.provision "shell", path: "bootstrap.sh"
end
vagrant up # crée et démarre la VM
vagrant ssh # ouvre une session dans la VM
vagrant provision # rejoue le provisioning
vagrant destroy # détruit la VM
Cas d'usage : bootstrap d'un serveur de test Foreman
Exemple de script shell de provisioning pour préparer une VM de test Foreman + Puppet (script d'origine généricisé : IP, nom d'hôte et attribution personnelle remplacés par des valeurs d'exemple ; il cible CentOS 6/Foreman 1.7 et devrait être modernisé avant réutilisation) :
#!/bin/sh
# Script de bootstrap exécuté sur la VM pour installer un serveur Foreman
if ps aux | grep "/usr/share/foreman" | grep -v grep > /dev/null 2>&1; then
echo "Foreman semble déjà installé. Sortie."
else
echo "192.0.2.5 foreman.exemple.local foreman" | sudo tee --append /etc/hosts > /dev/null 2>&1
sudo yum update -y
sudo rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
sudo yum -y install epel-release http://yum.theforeman.org/releases/latest/el6/x86_64/foreman-release.rpm
sudo yum -y install foreman-installer
sudo foreman-installer
# Premier run de l'agent Puppet : envoie le premier rapport à Foreman,
# ce qui crée automatiquement l'hôte dans sa base
sudo puppet agent --test --waitforcert=60
sudo puppet module install -i /etc/puppet/environments/production/modules puppetlabs-ntp
sudo puppet module install -i /etc/puppet/environments/production/modules puppetlabs-git
sudo puppet module install -i /etc/puppet/environments/production/modules puppetlabs-docker
fi
Positionnement
Vagrant est surtout utilisé en développement/test pour reproduire localement un environnement proche de la production, souvent avec le même provisioner (Ansible, Puppet...) que celui utilisé en production — ce qui permet de tester une recette de configuration avant de l'appliquer sur de vrais serveurs. Pour du provisioning de serveurs physiques ou de production, voir plutôt Foreman, Cobbler ou Preseed/Kickstart.
Voir aussi
- Ansible / Puppet — provisioners couramment utilisés avec Vagrant
- Foreman — gestion du cycle de vie pour des environnements de production
- Integration continue — Vagrant peut fournir l'environnement éphémère d'un pipeline de test