with provisioner language ruby command-line vagrant parameter-passing

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í .