2016-03-03 7 views
2

У меня есть несколько Vagrantfile, каждый для другого provider, так как Vagrant имеет ограничение, которое не позволяет делать два или более положений одновременно с использованием того же Vagrantfile. Итак, я разделился на два или более Vagrantfiles, но мое «тело», мои сценарии сложения одинаковы для обоих, единственное, что меняется, это блок provider.Как шаблон Vagrantfile с помощью Ruby?

Например:

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, так что любое предложение будет очень признателен!

ответ

3

вы можете сделать что-то вроде

Vagrant.configure(2) do |nagios| 

    nagios.vm.provider :digital_ocean do |provider, override| 
    ... 
    end 

    eval File.read("../Vagrantfile-common") 

end 
+0

О человек, ты самый лучший! Спасибо огромное! :) –