Quelqu'un peut-il me guider sur la façon d'inclure des variables dans mon VagrantFile? J'essaie d'injecter des configs dans le Vagrantfile à partir d'un fichier externe afin de pouvoir distribuer la config à mes collègues sans avoir à coder en dur les configs directement sur le Vagrantfile.
J'avais pensé que comme c'était basé sur Ruby je pouvais juste inclure un fichier Ruby mais j'obtiens un message d'erreur: MyVars constant non-individualisé)
Mon VagrantFile simplifié
# -*- 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
Et vagrant.rb contient
module MyVars
WEBVMNAME = "rex"
end
Notez que je suis également un débutant à Ruby donc je ne suis pas sûr aussi si c'est juste la syntaxe que je me suis trompée?
Edit: Code mis à jour que j'utilise
J'utilise l'approche de https://puphpet.com , je crée un fichier config.yaml dans le même répertoire du Vagrantfile et ...
Dans mon 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']
...
Dans mon config.yaml:
---
configs:
use: 'home'
office:
public_ip: '192.168.2.117'
<more variables>...
home:
public_ip: '192.168.1.117'
<more variables>...
Utilisation require_relative
:
require_relative 'vagrant.rb'
include MyVars
# ...
Essayez de changer votre besoin en ceci:
require './vagrant'
J'ai créé un répertoire de bibliothèque:
require './lib/cfpEnvironment.rb'
include CFPEnvironment
Et puis j'ai fait le script de ce dont j'ai besoin pour être dynamique, en définissant les variables dans le module créé ...
CFPPorts.select{ |key, value| value.numeric? }.each { |key, value|
config.vm.network :forwarded_port, guest: value, Host: value
}
Merci à @Matt et @strager pour leurs réponses ci-dessus!