ruby - provisioner - ¿Cómo incluyo variables en mi VagrantFile?
vagrant user (4)
¿Alguien puede guiarme a cómo incluir variables en mi VagrantFile? Estoy tratando de inyectar configuraciones en el Vagrantfile desde un archivo externo para poder distribuir la configuración a mis colegas sin tener que hacer configuraciones en el código directo directamente en el Vagrantfile.
Pensé que, dado que se basaba en Ruby, solo podía incluir un archivo de Ruby, pero aparece un mensaje de error: constante sin inicializar MyVars
Mi VagrantFile simplificado
# -*- 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
Y vagrant.rb contiene
module MyVars
WEBVMNAME = "rex"
end
Tenga en cuenta que también soy un novato en Ruby, así que no estoy seguro de si es solo la sintaxis que me equivoqué.
Edición: Código actualizado que estoy usando
Creé un directorio de la biblioteca:
require ''./lib/cfpEnvironment.rb''
include CFPEnvironment
Y luego hice el script de lo que necesito para ser dinámico, definiendo las variables en el módulo creado ...
CFPPorts.select{ |key, value| value.numeric? }.each { |key, value|
config.vm.network :forwarded_port, guest: value, host: value
}
Gracias a @Matt y @strager por sus respuestas arriba!
Intenta cambiar tu requerimiento a esto:
require ''./vagrant''
Utilice require_relative
:
require_relative ''vagrant.rb''
include MyVars
# ...
Utilizo el enfoque de https://puphpet.com , creo un archivo config.yaml en el mismo directorio de Vagrantfile y ...
En mi 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'']
...
En mi config.yaml:
---
configs:
use: ''home''
office:
public_ip: ''192.168.2.117''
<more variables>...
home:
public_ip: ''192.168.1.117''
<more variables>...