Especificar la ruta de Vagrantfile explicity, si no plugin


¿Hay alguna forma de especificar explícitamente la ruta de un Vagrantfile? Mi compañía quiere hacer algo como esto: Para probar en una máquina de confluence, escriba un comando como vagrant spinup confluence, y luego apunte eso a un Vagrantfile en un directorio diferente que contenga el entorno de confluence, y luego muestre todas estas máquinas.

Sin embargo, no parece que haya ninguna manera de indicar explícitamente qué Vagrantfile usar, y soy algo (muy) nuevo en ruby, así que estoy teniendo un momento difícil escribiendo mi propio plugin para él. ¿Alguien tiene recomendaciones sobre qué hacer? O alguien ha hecho algo similar a esto?

Author: addicted2unix, 2013-06-26

5 answers

No es necesario tener un Vagrantfile separado, solo puede definir varias máquinas virtuales en el mismo archivo. Consulte la documentación aquí: http://docs.vagrantup.com/v2/multi-machine/index.html

Si solo está utilizando una VM en su entorno 'normal' y una VM para su entorno 'confluence', entonces es simplemente un caso de definir cada VM y vagrant up-ing la VM específica.

Si tiene varias máquinas que componen cada uno de sus entornos, entonces tiene dos opciones, puede usar expresiones regulares y asegurarse de nombrar y escribir los comandos correctamente o puede poner un poco de lógica en su Vagrantfile para que sea más fácil para las personas.

Por ejemplo, con un poco de hackeo en su Vagrantfile puede hacer lo siguiente:

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

Ahora vagrant up trae sus máquinas virtuales normales y vagrant up confluence trae sus máquinas virtuales de confluence!

 21
Author: Matt Cooper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-26 07:59:10

Además de la respuesta de Andrew Lorente, también puede usar la variable de entorno VAGRANT_VAGRANTFILE para especificar la ruta de acceso de Vagrantfile. Esto tiene la ventaja sobre VAGRANT_CWD de no cambiar el directorio de trabajo actual, lo que puede ser útil cuando se depende de rutas relativas.

Por ejemplo, lo siguiente se ejecutará vagrant up en Vagrantfile.other:

VAGRANT_VAGRANTFILE=Vagrantfile.other vagrant up

Notas

 47
Author: Mark Hobson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-19 20:31:44

Mientras que otros answerers tienen razón en que este caso en particular no necesitaba Archivos Vagrantfile separados, creo que hay usos legítimos para especificar una ruta de Vagrantfile reading leer vagrant ssh-config información en un script, por ejemplo.

Felizmente, puede hacerlo configurando la variable de entorno VAGRANT_CWD:

VAGRANT_CWD=~/some/path/ vagrant ssh-config

Esto no parece estar documentado en ninguna parte, pero se puede ver en la fuente.

 19
Author: Erin Call,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-25 20:20:55

Puede tener tantos Vagrantfile s diferentes como desee/necesite. Simplemente cree un nuevo directorio para su proyecto (que luego puede consistir en una o varias máquinas virtuales), luego cd en ese directorio y ejecute vagrant init para hacer que Vagrant cree un nuevo Vagrantfile que luego se puede personalizar según sus necesidades. Para iniciar su VM usando ese nuevo Vagrantfile simplemente ejecute vagrant up desde el directorio que lo contiene.

 2
Author: avhilchen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-15 12:33:22

Poner comandos de shell entre paréntesis crea un sub-shell, así que desde Git para Windows (o bash en Linux/OS X), puedes hacer:

(cd test/ruby; vagrant up)

 0
Author: danizen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-14 20:52:34