# Vagrant

Un soft fort pratique pour monter des vms rapidement.

Pour le moment je m'en sert surtout pour monter des environnements de dev sur des postes ... de dev. ça permet d'etre au plus pret de l'environnement de production lors des tests.

En gros je bootstrap le minimum et je deploie le reste avec chef.

Version de base, go:

Alors deja, installer votre logiciel pour les VM, de base c'est celui d'oracle, VirtualBox. On installer donc Virtual Box

Ensuite on installe vagrant, voir sur le site en fonction du systeme etc... je vais pas me prendre par la main, en effet qui lit ça a part moi franchement ?! même pas ma mere!

Donc ensuite, une fois tout ça installé:

cd /le/dossier/de/mon/projet
vagrant init

ça initinialise... non sans déc... mais ça creer surtout un fichier vagrantfile que vous allez pouvoir editer.

J'ai la flemme pour le moment alors je montre cash un exemple d'un cas ou je monte deux vm:

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

### Variables du fichier de configuration ###
SERVEUR_1_NAME = "Serveur_1" # nom du serveur
SERVEUR_1_IP = "192.168.0.151" # son ip parceque j'aime pas le dhcp
SERVEUR_1_HOSTNAME = 'Serveur_1.fr' #son hostname

SERVEUR_2_NAME = "Serveur_2"
SERVEUR_2_IP = "192.168.0.152"
SERVEUR_2_HOSTNAME = 'Serveur_2.fr'

BOX_URL = "generic/debian9" # la box! a savoir l'os que j'ai choisi et qui est disponible sur le site de vagrant

Vagrant.configure("2") do |config|

  config.vm.define SERVEUR_1_NAME do |unsik|
    unsik.vm.box = BOX_URL
    unsik.vm.hostname = SERVEUR_1_HOSTNAME
    unsik.vm.box_url = BOX_URL

    unsik.vm.network :public_network, ip: SERVEUR_1_IP # public parceque j'aime bien avoir ma VM sur le meme reseau que l'hote

    unsik.vm.provider :virtualbox do |v|
      v.customize ["modifyvm", :id, "--memory", 1024] # 1giga de ram
      v.customize ["modifyvm", :id, "--name", SERVEUR_1_NAME] # le nom de la vm dans l'interface virtualbox
    end
  end

  config.vm.define SERVEUR_2_NAME do |shit|
    shit.vm.box = BOX_URL
    shit.vm.hostname = SERVEUR_2_HOSTNAME
    shit.vm.box_url = BOX_URL

    shit.vm.network :public_network, ip: SERVEUR_2_IP

    shit.vm.provider :virtualbox do |v|
      v.customize ["modifyvm", :id, "--memory", 1024]
      v.customize ["modifyvm", :id, "--name", SERVEUR_2_NAME]
    end
  end

  config.vm.provision :shell, path: "bootstrap.sh" # un script bash que j'ai mis dans le même repertoire que le vagrant file
  # ce script sera eecuté apres la creation des deux VM et sur chacune d'entres elles. Si je met ces lignes dans les balises
  # config.vm.define et le end, le script ne sera executé que par la dite VM. ATTENTION a l'ordre si vous en avez plusieurs

end

Ensuite une fois votre fichier comme vous le souhaitez, vous pouvez verifier l'etat avec la commande

vagrant status

mais si vous souhaitez lancer la contruction ou lancer vos vm (meme commande)

Version je lance tout ce que contient le fichier

vagrant up

Version je lance qu'une VM

vagrant up nomdelavm

Meme fonctionnement les parametre halt(stopper vm) ou destroy(devine!)

Mais bon sinon tapez vagrant pour voir vos possibilités.

Vous pouvez faire vous meme vos box (que je n'ai pas encore exploré) et/ou précharger/gerer des boxes en local. Voir les commandes proposer en tapant:

vagrant box