2Close
flankerOn the 2019-01-28 at 07:13am
(Pour Redangel)
En gros, Vagrant est un gros script Ruby pour :
- télécharger une machine virtuelle préinstallées (tu peux retrouver à peu près n'importe quel OS, parfois avec d'autres outils qu'une simple installation de base),
- créer une nouvelle VM,
- la personnaliser (pour ajouter un disque, une interface réseau, un script de post install),
- la démarrer avec un partage de fichiers avec la machine hôte fonctionnel,
- exécuter des commandes dedans (un compte ssh qui est sudoer est configuré),
- la détruire.

Le choix de la VM de base et ses modifications (comme le script de post install) sont enregistrées dans un fichier (Vagrantfile).

Avec les commandes suivantes :
- je crée un fichier de description minimal (choix de la VM sur laquelle je me base, puis je lui demande d'exécuter un script local)
- je crée la VM et la démarre, puis exécute le script à la fin du boot avec Vagrant up, mais en stockant le code de retour du script
- je la détruis de façon définitive

cat << EOF > Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "xenial64"
  config.vm.provision "shell", path: "script.sh"
end
EOF
X=`vagrant up`
vagrant destroy --force

Cette VM pourrait également stocker des choses sur ma machine hôte, bien sûr.
Du coup, c'est pratique :
- pour faire des tests dans un environnement vierge et parfaitement maîtrisé,
- compiler des logiciels sur un OS différent de la machine hôte.

En prime, ça peut utiliser n'importe quel type de virtualisation (virtualbox, VMware, etc.). De plus, dans un seul fichier, tu peux définir plusieurs VM qui définissent un réseau interne.

Ça n'a rien de magique (c'est du bon gros script Ruby qui masque toutes les opérations, dès qu'il y a un problème de config, tu te retrouves avec des stacktrace Ruby bien moches).
Mais en pratique, on s'en fout un peu : ça marche et ça rend bien service.