如何使用Ruby模板Vagrantfile?

我有几个Vagrantfile ,每个都用于不同的provider ,因为Vagrant有一个限制,不允许使用相同的Vagrantfile同时制作两个或多个条款。 所以,我分成两个或更多Vagrantfiles ,但我的“body”,我的配置脚本对于两者都是相同的,唯一改变的是provider块。

例如:

local_nagios / Vagrantfile

 # -*- mode: ruby -*- # vi: set ft=ruby : require 'yaml' set = YAML.load_file '../../../settings.yaml' Vagrant.configure(2) do |nagios| nagios.vm.provider :virtualbox do |provider, override| override.vm.box = 'ubuntu/trusty64' override.vm.hostname = 'nagios.company.com' override.vm.synced_folder '.', '/vagrant', disabled:true override.vm.network 'public_network', bridge:set['network_interface'], ip:set['dev_nagios_ip'] provider.memory = 4096 provider.cpus = 2 end install = set['devops_home'] + '/vagrant/lib/install' nagios.vm.provision 'shell', path: install + '/basic' nagios.vm.provision 'shell', path: install + '/devops' step = set['devops_home'] + '/vagrant/server/nagios/steps' nagios.vm.provision 'shell', path: step + '/install', args: [set['nagios_password']] end 

digital_nagios / Vagrantfile

 # -*- mode: ruby -*- # vi: set ft=ruby : require 'yaml' set = YAML.load_file '../../../settings.yaml' Vagrant.configure(2) do |nagios| nagios.vm.provider :digital_ocean do |provider, override| override.vm.box = 'digital_ocean' override.vm.hostname = 'nagios.company.com' override.vm.synced_folder '.', '/vagrant', disabled:true override.ssh.private_key_path = '~/.ssh/id_rsa' provider.token = 'my-token' provider.image = 'ubuntu-14-04-x64' provider.region = 'fra1' provider.size = '4gb' end install = set['devops_home'] + '/vagrant/lib/install' nagios.vm.provision 'shell', path: install + '/basic' nagios.vm.provision 'shell', path: install + '/devops' step = set['devops_home'] + '/vagrant/server/nagios/steps' nagios.vm.provision 'shell', path: step + '/install', args: [set['nagios_password']] end 

我想知道是否有可能从中制作模板。 或者导入我的公共区域,如下所示:

 Vagrant.configure(2) do |nagios| nagios.vm.provider :digital_ocean do |provider, override| ... end import '../provision.rb' end 

我不熟悉Ruby ,所以任何建议都会非常感激!

你可以做点什么

 Vagrant.configure(2) do |nagios| nagios.vm.provider :digital_ocean do |provider, override| ... end eval File.read("../Vagrantfile-common") end