Je dois exécuter plusieurs boîtes avec Vagrant.
Y-a-t-il un moyen de faire ça?
Celles-ci ne sont en aucun cas liées les unes aux autres, elles peuvent être considérées comme des environnements différents utilisant pour le test, il semble donc que la configuration multi-machine n’a rien à voir avec cela.
Vous pouvez certainement exécuter plusieurs boîtes Vagrant simultanément, à condition que leur configuration ne se heurte pas les unes les autres de manière radicale, par exemple. mapper les mêmes ports réseau sur l'hôte ou utiliser les mêmes noms/ID de boîte dans le même fournisseur. Avoir plusieurs boîtes exécutées manuellement sur un fournisseur, disons plusieurs boîtes sur VirtualBox, ou les avoir enregistrées et démarrées par Vagrant ne présente aucune différence. Le résultat est le même, Vagrant simplifie simplement le processus.
Vous pouvez soit utiliser ce que vous appelez environnement multi-machine pour gérer ces zones ensemble dans un projet/Vagrantfile. Ils ne doivent pas nécessairement être connectés, la facilité de gestion peut être la seule raison, par exemple. si vous avez besoin de les démarrer en même temps.
Ou vous pouvez utiliser des projets/Vagrantfiles distincts et gérer les machines à partir de leurs répertoires respectifs, complètement séparés.
Si vous exécutez plusieurs instances du même projet, vous avez besoin de plusieurs copies du répertoire du projet, car Vagrant stocke l'état de la boîte dans le répertoire .vagrant
sous le projet.
Le meilleur moyen est d'utiliser un tableau de hachages . Vous pouvez définir le tableau comme suit:
servers=[
{
:hostname => "web",
:ip => "192.168.100.10",
:box => "saucy",
:ram => 1024,
:cpu => 2
},
{
:hostname => "db",
:ip => "192.168.100.11",
:box => "saucy",
:ram => 2048,
:cpu => 4
}
]
Ensuite, il vous suffit d’itérer chaque élément du tableau du serveur et de définir les configurations:
Vagrant.configure(2) do |config|
servers.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.customize ["modifyvm", :id, "--memory", machine[:ram]]
end
end
end
end
Vous devez simplement copier le répertoire contenant Vagrantfile
dans le nouvel emplacement et exécuter vagrant up
à partir de celui-ci.
Assurez-vous de copier le répertoire avant de démarrer la boîte pour la première fois, sinon Vagrant pensera que ces deux emplacements font référence à la même boîte. Ou, si vous avez déjà utilisé vagrant up
avant de copier le répertoire, supprimez copied_directory/.vagrant
après avoir effectué la copie.
Vous pouvez même utiliser différents fichiers Vagrant dans le même répertoire pour des configurations ou des boîtes différentes.
VAGRANT_VAGRANTFILE=Vagrantfile.ubntu_1404_64 VAGRANT_DOTFILE_PATH=.vagrant_ub140464 vagrant up
OR
VAGRANT_VAGRANTFILE=Vagrantfile.ubntu_1404_32 VAGRANT_DOTFILE_PATH=.vagrant_ub140432 vagrant up
Le Vagrantfile peut résider dans le même répertoire
https://www.vagrantup.com/docs/vagrantfile/tips.html#loop-over-vm-definitions
(1..3).each do |i| config.vm.define "node-#{i}" do |node| node.vm.provision "Shell", inline: "echo hello from node #{i}" end end
J'ai pu avoir un seul fichier vagrant:
Vagrant.configure("2") do |winconfig|
# stuff
end
Vagrant.configure("2") do |nixconfig|
# stuff
end
Vagrant.configure("2") do |macconfig|
# stuff
end
et alors je peux les élever avec vagrant up --parallel
. Comme d'autres l'ont mentionné, différents fichiers vagabonds peuvent être plus faciles à maintenir.
Copier le répertoire contenant Vagrantfile dans un nouvel emplacement et faire tourner la nouvelle machine constitue le moyen le plus simple, si les machines ne coopèrent pas.
Cependant, vous pouvez pas vouloir copier/coller des scripts de provisioning à des fins de suivi/retour en arrière de VCS. Gardez tous vos scripts dans un dossier, ex. dev
, et mettez votre Vagrantfile
sous des dossiers numérotés sous dev
, ex. dev/10
. Lorsque vous créez une nouvelle version, ex. dev/11
et pas besoin de l'ancien, vous pouvez simplement le supprimer. Et référez-vous aux scripts de provisioning courants en utilisant le chemin relatif:
config.vm.provision "Shell", path: "../provisioner.sh"