Class: VagrantVbguest::Installers::Base
- Inherits:
-
Object
- Object
- VagrantVbguest::Installers::Base
- Includes:
- Helpers::VmCompatible
- Defined in:
- lib/vagrant-vbguest/installers/base.rb
Overview
This is the base class all installers must inherit from It defines the basic structure of an Installer and should never be used directly
Instance Attribute Summary collapse
-
#env ⇒ Object
readonly
Returns the value of attribute env.
-
#host ⇒ Object
readonly
Returns the value of attribute host.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#vm ⇒ Object
readonly
Returns the value of attribute vm.
Class Method Summary collapse
-
.distro(vm) ⇒ Symbol
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.
-
.match?(vm) ⇒ Boolean
Tests whether this installer class is applicable to the current environment.
Instance Method Summary collapse
-
#cleanup(opts, &block) ⇒ Object
A helper method to delete the uploaded GuestAdditions iso file from the guest box.
-
#guest_version(reload = false) ⇒ Gem::Version
Determinates the GuestAdditions version installed on the guest system.
-
#host_version(reload = false) ⇒ Gem::Version
Determinates the host (eg VirtualBox) version.
-
#initialize(vm, options = nil) ⇒ Base
constructor
A new instance of Base.
-
#install(opts = nil) {|type, data| ... } ⇒ Object
Handles the installation process.
- #installer_options ⇒ Object
-
#installer_version(path_to_installer) ⇒ Gem::Version
Determinates the version of the GuestAdditions installer in use.
- #iso_file ⇒ Object (also: #additions_file)
-
#mount_point ⇒ String
The mountpoint path Subclasses shall override this method, if they need to mount the uploaded file!.
-
#provides_vboxadd_tools? ⇒ Boolean
Does the guest installer provide tooling to manually start or rebuild guest additions?.
-
#reboot_after_install? ⇒ Boolean
This manipulate the run-list of a the vbguest machine.
-
#rebuild(opts = nil) {|type, data| ... } ⇒ Object
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.
-
#running?(opts = nil, &block) ⇒ Boolean
Determinates if the GuestAdditions kernel module is loaded.
-
#start(opts = nil) {|type, data| ... } ⇒ Object
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.
-
#tmp_path ⇒ String
The absolute file path of the GuestAdditions iso file should be uploaded into the guest.
-
#upload(file) ⇒ Object
A helper method to handle the GuestAdditions iso file upload into the guest box.
-
#vboxadd_tools_available? ⇒ Boolean
Is the tooling to manually start or rebuild guest additions installed on the guest?.
-
#yield_installation_error_warning(path_to_installer) ⇒ Object
(also: #yield_installation_waring)
Helper to yield a warning message to the user in the event that the installer returned a non-zero exit status.
-
#yield_installation_warning(path_to_installer) ⇒ Object
Helper to yield a warning message to the user, that the installation will start now.
-
#yield_rebuild_warning ⇒ Object
Helper to yield a warning message to the user, that the installation will be rebuild using the installed GuestAdditions.
Methods included from Helpers::VmCompatible
#communicate, #driver, included
Constructor Details
#initialize(vm, options = nil) ⇒ Base
Returns a new instance of Base.
44 45 46 47 48 49 50 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 44 def initialize(vm, =nil) @vm = vm @env = vm.env @options = @host = VagrantVbguest::Hosts::VirtualBox.new(vm, ) end |
Instance Attribute Details
#env ⇒ Object (readonly)
Returns the value of attribute env.
42 43 44 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 42 def env @env end |
#host ⇒ Object (readonly)
Returns the value of attribute host.
42 43 44 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 42 def host @host end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
42 43 44 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 42 def @options end |
#vm ⇒ Object (readonly)
Returns the value of attribute vm.
42 43 44 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 42 def vm @vm end |
Class Method Details
.distro(vm) ⇒ Symbol
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.
37 38 39 40 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 37 def self.distro(vm) @@distro ||= {} @@distro[ vm_id(vm) ] ||= distro_name vm end |
.match?(vm) ⇒ Boolean
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.
26 27 28 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 26 def self.match?(vm) false end |
Instance Method Details
#cleanup(opts, &block) ⇒ Object
A helper method to delete the uploaded GuestAdditions iso file from the guest box
242 243 244 245 246 247 248 249 250 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 242 def cleanup(opts, &block) unless [: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) ⇒ Gem::Version
Determinates the GuestAdditions version installed on the guest system.
155 156 157 158 159 |
# 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) ⇒ Gem::Version
Determinates the host (eg VirtualBox) version
165 166 167 168 169 |
# 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) {|type, data| ... } ⇒ Object
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!
78 79 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 78 def install(opts=nil, &block) end |
#installer_options ⇒ Object
184 185 186 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 184 def [:installer_options] || {} end |
#installer_version(path_to_installer) ⇒ Gem::Version
Determinates the version of the GuestAdditions installer in use
175 176 177 178 179 180 181 182 |
# 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 ⇒ Object Also known as: additions_file
222 223 224 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 222 def iso_file @host.additions_file end |
#mount_point ⇒ String
The mountpoint path Subclasses shall override this method, if they need to mount the uploaded file!
64 65 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 64 def mount_point end |
#provides_vboxadd_tools? ⇒ Boolean
Does the guest installer provide tooling to manually start or rebuild guest additions?
137 138 139 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 137 def provides_vboxadd_tools? false end |
#reboot_after_install? ⇒ Boolean
This manipulate the run-list of a the vbguest machine.
130 131 132 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 130 def reboot_after_install? false end |
#rebuild(opts = nil) {|type, data| ... } ⇒ Object
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.
95 96 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 95 def rebuild(opts=nil, &block) end |
#running?(opts = nil, &block) ⇒ Boolean
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.
123 124 125 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 123 def running?(opts=nil, &block) true end |
#start(opts = nil) {|type, data| ... } ⇒ Object
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.
111 112 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 111 def start(opts=nil, &block) end |
#tmp_path ⇒ String
The absolute file path of the GuestAdditions iso file should be uploaded into the guest. Subclasses must override this method!
57 58 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 57 def tmp_path end |
#upload(file) ⇒ Object
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.
235 236 237 238 |
# 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? ⇒ Boolean
Is the tooling to manually start or rebuild guest additions installed on the guest?
144 145 146 |
# File 'lib/vagrant-vbguest/installers/base.rb', line 144 def vboxadd_tools_available? raise NotImplementedError end |
#yield_installation_error_warning(path_to_installer) ⇒ Object Also known as: yield_installation_waring
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.
214 215 216 217 218 |
# 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 |
#yield_installation_warning(path_to_installer) ⇒ Object
Helper to yield a warning message to the user, that the installation will start now. The message includes the host and installer version strings.
191 192 193 194 195 196 |
# 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 ⇒ Object
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.
201 202 203 204 205 206 |
# 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 |