class VagrantVbguest::Installers::Base

This is the base class all installers must inherit from It defines the basic structure of an Installer and should never be used directly

Attributes

env[R]
host[R]
options[R]
vm[R]

Public Class Methods

distro(vm) click to toggle source

A helper method to cache the result of {Vagrant::Guest::Base#distro_dispatch} which speeds up Installer detection runs a lot, when having lots of Linux based Installer classes to check.

@see {Vagrant::Guest::Linux#distro_dispatch} @return [Symbol] One of ‘:debian`, `:ubuntu`, `:gentoo`, `:fedora`, `:redhat`, `:suse`, `:arch`, `:windows`, `:amazon`

# File lib/vagrant-vbguest/installers/base.rb, line 37
def self.distro(vm)
  @@distro ||= {}
  @@distro[ vm_id(vm) ] ||= distro_name vm
end
match?(vm) click to toggle source

Tests whether this installer class is applicable to the current environment. Usually, testing for a specific OS. Subclasses must override this method and return ‘true` if they wish to handle.

This method will be called only when an Installer detection is run. It is ignored, when passing an Installer class directly as an config (‘installer`) option.

@param vm [Vagrant::VM] @return [Boolean]

# File lib/vagrant-vbguest/installers/base.rb, line 26
def self.match?(vm)
  false
end
new(vm, options=nil) click to toggle source
# File lib/vagrant-vbguest/installers/base.rb, line 44
def initialize(vm, options=nil)
  @vm = vm
  @env = vm.env
  @options = options

  @host = VagrantVbguest::Hosts::VirtualBox.new(vm, options)
end

Public Instance Methods

additions_file()
Alias for: iso_file
cleanup(opts, &block) click to toggle source

A helper method to delete the uploaded GuestAdditions iso file from the guest box

# File lib/vagrant-vbguest/installers/base.rb, line 242
def cleanup(opts, &block)
  unless options[:no_cleanup]
    @host.cleanup

    opts = (opts || {}).merge(:error_check => false)
    block ||= proc { |type, data| env.ui.error(data.chomp, :prefix => false) }
    communicate.execute("test -f #{tmp_path} && rm #{tmp_path}", opts, &block)
  end
end
guest_version(reload=false) click to toggle source

Determinates the GuestAdditions version installed on the guest system.

@param reload [Boolean] Whether to read the value again or use

the cached value form an earlier call.

@return [Gem::Version] The version code of the VirtualBox Guest Additions

available on the guest, or `nil` if none installed.
# File lib/vagrant-vbguest/installers/base.rb, line 155
def guest_version(reload=false)
  return @guest_version if @guest_version && !reload

  @guest_version = VagrantVbguest::Version(@host.read_guest_additions_version)
end
host_version(reload=false) click to toggle source

Determinates the host (eg VirtualBox) version @param reload [Boolean] Whether to read the value again or use

the cached value form an earlier call.

@return [Gem::Version] The version code of the host provider

# File lib/vagrant-vbguest/installers/base.rb, line 165
def host_version(reload=false)
  return @host_version if @host_version && !reload

  @host_version = VagrantVbguest::Version(@host.version)
end
install(opts=nil, &block) click to toggle source

Handles the installation process. All necessary steps for an installation must be defined here. This includes uploading the iso into the box, mounting, installing and cleaning up. The path to the local iso file should be obtained by calling iso_file Subclasses must override this method!

@param opts [Hash] Optional options Hash wich meight get passed to {Vagrant::Communication::SSH#execute} and firends @yield [type, data] Takes a Block like {Vagrant::Communication::Base#execute} for realtime output of the command being executed @yieldparam [String] type Type of the output, ‘:stdout`, `:stderr`, etc. @yieldparam [String] data Data for the given output.

# File lib/vagrant-vbguest/installers/base.rb, line 78
def install(opts=nil, &block)
end
installer_options() click to toggle source
# File lib/vagrant-vbguest/installers/base.rb, line 184
def installer_options
  options[:installer_options] || {}
end
installer_version(path_to_installer) click to toggle source

Determinates the version of the GuestAdditions installer in use

@return [Gem::Version] The version code of the GuestAdditions installer

# File lib/vagrant-vbguest/installers/base.rb, line 175
def installer_version(path_to_installer)
  version = nil
  communicate.sudo("#{path_to_installer} --info", :error_check => false) do |type, data|
    v = VagrantVbguest::Version(data, /\AIdentification.*\s(\d+\.\d+.\d+)/i)
    version = v if v
  end
  version
end
iso_file() click to toggle source
# File lib/vagrant-vbguest/installers/base.rb, line 222
def iso_file
  @host.additions_file
end
Also aliased as: additions_file
mount_point() click to toggle source

The mountpoint path Subclasses shall override this method, if they need to mount the uploaded file!

@return [String]

# File lib/vagrant-vbguest/installers/base.rb, line 64
def mount_point
end
provides_vboxadd_tools?() click to toggle source

Does the guest installer provide tooling to manually start or rebuild guest additions?

@return [Boolean]

# File lib/vagrant-vbguest/installers/base.rb, line 137
def provides_vboxadd_tools?
  false
end
reboot_after_install?() click to toggle source

This manipulate the run-list of a the vbguest machine.

@return [Boolean]

# File lib/vagrant-vbguest/installers/base.rb, line 130
def reboot_after_install?
  false
end
rebuild(opts=nil, &block) click to toggle source

Handels the rebuild of allready running GuestAdditions It may happen, that the guest has the correct GuestAdditions version running, but not the kernel module is not running. This method should perform a rebuild or try to reload the kernel module without the GuestAdditions iso file. If there is no way of rebuidling or reloading the GuestAdditions on a specific system, this method should left empty. Subclasses should override this method.

@param opts [Hash] Optional options Hash wich meight get passed to {Vagrant::Communication::SSH#execute} and firends @yield [type, data] Takes a Block like {Vagrant::Communication::Base#execute} for realtime output of the command being executed @yieldparam [String] type Type of the output, ‘:stdout`, `:stderr`, etc. @yieldparam [String] data Data for the given output.

# File lib/vagrant-vbguest/installers/base.rb, line 95
def rebuild(opts=nil, &block)
end
running?(opts=nil, &block) click to toggle source

Determinates if the GuestAdditions kernel module is loaded. This method tests if there is a working GuestAdditions kernel module. If there is none, {#rebuild} is being called. If there is no way of telling if there is a working GuestAddition for a specific system, this method should return ‘true`. Subclasses should override this method.

@return [Boolean] ‘true` if the kernel module is loaded (and thus seems to work), `false` otherwise.

# File lib/vagrant-vbguest/installers/base.rb, line 123
def running?(opts=nil, &block)
  true
end
start(opts=nil, &block) click to toggle source

Restarts the allready installed GuestAdditions It may happen, that the guest has the correct GuestAdditions version installed, but for some reason are not (yet) runnig. This method should execute the GuestAdditions system specific init script in order to start it manually. If there is no way of doing this on a specific system, this method should left empty. Subclasses should override this method.

@param opts [Hash] Optional options Hash wich meight get passed to {Vagrant::Communication::SSH#execute} and firends @yield [type, data] Takes a Block like {Vagrant::Communication::Base#execute} for realtime output of the command being executed @yieldparam [String] type Type of the output, ‘:stdout`, `:stderr`, etc. @yieldparam [String] data Data for the given output.

# File lib/vagrant-vbguest/installers/base.rb, line 111
def start(opts=nil, &block)
end
tmp_path() click to toggle source

The absolute file path of the GuestAdditions iso file should be uploaded into the guest. Subclasses must override this method!

@return [String]

# File lib/vagrant-vbguest/installers/base.rb, line 57
def tmp_path
end
upload(file) click to toggle source

A helper method to handle the GuestAdditions iso file upload into the guest box. The file will uploaded to the location given by the temp_path method.

@example Default upload

upload(file)

@param file [String] Path of the file to upload to the +tmp_path*

# File lib/vagrant-vbguest/installers/base.rb, line 235
def upload(file)
  env.ui.info(I18n.t("vagrant_vbguest.start_copy_iso", from: file, to: tmp_path))
  communicate.upload(file, tmp_path)
end
vboxadd_tools_available?() click to toggle source

Is the tooling to manually start or rebuild guest additions installed on the guest?

@return [Boolean]

# File lib/vagrant-vbguest/installers/base.rb, line 144
def vboxadd_tools_available?
  raise NotImplementedError
end
yield_installation_error_warning(path_to_installer) click to toggle source

Helper to yield a warning message to the user in the event that the installer returned a non-zero exit status. Because lack of a window system will cause this result in VirtualBox 4.2.8+, we don’t want to kill the entire boot process, but we do want to make sure the user knows there could be a problem. The message includles the installer version.

# File lib/vagrant-vbguest/installers/base.rb, line 214
def yield_installation_error_warning(path_to_installer)
  @env.ui.warn I18n.t(
    "vagrant_vbguest.install_error",
    installer_version: (installer_version(path_to_installer) || I18n.t("vagrant_vbguest.unknown")))
end
Also aliased as: yield_installation_waring
yield_installation_waring(path_to_installer)

alias to old method name (containing a typo) for backwards compatibility

yield_installation_warning(path_to_installer) click to toggle source

Helper to yield a warning message to the user, that the installation will start now. The message includes the host and installer version strings.

# File lib/vagrant-vbguest/installers/base.rb, line 191
def yield_installation_warning(path_to_installer)
  @env.ui.warn I18n.t(
    "vagrant_vbguest.installing#{@options[:force] ? '_forced' : ''}",
    guest_version: (guest_version || I18n.t("vagrant_vbguest.unknown")),
    installer_version: (installer_version(path_to_installer) || I18n.t("vagrant_vbguest.unknown")))
end
yield_rebuild_warning() click to toggle source

Helper to yield a warning message to the user, that the installation will be rebuild using the installed GuestAdditions. The message includes the host and installer version strings.

# File lib/vagrant-vbguest/installers/base.rb, line 201
def yield_rebuild_warning
  @env.ui.warn I18n.t(
    "vagrant_vbguest.rebuild#{@options[:force] ? '_forced' : ''}",
    :guest_version => guest_version(true),
    :host_version => @host.version)
end