2013-05-23 6 views
21

Kann mir jemand sagen, wie ich Variablen in meine VagrantFile einbinden kann? Ich versuche, configs aus einer externen Datei in die Vagrantfile zu injizieren, so dass ich die Konfiguration an meine Kollegen verteilen kann, ohne dass sie Konfigurationen direkt in der Vagrant-Datei fest codieren müssen.Wie schließe ich Variablen in meine VagrantFile ein?

Ich hatte gedacht, dass, da es Ruby-basierte Ich konnte nur ein Ruby-Datei enthalten, aber ich erhalte eine Fehlermeldung Nachricht: unintialized Konstante MyVars

Mein VagrantFile vereinfacht

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

Und vagrant.rb enthält

module MyVars 

    WEBVMNAME = "rex" 

end 

Sie beachten Sie, dass ich bin auch ein Neuling bei Ruby so sicher, dass ich bin nicht so gut, wenn sie nur die Syntax ich falsch gemacht?

Edit: Aktualisiert Code I

+1

Ähnliche: [außer Kraft setzen Vagrant Konfigurationseinstellungen vor Ort (pro-dev)] (http://stackoverflow.com/q/13065576/55075) – kenorb

Antwort

38

ich den Ansatz von https://puphpet.com verwenden, erstelle ich eine Datei config.yaml im gleichen Verzeichnis des Vagrantfile und ...

In meinem 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'] 
    ... 

In meinem config.yaml:

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

Das war mir sehr hilfreich sein. Netter Ansatz. –

3

bin mit Versuchen Sie benötigen, um diese zu ändern:

require './vagrant' 
5

Verwendung require_relative:

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

ich ein Bibliotheksverzeichnis erstellt:

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

Und dann taten das Skripting von dem, was ich brauche, dynamisch zu sein, erstellt die Variablen im Modul mit ...

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

Dank @ Matt und @strager für ihre Antworten oben!

Verwandte Themen