Existe-t-il un moyen de spécifier explicitement le chemin d'un fichier Vagrant? Ma société souhaite procéder de la manière suivante: pour tester sur une machine confluence, entrez une commande telle que vagrant spinup confluence
, puis pointez-le sur un fichier Vagrant situé dans un répertoire différent contenant l'environnement de confluence, puis affichez toutes ces machines.
Cependant, il ne semble pas y avoir de moyen d'indiquer explicitement ce que Vagrantfile doit utiliser, et comme je suis un peu (très) nouveau chez Ruby, j'ai du mal à écrire mon propre plugin. Quelqu'un at-il des recommandations sur ce qu'il faut faire? Ou quelqu'un a-t-il fait quelque chose de semblable à cela?
Il n'est pas nécessaire d'avoir un fichier Vagrant distinct, vous pouvez simplement définir plusieurs ordinateurs virtuels dans le même fichier. Voir la documentation ici: http://docs.vagrantup.com/v2/multi-machine/index.html
Si vous utilisez simplement un VM dans votre environnement "normal" et un VM pour votre environnement "confluence", il vous suffit simplement de définir chaque VM et vagrant up
- la VM spécifique.
Si vous avez plusieurs machines qui composent chacun de vos environnements, vous avez deux options, vous pouvez utiliser des expressions régulières et vous assurer de nommer et taper les commandes correctement ou vous pouvez ajouter un peu de logique à votre fichier Vagrant pour faciliter la tâche des utilisateurs .
Par exemple, avec un peu de hack dans votre Vagrantfile, vous pouvez effectuer les opérations suivantes:
Vagrant.configure('2') do |config|
if ARGV[1] == 'confluence'
ARGV.delete_at(1)
confluence = true
else
confluence = false
end
config.vm.provider :virtualbox do |virtualbox, override|
#virtualbox.gui = true
virtualbox.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
virtualbox.customize ["modifyvm", :id, "--memory", 512]
override.vm.box = 'Ubuntu 12.10 x64 Server'
override.vm.box_url = 'http://goo.gl/wxdwM'
end
if confluence == false
config.vm.define :normal1 do |normal1|
normal1.vm.hostname = 'normal1'
normal1.vm.network :private_network, ip: "192.168.1.1"
end
config.vm.define :normal2 do |normal2|
normal2.vm.hostname = 'normal2'
normal2.vm.network :private_network, ip: "192.168.1.2"
end
end
if confluence == true
config.vm.define :confluence1 do |confluence1|
confluence1.vm.hostname = 'confluence1'
confluence1.vm.network :private_network, ip: "192.168.1.3"
end
config.vm.define :confluence2 do |confluence2|
confluence2.vm.hostname = 'confluence2'
confluence2.vm.network :private_network, ip: "192.168.1.4"
end
end
end
Maintenant, vagrant up
affiche votre vm normale et vagrant up confluence
votre vm confluence!
En plus de la réponse d’Andrew Lorente, vous pouvez également utiliser la variable d’environnement VAGRANT_VAGRANTFILE
pour spécifier le nom de fichier de la Vagrantfile
. Ceci a l'avantage sur VAGRANT_CWD
de ne pas changer le répertoire de travail actuel, ce qui peut être utile lorsque vous utilisez des chemins relatifs.
Par exemple, ce qui suit va exécuter vagrant up
sur Vagrantfile.other
:
VAGRANT_VAGRANTFILE=Vagrantfile.other vagrant up
Bien que d’autres répondants aient raison de dire que ce cas particulier n’avait pas besoin de fichiers Vagrantfiles distincts, je pense qu’il est légitime de spécifier un chemin Vagrantfile - lire des informations vagrant ssh-config
dans un script par exemple.
Heureusement, vous pouvez le faire en définissant la variable d'environnement VAGRANT_CWD
:
VAGRANT_CWD=~/some/path/ vagrant ssh-config
Cela ne semble être documenté nulle part, mais vous pouvez le voir dans le source .
Vous pouvez avoir autant de Vagrantfile
s différents que vous le souhaitez. Créez simplement un nouveau répertoire pour votre projet (qui peut alors consister en un ou plusieurs ordinateurs virtuels), puis cd
dans ce répertoire et exécutez vagrant init
pour que Vagrant crée un nouveau Vagrantfile
qui peut ensuite être personnalisé selon vos besoins. Pour démarrer votre VM à l'aide de ce nouveau Vagrantfile
, exécutez simplement vagrant up
à partir du répertoire qui le contient.
Mettre les commandes de Shell entre parenthèses crée un sous-shell, donc à partir de Git pour Windows (ou bash sous Linux/OS X), vous pouvez faire:
(cd test/Ruby; vagrant up)