Comment approvisionner vos environnements avec vagrant #DevOpsRoadMap
Tags: devops, vagrant, ansible, python
Published: 2021-10-10 17:11:58

#***Qu’est-ce que Vagrant ? et à en quoi il peut vous servir ?***

Vagrant est un outil permettant de créer et de gérer des environnements de machines virtuelles dans un seul workflow. Il réduit considérablement le temps de configuration de l'environnement de développement.

Dans ce tutoriel vagrant, je vais vous apprendre à configurer Vagrant sur votre ordinateur afin de créer et gérer des machines virtuelles pour votre environnement de développement.
J’utilise vagrant depuis plus de 5 ans maintenant et je suis un grand fan. Chaque fois que je souhaite tester un outil ou technologie lié au DevOps, j’utilise Vagrant car il rend très facile l’approvisionnement d’un environnement de test.

## Prérequis et Installation de vagrant
<p>Vagrant peut utiliser de nombreux providers de machines virtuelles tels que VirtualBox , VMware et Docker, mais à mon avis VirtualBox est le plus simple à utiliser et il est également l'option par défaut dans Vagrant.</p>

Notre première étape consiste à installer VirtualBox, vous pouvez télécharger et installer la dernière version pour votre système d'exploitation à partir du site officiel.

Pour cet article nous allons utiliser la version 6.1.26 de VirtualBox en suivant ce lien https://www.virtualbox.org/wiki/Downloads.

Une fois ce prérequis installé, nous pouvons installer Vagrant en téléchargeant également la dernière version sur le site officiel https://www.vagrantup.com/downloads et puis l’installer sur votre ordinateur. Dans notre cas nous allons utiliser la version 2.2.18 de Vagrant


## Création d’un environnement de travail


### Introduction à Vagrantfile

<p>La fonction principale du Vagrantfile est de décrire le type des machines requis par projet, et comment configurer et provisionner ces machines.
Vagrant est censé s'exécuter avec un seul fichier Vagrantfile par projet, et les fichiers Vagrant sont portables sur toutes les plates-formes prises en charge par Vagrant.</p>

**Exemple d’un Vagrantfile**
```
# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.network :private_network, ip: "192.168.50.1"
  config.vm.provider :virtualbox do |vb|
  end
end
```

**config.vm.box:** permet de préciser le nom de la box vagrant à utiliser. Vous pouvez retrouver l’ensemble des boxes héberger par vagrant ici https://app.vagrantup.com/boxes/search

**config.vm.network:** permet d’attribuer une adresse IP à la future VM qui sera créé.

**config.vm.provider:** permet de préciser le type de provider que nous allons utiliser. Dans notre cas c’est VirtualBox.


### Comment créer sa première VM avec Vagrant
Nous allons dans le répertoire de travail de votre choix, créez un fichier nommé ‘Vagrantfile’ et y ajouter ce code

```
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.network :private_network, ip: "192.168.50.1"
  config.vm.provider :virtualbox do |vb|
  end
end
```

Ensuite, démarrez la machine virtuelle Vagrant à l'aide de la commande suivante : ‘vagrant up’

### Comment utiliser Provisionner de Vagrant ?

<p>La meilleure chose à propos de Vagrant est que vous pouvez utiliser le Provisionner qui va lancer la procédure d’installation et configuration automatique de vos VMs avec un script shell ou avec Ansible ou tout autre outil de déploiement automatisé.</p>

<p>Dans notre exemple, nous allons utiliser un script Shell pour créer des répertoires applicatifs et pour aller plus loin, à la fin de ce tutoriel vous y trouvez un fichier Vagrantfile beaucoup plus complet.</p>

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

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.provider :virtualbox do |vb|
    vb.memory = 1024
    vb.cpus = 1
  end

  config.vm.define "master" do |master|
      master.vm.hostname = "master"
      master.vm.network "private_network", ip: "192.168.50.10"
      master.vm.synced_folder "app/", "/home/vagrant/app"
      master.vm.provision "shell", inline: <<-SHELL
        mkdir /home/vagrant/app/www
        mkdir /home/vagrant/app/www/images
      SHELL
  end
end
```

## Les commandes vagrant les utilisées

1. Démarrer tous VM du Vagrantfile
`vagrant up`
2. Démarrer seulement une VM
`vagrant up master`
3. Démarrer et réinstaller tous les VM
`vagrant up –provision`
4. Démarrer et réinstaller seulement la VM master (ça peut être une autre vm)
`vagrant up master --provision`
5. Se connecter à une VM via SSH
`vagrant ssh master`
6. Arrêter tous les all VM
`vagrant halt`
5. Détruire tous les VM
`vagrant destroy`
8. Arrêter seulement la VM master
`vagrant halt master`
9. Détruire la VM master
`vagrant destroy master`
10. Afficher le status des VMs vagrant
`vagrant status`