如何在VagrantFile中包含变量?

Mec*_*orm 26 ruby deployment vagrant

任何人都可以指导我如何在VagrantFile中包含变量?我试图从外部文件将配置注入Vagrantfile,这样我就可以将配置分发给我的同事而无需直接在Vagrantfile上硬编码配置.

我曾经想过,因为它是基于Ruby的我可以只包含一个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
Run Code Online (Sandbox Code Playgroud)

而vagrant.rb包含

module MyVars

    WEBVMNAME = "rex"

end
Run Code Online (Sandbox Code Playgroud)

请注意我也是Ruby的新手,所以我不确定它是否只是我错误的语法?

编辑:我正在使用的更新代码

小智 52

我使用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']
    ...
Run Code Online (Sandbox Code Playgroud)

在我的config.yaml中:

---
configs:
    use: 'home'
    office:
        public_ip: '192.168.2.117'
        <more variables>...
    home:
        public_ip: '192.168.1.117'
        <more variables>...
Run Code Online (Sandbox Code Playgroud)

  • 这对我真的很有帮助。不错的做法。 (2认同)

Mat*_*per 5

尝试将您的要求更改为:

require './vagrant'
Run Code Online (Sandbox Code Playgroud)


str*_*ger 5

用途require_relative:

require_relative 'vagrant.rb'
include MyVars
# ...
Run Code Online (Sandbox Code Playgroud)