Configurer Vagrantfile pour lancer plusieurs machines
Sommaire
Vagrant est utile, très utile pour mettre en place un environnement virtuel mais il est aussi possible de lancer plusieurs environnements avec un seul fichier de configuration. Dans cet article nous allons explorer cette approche. Un tel environnement est appelé un environnement multi-machine
Même si il est possible de le faire, il est intéressant d'explorer les raisons qui puissent pousser quelqu'un à lancer plusieurs environnements avec un seul Vagrantfile.
Il existe plusieurs façons de réussir cette approche. Pour commencer, il faut noter que le Vagrantfile est d'abord basé sur un langage de programmation donc nous avons accès à des notions comme les boucles , les conditions , les variables, les listes, etc.
Vagrant.configure("2") do |configuration1|
# configuration de la machine 1
end
Vagrant.configure("2") do |configuration2|
# configuration de la machine 2
end
Vagrant.configure("2") do |configuration3|
# configuration de la machine 3
end
Vagrant.configure("2") do |config|
config.vm.define "machine1" do |configuration1|
# configuration de la machine 1
end
config.vm.define "machine2" do |configuration2|
# configuration de la machine 2
end
end
machines=[
{
:hostname => "machine1",
:ip => "192.168.100.10",
:box => "hashicorp/bionic64",
:ram => 1024,
:cpu => 1
},
{
:hostname => "machine2",
:ip => "192.168.100.11",
:box => "hashicorp/bionic64",
:ram => 2048,
:cpu => 2
}
]
Vagrant.configure(2) do |config|
machines.each do |machine|
config.vm.define machine[:hostname] do |node|
node.vm.box = machine[:box]
node.vm.hostname = machine[:hostname]
node.vm.network "private_network", ip: machine[:ip]
node.vm.provider "virtualbox" do |vb|
vb.gui = false
vb.memory = machine[:ram]
vb.cpus = machine[:cpu]
end
end
end
end
Cette approche definit une liste de machines avec leurs configurations. Dans la configuration de Vagrant, nous utilisons une boucle pour traverser chaque element de la liste et utiliser chaque configuration pour lancer une machine.
Dans ce cas, toutes les commandes qui marchent normalement dans un dossier nécessiteront la précision de la machine sur laquelle les exécuter. Par exemple, vagrant shh
deviendra vagrant ssh machine1
Peronnellement j'utilise cette approche pour