Подтвердить что ты не робот

Как включить переменные в мой VagrantFile?

Может ли кто-нибудь указать мне, как включить переменные в свой VagrantFile? Я пытаюсь ввести configs в Vagrantfile из внешнего файла, чтобы я мог распространять конфигурацию для своих коллег, не имея их жестко кодировать конфиги непосредственно в Vagrantfile.

Я думал, что, поскольку это был Ruby based, я мог бы просто включить Ruby файл, но я получаю сообщение об ошибке Сообщение: unintialized constant 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, поэтому я не уверен, что если это просто синтаксис, я ошибся?

Изменить: обновленный код, который я использую

4b9b3361

Ответ 1

Я использую подход https://puphpet.com, я создаю файл config.yaml в том же каталоге Vagrantfile и...

В моем 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>...

Ответ 2

Используйте require_relative:

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

Ответ 3

Попробуйте изменить свой запрос:

require './vagrant'

Ответ 4

Я создал каталог библиотеки:

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 за их ответы выше!