Class: VagrantVbguest::Installer
- Inherits:
-
Object
- Object
- VagrantVbguest::Installer
- 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
-
.detect(vm, options) ⇒ Object
Returns the class of the registered Installer class which matches first (according to it’s priority) or ‘nil` if none matches.
-
.register(installer_class, prio = 5) ⇒ Object
Register an Installer implementation.
Instance Method Summary collapse
- #cleanup ⇒ Object
-
#guest_installer ⇒ Installers::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 Installer.detect).
- #guest_version(reload = false) ⇒ Object
- #host_version ⇒ Object
-
#initialize(vm, options = {}) ⇒ Installer
constructor
A new instance of Installer.
- #install ⇒ Object
- #rebuild ⇒ Object
- #running? ⇒ Boolean
- #start ⇒ Object
Constructor Details
#initialize(vm, options = {}) ⇒ Installer
Returns a new instance of Installer.
52 53 54 55 56 57 |
# File 'lib/vagrant-vbguest/installer.rb', line 52 def initialize(vm, = {}) @vm = vm @env = vm.env @options = @iso_path = nil end |
Class Method Details
.detect(vm, options) ⇒ Object
Returns the class of the registered Installer class which matches first (according to it’s priority) or ‘nil` if none matches.
43 44 45 46 47 48 49 |
# File 'lib/vagrant-vbguest/installer.rb', line 43 def detect(vm, ) @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.
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
#cleanup ⇒ Object
119 120 121 |
# File 'lib/vagrant-vbguest/installer.rb', line 119 def cleanup @guest_installer.cleanup if @guest_installer end |
#guest_installer ⇒ Installers::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)
111 112 113 114 115 116 117 |
# File 'lib/vagrant-vbguest/installer.rb', line 111 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
88 89 90 91 92 |
# File 'lib/vagrant-vbguest/installer.rb', line 88 def guest_version(reload=false) installer = guest_installer raise NoInstallerFoundError, :method => 'check guest version of' if !installer installer.guest_version(reload) end |
#host_version ⇒ Object
94 95 96 97 98 |
# File 'lib/vagrant-vbguest/installer.rb', line 94 def host_version installer = guest_installer raise NoInstallerFoundError, :method => 'check host version of' if !installer installer.host.version end |
#install ⇒ Object
59 60 61 62 63 64 65 66 67 68 |
# File 'lib/vagrant-vbguest/installer.rb', line 59 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 |
#rebuild ⇒ Object
70 71 72 73 74 75 76 77 |
# File 'lib/vagrant-vbguest/installer.rb', line 70 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
100 101 102 103 104 |
# File 'lib/vagrant-vbguest/installer.rb', line 100 def running? installer = guest_installer raise NoInstallerFoundError, :method => 'check current state of' if !installer installer.running? end |
#start ⇒ Object
79 80 81 82 83 84 85 86 |
# File 'lib/vagrant-vbguest/installer.rb', line 79 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 |