web-dev-qa-db-fra.com

Spécifiez le chemin explicite de Vagrantfile, si ce n'est pas le plugin

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?

26
addicted2unix

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!

22
Matt Cooper

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

Remarques

51
Mark Hobson

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

19
Erin Call

Vous pouvez avoir autant de Vagrantfiles 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.

2
avhilchen

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)

1
danizen