Created
April 29, 2014 15:24
-
-
Save jmolivas/11403587 to your computer and use it in GitHub Desktop.
Adding customizable configuration to Vagrantfile
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "yaml" | |
parameter_file = "./parameters.yml" | |
parameters = Array.new(0) | |
if File.exists?(parameter_file) | |
parameters = YAML::load_file(parameter_file) | |
end | |
# Apply configuration values if available | |
config.vm.network "private_network", ip: (parameters.include?'network_ip') ? parameters['network_ip'] : "192.168.9.10" | |
config.vm.synced_folder "./www", "/var/www", id: "webroot", type: (parameters.include?'synced_folder_type') ? parameters['synced_folder_type'] : "nfs" | |
virtualbox.customize ["modifyvm", :id, "--memory", (parameters.include?'memory') ? parameters['memory'] : "512"] |
Nice!, con fetch
ya no importa si load_file
regreso una cadena o un hash. :) Yo agregaria el File.exists check al codigo de @antillas21 y listo (IMHO).
Muchas gracias señores si exacto agrego el File.exists por que el repo se distribuye con un parameters.yml.dist y el usuario tiene que hacer un $cp parameters.yml.dist parameters.yml para hacer override la config
Al final ha quedó así:
require "yaml"
params_file = "parameters.yml"
params = {}
if File.exists?(params_file)
params = YAML::load_file(params_file)
end
config.vm.network "private_network", ip: params.fetch('network_ip', "192.168.9.10")
config.vm.synced_folder "./www", "/var/www", id: "webroot", type: params.fetch('synced_folder_type', "nfs")
virtualbox.customize ["modifyvm", :id, "--memory", params.fetch('memory', "512")]
En un ejercicio extra, puedes reducir esto así:
require "yaml"
params_file = "parameters.yml"
params = File.exists?(params_file) ? YAML::load_file(params_file) : {}
config.vm.network "private_network", ip: params.fetch('network_ip', "192.168.9.10")
config.vm.synced_folder "./www", "/var/www", id: "webroot", type: params.fetch('synced_folder_type', "nfs")
virtualbox.customize ["modifyvm", :id, "--memory", params.fetch('memory', "512")]
De nuevo, la explicación:
- no hay por qué checar si params_file está definido, porque tú controlas el flow y lo acabas de declarar :P
- no hay por qué inicializar
params = { }
antes de hacer algo con él. - cuando declaras params, puedes darle un fallback value con
||
, traduciéndose como params es lo que resulte de abrir via YAML este archivo, o un Hash vacío
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Esto es lo que haría yo:
Explicación:
fetch
fetch
funciona así, le puedo pasar hasta dos argumentos:nil
, entonces proporciona un default value. Exemplo:params.fetch('network_ip', "192.168.9.10")
, significa del hash params, trae el valor de la llavenetwork_ip
, si no hay nada, entonces que sea192.168.9.10
.Usando
fetch
me ahorro todos esos ternary checks ;)