Class: VagrantVbguest::Installer

Inherits:
Object
  • Object
show all
Defined in:
lib/vagrant-vbguest/installer.rb

Overview

Dispatches the installation process to a rigistered Installer implementation.

Defined Under Namespace

Classes: NoInstallerFoundError

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(vm, options = {}) ⇒ Installer

Returns a new instance of Installer.



49
50
51
52
53
54
# File 'lib/vagrant-vbguest/installer.rb', line 49

def initialize(vm, options = {})
  @vm = vm
  @env = vm.env
  @options = options
  @iso_path = nil
end

Class Method Details

.detect(vm, options) ⇒ Object

Returns the class of the registrated Installer class which matches first (according to it’s priority) or ‘nil` if none matches.



40
41
42
43
44
45
46
# File 'lib/vagrant-vbguest/installer.rb', line 40

def detect(vm, options)
  @installers.keys.sort.reverse.each do |prio|
    klass = @installers[prio].detect { |k| k.match?(vm) }
    return klass if klass
  end
  return nil
end

.register(installer_class, prio = 5) ⇒ Object

Register an Installer implementation. All Installer classes which wish to get picked automaticly using their ‘#match?` method have to register. Ad-hoc or small custom Installer meight not need to get registered, but need to get passed as an config option (`installer`)

Registration takes a priority which defines how specific the Installer matches a system. Low level installers, like “linux” or “bsd” use a small priority (2), while distribution installers use higher priority (5). Installers matching a specific version of a distribution should use heigher priority numbers.

Parameters:

  • installer_class (Class)

    A reference to the Installer class.

  • prio (Fixnum) (defaults to: 5)

    Priority describing how specific the Installer matches. (default: ‘5`)



31
32
33
34
35
# File 'lib/vagrant-vbguest/installer.rb', line 31

def register(installer_class, prio = 5)
  @installers ||= {}
  @installers[prio] ||= []
  @installers[prio] << installer_class
end

Instance Method Details

#cleanupObject



116
117
118
# File 'lib/vagrant-vbguest/installer.rb', line 116

def cleanup
  @guest_installer.cleanup if @guest_installer
end

#guest_installerInstallers::Base

Returns an installer instance for the current vm This is either the one configured via ‘installer` option or detected from all registered installers (see detect)

Returns:



108
109
110
111
112
113
114
# File 'lib/vagrant-vbguest/installer.rb', line 108

def guest_installer
  @guest_installer ||= if @options[:installer].is_a? Class
    @options[:installer].new(@vm, @options)
  else
    installer_klass = Installer.detect(@vm, @options) and installer_klass.new(@vm, @options)
  end
end

#guest_version(reload = false) ⇒ Object



85
86
87
88
89
# File 'lib/vagrant-vbguest/installer.rb', line 85

def guest_version(reload=false)
  installer = guest_installer
  raise NoInstallerFoundError, :method => 'check guest version of' if !installer
  installer.guest_version(reload)
end

#host_versionObject



91
92
93
94
95
# File 'lib/vagrant-vbguest/installer.rb', line 91

def host_version
  installer = guest_installer
  raise NoInstallerFoundError, :method => 'check host version of' if !installer
  installer.host.version
end

#installObject



56
57
58
59
60
61
62
63
64
65
# File 'lib/vagrant-vbguest/installer.rb', line 56

def install
  installer = guest_installer
  raise NoInstallerFoundError, :method => 'install' if !installer

  installer.install do |type, data|
    @env.ui.info(data, :prefix => false, :new_line => false)
  end
ensure
  cleanup
end

#rebuildObject



67
68
69
70
71
72
73
74
# File 'lib/vagrant-vbguest/installer.rb', line 67

def rebuild
  installer = guest_installer
  raise NoInstallerFoundError, :method => 'rebuild' if !installer

  installer.rebuild do |type, data|
    @env.ui.info(data, :prefix => false, :new_line => false)
  end
end

#running?Boolean

Returns:

  • (Boolean)

Raises:



97
98
99
100
101
# File 'lib/vagrant-vbguest/installer.rb', line 97

def running?
  installer = guest_installer
  raise NoInstallerFoundError, :method => 'check current state of' if !installer
  installer.running?
end

#startObject



76
77
78
79
80
81
82
83
# File 'lib/vagrant-vbguest/installer.rb', line 76

def start
  installer = guest_installer
  raise NoInstallerFoundError, :method => 'manual start' if !installer

  installer.start do |type, data|
    @env.ui.info(data, :prefix => false, :new_line => false)
  end
end