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?
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!
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
- Esto solía aparecer como una característica indocumentada que solo era visible en el código fuente.
- Más tarde esto ahora está documentado en los documentos de Hashicorp aquí: Variables ambientales.
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.
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.
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)
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