如何使用 Ruby 模板化 Vagrantfile?
How to template Vagrantfile using Ruby?
我有几个 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
我有几个 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