ruby - provisioner - vagrantfile language
¿Cómo pasar el parámetro en ''vagrant up'' y tenerlo en el alcance de Vagrantfile? (3)
Es posible leer variables de ARGV y luego eliminarlas antes de pasar a la fase de configuración. Me parece asqueroso modificar ARGV, pero no pude encontrar otra forma para las opciones de línea de comandos.
Vagrantfile
# Parse options
options = {}
options[:port_guest] = ARGV[1] || 8080
options[:port_host] = ARGV[2] || 8080
options[:port_guest] = Integer(options[:port_guest])
options[:port_host] = Integer(options[:port_host])
ARGV.delete_at(1)
ARGV.delete_at(1)
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Create a forwarded port mapping for web server
config.vm.network :forwarded_port, guest: options[:port_guest], host: options[:port_host]
# Run shell provisioner
config.vm.provision :shell, :path => "provision.sh", :args => "-g" + options[:port_guest].to_s + " -h" + options[:port_host].to_s
provision.sh
port_guest=8080
port_host=8080
while getopts ":g:h:" opt; do
case "$opt" in
g)
port_guest="$OPTARG" ;;
h)
port_host="$OPTARG" ;;
esac
done
Estoy buscando una manera de pasar el parámetro al libro de cocina Chef como:
$ vagrant up some_parameter
Y luego use some_parameter
dentro de uno de los libros de cocina del Chef.
No puede pasar ningún parámetro a vagabundo. La única forma es usar variables de entorno
MY_VAR=''my value'' vagrant up
Y usa ENV[''MY_VAR'']
en la receta.
También puede incluir la biblioteca GetoptLong Ruby que le permite analizar las opciones de línea de comando.
Vagrantfile
require ''getoptlong''
opts = GetoptLong.new(
[ ''--custom-option'', GetoptLong::OPTIONAL_ARGUMENT ]
)
customParameter=''''
opts.each do |opt, arg|
case opt
when ''--custom-option''
customParameter=arg
end
end
Vagrant.configure("2") do |config|
...
config.vm.provision :shell do |s|
s.args = "#{customParameter}"
end
end
Entonces, puedes ejecutar:
$ vagrant --custom-option=option up
$ vagrant --custom-option=option provision
Nota: asegúrese de que la opción personalizada se especifique antes del comando vagabundo para evitar un error de validación de la opción no válida.
Más información sobre la biblioteca aquí .