# -*- mode: ruby -*-
# vi: set ft=ruby :
RAM = 1024
CPU = 1
Private_IP_LB = "192.168.56.140"
Private_IP_WEB1 = "192.168.56.141"
Private_IP_WEB2 = "192.168.56.142"
Vagrant.configure("2") do |config|
#Configure Load-Balancer VM
config.vm.define "lb", primary: true do |lb|
lb.vm.box = "debian/bullseye64"
lb.vm.hostname = "LB"
lb.vm.provider "virtualbox" do |v|
v.name = "LB"
v.cpus = CPU
v.memory = RAM
lb.vm.network "private_network", ip: Private_IP_LB
lb.vm.provision "shell",
inline: "apt update && apt install -y curl && curl -Ls https://raw.githubusercontent.com/Lucroz94/terminal/main/server_utils.sh | bash -s -- --verbose --motd --all-users"
end
end
#Configure first web-server VM
config.vm.define "web1" do |web1|
web1.vm.box = "debian/bullseye64"
web1.vm.hostname = "WEB1"
web1.vm.provider "virtualbox" do |v|
v.name = "WEB1"
v.cpus = CPU
v.memory = RAM
web1.vm.network "private_network", ip: Private_IP_WEB1
web1.vm.provision "shell",
inline: "apt update && apt install -y curl && curl -Ls https://raw.githubusercontent.com/Lucroz94/terminal/main/server_utils.sh | bash -s -- --verbose --motd --all-users"
end
end
#Configure second web-server VM
config.vm.define "web2" do |web2|
web2.vm.box = "debian/bullseye64"
web2.vm.hostname = "WEB2"
web2.vm.provider "virtualbox" do |v|
v.name = "WEB2"
v.cpus = CPU
v.memory = RAM
web2.vm.network "private_network", ip: Private_IP_WEB2
web2.vm.provision "shell",
inline: "apt update && apt install -y curl && curl -Ls https://raw.githubusercontent.com/Lucroz94/terminal/main/server_utils.sh | bash -s -- --verbose --motd --all-users"
end
end
end
N'oubliez pas que l'indentation est très importante !
Alors, nous avons ici rajouté pas mal d'éléments.
Tout d'abord, nous avons rajouté la mention vm.network ainsi que l'IP fixe de la machine, variabilisé. Avec l'option private_network, nous déployons cette machine dans la plage IP prévue par le provider (ici VirtualBox). Avec un argument différent, nous pourrions rendre accessible depuis le réseau LAN de la machine hôte cette VM.
Vous pouvez aussi très bien laisser le type en DHCP, je vous laisse consulter la documentation pour cela.
Private_IP_WEB2 = "192.168.56.142"
web2.vm.network "private_network", ip: Private_IP_WEB2
Nous avons aussi l'argument
"vm.provision" "shell",
inline "la commande a exécuté"
Celui-ci permet de dire à Vagrant de lancer une commande Bash une fois la création de la VM terminer afin d'exécuter du code dedans.
Ici, il est question d'un script Bash que j'ai modifié pour mes besoins afin d'installer des utilitaires que j'apprécie sur mes machines, disponible ici
Nous avons aussi l'utilisation d'un plugin, nommé Hostsupdater à installer au préalable (pour celui-ci, cadeau, car il n'est plus maintenu et un bug empêche l'installation depuis Vagrant sans un petit workaround : lien)
Ce plugin, permet, parmi pleins d'autres options, de lire et d'écrire dans le fichier host de la machine hôte et invitée afin, une fois sa création réalisée, d'appliquer un hostname précis dans la machine invitée afin de faciliter les translations DNS.
L'argument est :
v.name = "WEB2"
Et comme vous pouvez le constater, il n'y a pas de tâches d'installation d'un serveur Web, car ceci nécessite de fouiner dans la documentation afin d'ajouter les arguments supplémentaires, et je vous laisse ce petit plaisir !
Avec ces quelques éléments d'applications concrets, vous pouvez vous donner une première idée de ce qu'est Vagrant, son intérêt et ses possibilités.