在Vagrantfile中指定默认提供程序

Luc*_*zzi 3 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
Run Code Online (Sandbox Code Playgroud)

要将以下内容启动到VM,我必须发出两个命令:

vagrant up --provider=libvirt  dev_vm
vagrant up --provider=openstack production_vm
Run Code Online (Sandbox Code Playgroud)

我想把它们都用一个vagrant up,特别是因为我运行了更多的机器.像评论这样的一些配置machine.default_provider = :openstack会非常棒.

有办法吗?

tma*_*lai 7

我认为没有任何简单的方法可以做到这一点.Vagrant目前在整个运行期间将使用相同的提供程序,因此可能需要进行相当大的代码更改才能支持此功能.

也许包装脚本现在是最简单的解决方案.

另一种解决方法是为VM使用单独的Vagrantfiles并VAGRANT_DEFAULT_PROVIDER在每个VM中设置.如果有很多常见配置,您可以将其提取到例如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
Run Code Online (Sandbox Code Playgroud)