web-dev-qa-db-fra.com

Comment exécuter plusieurs boîtes avec Vagrant?

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.

40
timurb

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.

31
famousgarkin

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
36
david

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.

20
timurb

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

12
deepdive

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
2
030

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.

1
Zach Folwick

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"
0
mehmet