在Vagrantfile中指定默认提供程序

时间:2014-02-17 22:50:29

标签: vagrant

我想直接在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这样的配置会很棒。

有办法吗?

1 个答案:

答案 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