我想直接在vagrantfile中指定默认情况下为每个VM使用哪个提供程序。
例如,给定这个vagrantfile:
# Vagrantfile
[...]
config.vm.define 'dev_vm' do |machine|
machine.vm.provider :libvirt do |os|
[...]
end
# machine.default_provider = :libvirt
end
config.vm.define 'production_vm' do |machine|
machine.vm.provider :openstack do |os|
[...]
end
# machine.default_provider = :openstack
end
要将以下内容启动到VM,我必须发出两个命令:
vagrant up --provider=libvirt dev_vm
vagrant up --provider=openstack production_vm
我想用一个vagrant up
调出两个,特别是因为我运行了更多的机器。有一些像评论machine.default_provider = :openstack
这样的配置会很棒。
有办法吗?
答案 0 :(得分:7)
我认为没有任何简单的方法可以做到这一点。 Vagrant目前在整个运行期间将使用相同的提供程序,因此可能需要进行相当大的代码更改才能支持此功能。
现在包装脚本可能是最简单的解决方案。
另一种解决方法是为VM使用单独的Vagrantfiles,并在每个VM中设置VAGRANT_DEFAULT_PROVIDER
。如果有很多常见配置,您可以将其提取到例如Vagrantfile.common
,其他人包括在内。类似的东西:
# Vagrantfile 1
ENV['VAGRANT_DEFAULT_PROVIDER'] = 'libvirt'
# assume the common config is in parent directory
load File.expand_path('../../Vagrantfile.common', __FILE__)
Vagrant.configure('2') do |config|
# ...
end