30

VagrantFile に変数を含める方法を教えてもらえますか? 外部ファイルから Vagrantfile に構成を挿入しようとしています。これにより、Vagrantfile に構成を直接ハードコーディングすることなく、構成を同僚に配布できます。

Ruby ベースなので、Ruby ファイルをインクルードするだけでよいと思っていましたが、エラー メッセージが表示されます: 初期化されていない定数 MyVars

私のVagrantFileは簡素化されました

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

そして vagrant.rb が含まれています

module MyVars

    WEBVMNAME = "rex"

end

私はRubyの初心者でもあることに注意してください。構文が間違っているだけなのかどうかもわかりません。

編集:私が使用している更新されたコード

4

4 に答える 4

60

https://puphpet.comのアプローチを使用し、Vagrantfile と同じディレクトリにファイル config.yaml を作成し、...

私の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']
    ...

私のconfig.yamlでは:

---
configs:
    use: 'home'
    office:
        public_ip: '192.168.2.117'
        <more variables>...
    home:
        public_ip: '192.168.1.117'
        <more variables>...
于 2014-10-16T00:41:10.403 に答える
4

これにrequireを変更してみてください:

require './vagrant'
于 2013-05-23T09:30:12.233 に答える
1

ライブラリ ディレクトリを作成しました。

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

そして、動的にする必要があるもののスクリプトを作成し、作成されたモジュールの変数を定義しました...

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

上記の回答をくれた @Matt と @strager に感謝します。

于 2014-05-22T03:31:19.147 に答える