2013-05-23 22 views
21

Qualcuno può guidarmi su come includere variabili nel mio VagrantFile? Sto cercando di iniettare i configs nel Vagrantfile da un file esterno in modo da poter distribuire la configurazione ai miei colleghi senza averli con hardcode direttamente sul Vagrantfile.Come includere variabili nel mio VagrantFile?

avevo pensato che da quando è stata fondata Rubino ho potuto solo inserire un file Rubino ma ottengo un errore messaggio: unintialized MyVars costanti

mio VagrantFile semplificato

# -*- mode: ruby -*- 
# vi: set ft=ruby : 
require 'vagrant.rb' 
include MyVars 

Vagrant.configure("2") do |config| 

    # Web 
    config.vm.define :joe do |joe| 
    joe.vm.box = "precise64_4.2.12" 
    joe.vm.hostname = WEBVMNAME 
    joe.vm.network :private_network, ip: "192.168.140.141" 

    # Port Forwarding 
    joe.vm.network :forwarded_port, guest: 22, host: 2201 
    joe.vm.network :forwarded_port, guest: 80, host: 8080 

    # Bootstrap Bash Script 
    joe.vm.provision :shell, :path => "bootstrap.sh" 
    end 

end 

E vagrant.rb contiene

module MyVars 

    WEBVMNAME = "rex" 

end 

notano che io sono anche un novizio a Ruby, quindi non sono sicuro come pure se il suo solo la sintassi ho ottenuto sbagliato?

Modifica: Aggiornato codice che sto usando

+1

simili: [override le impostazioni di configurazione Vagrant localmente (per-dev)] (http://stackoverflow.com/q/13065576/55075) – kenorb

risposta

38

Io uso l'approccio di https://puphpet.com, crea un file config.yaml nella stessa directory del Vagrantfile e ...

Nel mio Vagrantfile:

# encoding: utf-8 
# -*- mode: ruby -*- 
# vi: set ft=ruby : 

require 'yaml' 

current_dir = File.dirname(File.expand_path(__FILE__)) 
configs  = YAML.load_file("#{current_dir}/config.yaml") 
vagrant_config = configs['configs'][configs['configs']['use']] 

Vagrant.configure('2') do |config| 

    config.vm.network 'public_network', ip: vagrant_config['public_ip'] 
    ... 

Nel mio config.yaml:

--- 
configs: 
    use: 'home' 
    office: 
     public_ip: '192.168.2.117' 
     <more variables>... 
    home: 
     public_ip: '192.168.1.117' 
     <more variables>... 
+0

Questo è stato davvero utile per me. Buon approccio –

3

Provare a cambiare la richiedono a questo:

require './vagrant' 
5

Uso require_relative:

require_relative 'vagrant.rb' 
include MyVars 
# ... 
1

ho creato una directory di libreria:

require './lib/cfpEnvironment.rb' 
include CFPEnvironment 

e poi ha fatto lo scripting di quello che ho bisogno di essere dinamica, definizione delle variabili nel modulo creato ...

CFPPorts.select{ |key, value| value.numeric? }.each { |key, value| 
    config.vm.network :forwarded_port, guest: value, host: value 
} 

Grazie a @ Matt e @strager per le loro risposte di cui sopra!

Problemi correlati