class VagrantVbguest::Middleware

A Vagrant middleware which checks the installed VirtualBox Guest Additions to match the installed VirtualBox installation on the host system.

Public Class Methods

new(app, env) click to toggle source
# File lib/vagrant-vbguest/middleware.rb, line 10
def initialize(app, env)
  @app = app
  @env = env
end

Public Instance Methods

call(env) click to toggle source
# File lib/vagrant-vbguest/middleware.rb, line 15
def call(env)
  @env    = env
  vm      = env[:vm] || env[:machine]

  options = override_config(vm.config.vbguest.to_hash).freeze

  if options[:auto_update]
    machine = VagrantVbguest::Machine.new vm, options
    status  = machine.state
    vm.env.ui.send((:ok == status ? :success : :warn), I18n.t("vagrant_vbguest.status.#{status}", **machine.info))
    machine.run
    reboot(vm, options) if machine.reboot?
  end
rescue VagrantVbguest::Installer::NoInstallerFoundError => e
  vm.env.ui.error e.message
ensure
  @app.call(env)
end
override_config(opts) click to toggle source
# File lib/vagrant-vbguest/middleware.rb, line 34
def override_config(opts)
  if opts[:auto_reboot] && Vagrant::VERSION.between?("1.1.0", "1.1.5") && Vagrant::VERSION != "1.1.4"
    @env[:ui].warn I18n.t("vagrant_vbguest.vagrant_11_reload_issues")
    opts.merge!({:auto_reboot => false})
  end
  opts
end