2013-05-23 15 views
21

Czy ktoś może mnie prowadzić do tego, w jaki sposób mogę uwzględnić zmienne w moim VagrantFile? Próbuję wprowadzić konfiguracje do pliku Vagrantfile z zewnętrznego pliku, aby móc dystrybuować konfigurację do moich kolegów bez konieczności konfigurowania kodów bezpośrednio na Vagrantfile.Jak uwzględnić zmienne w moim VagrantFile?

myślałem, że ponieważ została oparta Ruby może po prostu dołączyć plik Ruby, ale pojawia się błąd Wiadomość unintialized stałe MyVars

My VagrantFile uproszczone

# -*- 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 

I vagrant.rb zawiera

module MyVars 

    WEBVMNAME = "rex" 

end 

Należy pamiętać, że jestem również początkującym w Ruby, więc nie jestem pewien, czy to tylko składnia mam źle?

Edycja: Zaktualizowany kod używam

+1

podobne: [przesłanianie ustawień konfiguracyjnych Vagrant lokalnie (per-dev)] (http://stackoverflow.com/q/13065576/55075) – kenorb

Odpowiedz

38

używam podejście https://puphpet.com, tworzę config.yaml plik w tym samym katalogu Vagrantfile i ...

W moim 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'] 
    ... 

W moim config.yaml:

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

To było bardzo pomocne dla mnie. Ładne podejście. –

3

Spróbuj zmienić wymagają do tego:

require './vagrant' 
5

Zastosowanie require_relative:

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

stworzyłem katalog biblioteki:

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

A potem zrobił włączony, co muszę być dynamiczny, definiowanie zmiennych w module utworzonym ...

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

Dzięki @Matt i @strager dla swoich odpowiedziach powyżej!

Powiązane problemy