有没有办法明确指定 Vagrantfile 的路径?我的公司想做这样的事情:为了在 confluence 机器上进行测试,输入类似的命令vagrant spinup confluence
,然后将其指向包含 confluence 环境的不同目录中的 Vagrantfile,然后启动所有这些机器。
但是,看起来没有任何方法可以明确说明要使用什么 Vagrantfile,而且我对 ruby 有点(非常)新,所以我很难为它编写自己的插件。有人对该怎么做有建议吗?或者有没有人做过类似的事情?
有没有办法明确指定 Vagrantfile 的路径?我的公司想做这样的事情:为了在 confluence 机器上进行测试,输入类似的命令vagrant spinup confluence
,然后将其指向包含 confluence 环境的不同目录中的 Vagrantfile,然后启动所有这些机器。
但是,看起来没有任何方法可以明确说明要使用什么 Vagrantfile,而且我对 ruby 有点(非常)新,所以我很难为它编写自己的插件。有人对该怎么做有建议吗?或者有没有人做过类似的事情?
不需要单独的 Vagrantfile,你可以在同一个文件中定义多个 VM。请参阅此处的文档:http: //docs.vagrantup.com/v2/multi-machine/index.html
如果您只是在“正常”环境中使用一个虚拟机,而在“融合”环境中使用一个虚拟机,那么只需定义每个虚拟机并vagrant up
使用特定的虚拟机即可。
如果您有多个机器组成每个环境,那么您有两个选择,您可以使用正则表达式并确保正确命名和键入命令,或者您可以在 Vagrantfile 中添加一些逻辑以使人们更容易.
例如,在您的 Vagrantfile 中进行一些修改,您可以执行以下操作:
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
现在vagrant up
调出你的普通虚拟机并vagrant up confluence
调出你的汇合虚拟机!
虽然其他回答者认为这种特殊情况不需要单独的 Vagrantfile 是正确的,但我认为指定 Vagrantfile 路径有合法用途——vagrant ssh-config
例如,在脚本中读取信息。
令人高兴的是,您可以通过设置VAGRANT_CWD
环境变量来做到这一点:
VAGRANT_CWD=~/some/path/ vagrant ssh-config
这似乎没有在任何地方记录,但您可以在源代码中看到它。
您可以根据需要/需要拥有尽可能多的不同Vagrantfile
s。只需为您的项目创建一个新目录(然后可以只包含一个或多个 VM),然后cd
进入该目录并运行vagrant init
以使 Vagrant 创建一个新目录Vagrantfile
,然后可以根据您的需要对其进行自定义。要使用该新虚拟机启动您的虚拟机,Vagrantfile
只需vagrant up
从包含它的目录中运行即可。
将 shell 命令放在括号中会创建一个子 shell,因此从 Git for Windows(或 bash 在 Linux/OS X)中,您可以执行以下操作:
(cd test/ruby; vagrant up)
使用 VAGRANT_CWD 变量
VAGRANT_CWD 是 vagrant 查找 Vagrantfile 的目录
引用官方文档:
可以设置 VAGRANT_CWD 来改变 Vagrant 的工作目录。默认情况下,Vagrant 使用您所在的当前目录。工作目录很重要,因为它是 Vagrant 查找 Vagrantfile 的地方。