有没有办法明确指定Vagrantfile的路径?我的公司希望做这样的事情:要在汇合机器上进行测试,请键入vagrant spinup confluence
之类的命令,然后将其指向包含汇合环境的不同目录中的Vagrantfile,然后调出所有这些机器。
但是,看起来没有任何方法可以明确说明要使用的Vagrantfile,而且我在ruby中有点(非常)新的,所以我很难为它编写自己的插件。有没有人有关于该做什么的建议?或者有人做过类似的事情吗?
答案 0 :(得分:52)
除了Andrew Lorente的回答,您还可以使用VAGRANT_VAGRANTFILE
环境变量来指定Vagrantfile
的文件名。这比VAGRANT_CWD
更改当前工作目录更有优势,这在依赖相对路径时非常有用。
例如,以下内容将在vagrant up
上运行Vagrantfile.other
:
VAGRANT_VAGRANTFILE=Vagrantfile.other vagrant up
答案 1 :(得分:22)
不需要单独的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
显示正常的vm,vagrant up confluence
显示你的汇合vm!
答案 2 :(得分:19)
虽然其他回答者说这个特殊情况不需要单独的Vagrantfiles是正确的,但我认为有合法的用途来指定Vagrantfile路径 - 例如在脚本中读取vagrant ssh-config
信息。
很高兴,您可以通过设置VAGRANT_CWD
环境变量:
VAGRANT_CWD=~/some/path/ vagrant ssh-config
这似乎没有在任何地方记录,但您可以看到它in the source。
答案 3 :(得分:2)
您可以根据需要添加任意数量的Vagrantfile
个cd
。只需为您的项目创建一个新目录(然后可以只包含一个或多个VM),然后vagrant init
到该目录并运行Vagrantfile
以使Vagrant创建一个新的Vagrantfile
然后可根据您的需求定制。要使用新的vagrant up
启动VM,只需从包含它的目录中运行{{1}}。
答案 4 :(得分:1)
将shell命令放在括号中会创建一个子shell,所以从Git for Windows(或Linux / OS X上的bash),你可以这样做:
(cd test/ruby; vagrant up)