web-dev-qa-db-ja.com

VagrantFileに変数を含めるにはどうすればよいですか?

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=の初心者でもあるので、構文が間違っているかどうかもわかりませんか?

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

28
MechaStorm

私は 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>...
52
geedelur

使用する require_relative

require_relative 'vagrant.rb'
include MyVars
# ...
5
strager

これにあなたの要求を変更してみてください:

require './vagrant'
4
Matt Cooper

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

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!

1