---
title: Howto Vagrant
---

* Documentation : <https://www.vagrantup.com/docs/>

[Vagrant](https://www.vagrantup.com) est un logiciel qui permet de configurer des environnements de développement légers, portables et reproductibles.

À travers son fichier de configuration nommé **Vagrantfile**, il permet d'orchestrer la mise en place d'environnement virtuel à base de VM ou de conteneur.

## Installation

Debian Stretch propose Vagrant 1.9.1, pour l'installer (ainsi que le plugin libvirt) :

~~~
apt install vagrant vagrant-libvirt
~~~

Des paquets Debian officiels (maintenu par Hashicorp) sont aussi disponibles dans des versions plus récentes mais sans répository : <https://www.vagrantup.com/downloads.html>

## Providers

Vagrant permet de lancer et configurer des environnements basés sur VirtualBox, Libvirt, VMware, Docker, Amazon EC2 et plusieurs autres.

## Commandes de base

1. Lancer l'environnement:

~~~
vagrant up
~~~

2. Provisionner l'environnement:

~~~
vagrant provision
~~~

3. Stopper l'exécution de l'environnement:

~~~
vagrant halt
~~~

4. Supprimer l'environnement:

~~~
vagrant destroy
~~~

5. Accéder à la machine virtuelle par SSH

~~~
vagrant ssh
~~~

## Vagrantfile

Le Vagrantfile un fichier en Ruby qui décrit le type de machine à démarrer, leurs spécifications et leur configuration initiale (provision).

Ce fichier est unique à un projet et doit être situé à la racine de ce dernier.

Exemple:

~~~{.ruby}
# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  #Image de base de la machine virtuelle
  config.vm.box = "debian/jessie64"

  #Désactivation de la synchronisation des fichiers à la racine du projet. (activé par défaut)
  config.vm.synced_folder "./", "/vagrant", disabled: true

  #Spécification du provider et caractéristiques des VM.
  config.vm.provider :virtualbox do |v|
    v.memory = 1024
    v.cpus = 2
    v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    v.customize ["modifyvm", :id, "--ioapic", "on"]
  end

  #Définition de la machine virtuelle qui sera lancée.
  config.vm.define :default do |default|
    default.vm.hostname = "default"
    default.vm.network :private_network, ip: "192.168.33.33"
    default.vm.provision :ansible do |ansible|
          ansible.limit = "default"
          ansible.playbook = "provisioning/vagrant.yml"
          ansible.raw_arguments = ["-b"]
    end
  end

  #Configuration permettant de distribuer l'image dans le Vagrant Atlas
  config.push.define "atlas" do |push|
    push.app = "evolix/evolinux"
    push.vcs = false
  end

end
~~~
