vagrant-vbguest 0.2.1 → 0.3.0.pre

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,7 @@
1
1
  require 'vagrant'
2
+ require "vagrant-vbguest/errors"
2
3
  require "vagrant-vbguest/config"
4
+ require "vagrant-vbguest/detector"
3
5
  require "vagrant-vbguest/download"
4
6
  require "vagrant-vbguest/installer"
5
7
  require 'vagrant-vbguest/command'
@@ -4,7 +4,7 @@ module VagrantVbguest
4
4
 
5
5
  class Command < Vagrant::Command::Base
6
6
 
7
- # Executes the given rake command on the VMs that are represented
7
+ # Runs the vbguest installer on the VMs that are represented
8
8
  # by this environment.
9
9
  def execute
10
10
  options = {}
@@ -46,7 +46,7 @@ module VagrantVbguest
46
46
 
47
47
  # Executes a command on a specific VM.
48
48
  def execute_on_vm(vm, options)
49
- options.merge!(vm.config.vbguest.to_hash)
49
+ options = vm.config.vbguest.to_hash.merge(options)
50
50
  VagrantVbguest::Installer.new(vm, options).run!
51
51
  end
52
52
  end
@@ -1,5 +1,3 @@
1
- require 'virtualbox'
2
-
3
1
  module VagrantVbguest
4
2
 
5
3
  class Config < Vagrant::Config::Base
@@ -8,15 +6,10 @@ module VagrantVbguest
8
6
  attr_accessor :no_install
9
7
  attr_accessor :no_remote
10
8
 
11
- def iso_path; @iso_path ||= autodetect_iso; end
12
9
  def auto_update; @auto_update.nil? ? (@auto_update = true) : @auto_update; end
13
10
  def no_remote; @no_remote.nil? ? (@no_remote = false) : @no_remote; end
14
11
  def no_install; @no_install.nil? ? (@no_install = false): @no_install; end
15
-
16
- def validate(env, errors)
17
- errors.add(I18n.t("vagrant.plugins.vbguest.missing_iso_path")) unless iso_path && iso_path.is_a?(String)
18
- end
19
-
12
+
20
13
  # explicit hash, to get symbols in hash keys
21
14
  def to_hash
22
15
  {
@@ -27,33 +20,5 @@ module VagrantVbguest
27
20
  }
28
21
  end
29
22
 
30
- protected
31
-
32
- def autodetect_iso
33
- media_manager_iso || guess_iso || web_iso
34
- end
35
-
36
- def media_manager_iso
37
- dvd = VirtualBox::DVD.all.find do |d|
38
- !!(d.location =~ /VBoxGuestAdditions.iso$/)
39
- end
40
- dvd ? dvd.location : nil
41
- end
42
-
43
- def guess_iso
44
- path_platform = if Vagrant::Util::Platform.linux?
45
- "/usr/share/virtualbox/VBoxGuestAdditions.iso"
46
- elsif Vagrant::Util::Platform.darwin?
47
- "/Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso"
48
- elsif Vagrant::Util::Platform.windows?
49
- File.join((ENV["PROGRAM_FILES"] || ENV["PROGRAMFILES"]), "/Oracle/VirtualBox/VBoxGuestAdditions.iso")
50
- end
51
- File.exists?(path_platform) ? path_platform : nil
52
- end
53
-
54
- def web_iso
55
- "http://download.virtualbox.org/virtualbox/$VBOX_VERSION/VBoxGuestAdditions_$VBOX_VERSION.iso" unless !no_remote
56
- end
57
-
58
23
  end
59
24
  end
@@ -0,0 +1,42 @@
1
+ module VagrantVbguest
2
+
3
+ class Detector
4
+
5
+ def initialize(vm, options)
6
+ @vm = vm
7
+ @options = options
8
+ end
9
+
10
+ def iso_path
11
+ @iso_path ||= autodetect_iso
12
+ end
13
+
14
+ private
15
+
16
+ def autodetect_iso
17
+ path = media_manager_iso || guess_iso || web_iso
18
+ raise VagrantVbguest::IsoPathAutodetectionError if !path || path.empty?
19
+ path
20
+ end
21
+
22
+ def media_manager_iso
23
+ (m = @vm.driver.execute('list', 'dvds').match(/^.+:\s+(?<path>.*VBoxGuestAdditions.iso)$/i)) && m[:path]
24
+ end
25
+
26
+ def guess_iso
27
+ path_platform = if Vagrant::Util::Platform.linux?
28
+ "/usr/share/virtualbox/VBoxGuestAdditions.iso"
29
+ elsif Vagrant::Util::Platform.darwin?
30
+ "/Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso"
31
+ elsif Vagrant::Util::Platform.windows?
32
+ File.join((ENV["PROGRAM_FILES"] || ENV["PROGRAMFILES"]), "/Oracle/VirtualBox/VBoxGuestAdditions.iso")
33
+ end
34
+ File.exists?(path_platform) ? path_platform : nil
35
+ end
36
+
37
+ def web_iso
38
+ "http://download.virtualbox.org/virtualbox/$VBOX_VERSION/VBoxGuestAdditions_$VBOX_VERSION.iso" unless @options[:no_remote]
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,14 @@
1
+ module VagrantVbguest
2
+
3
+ class VbguestError < Vagrant::Errors::VagrantError
4
+ def error_namespace; "vagrant.plugins.vbguest.errors"; end
5
+ end
6
+
7
+ class IsoPathAutodetectionError < VagrantVbguest::VbguestError
8
+ error_key :autodetect_iso_path
9
+ end
10
+
11
+ class DownloadingDisabledError < VagrantVbguest::VbguestError
12
+ error_key :downloading_disabled
13
+ end
14
+ end
@@ -10,8 +10,8 @@ module VagrantVbguest
10
10
  :tmp_path => vm.env.tmp_path
11
11
  }
12
12
  @vm = vm
13
- @options = options
14
13
  @iso_path = nil
14
+ @options = options
15
15
  end
16
16
 
17
17
  def run!
@@ -36,6 +36,8 @@ module VagrantVbguest
36
36
  # the whole installation process should be put into own classes
37
37
  # like the vagrant system loading
38
38
  if (i_script = installer_script)
39
+ @options[:iso_path] ||= VagrantVbguest::Detector.new(@vm, @options).iso_path
40
+
39
41
  @vm.ui.info(I18n.t("vagrant.plugins.vbguest.start_copy_iso", :from => iso_path, :to => iso_destination))
40
42
  @vm.channel.upload(iso_path, iso_destination)
41
43
 
@@ -98,6 +100,8 @@ module VagrantVbguest
98
100
  if local_iso?
99
101
  @env[:iso_url]
100
102
  else
103
+ # :TODO: This will also raise, if the iso_url points to an invalid local path
104
+ raise VagrantVbguest::DownloadingDisabledError.new(:from => @env[:iso_url]) if @options[:no_remote]
101
105
  @download = VagrantVbguest::Download.new(@env)
102
106
  @download.download
103
107
  @download.temp_path
@@ -1,3 +1,3 @@
1
1
  module VagrantVbguest
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0.pre"
3
3
  end
data/locales/en.yml CHANGED
@@ -10,14 +10,22 @@ en:
10
10
  start_copy_script: "Copy installer file %{from} into the box %{to}"
11
11
  no_install_script_for_platform: "Sorry, don't know how to install on a %{platform} system. Stopping installation."
12
12
  generic_install_script_for_platform: "%{platform} is currently not supported, will try generic Linux method..."
13
-
14
- validation_errors:
15
- missing_iso_path: |-
16
- Could not autodetect the correct location of the Virtualbox Guest Additions
17
- ISO File. Please correct or configure using `config.vbguest.iso_path`.
18
- If you think this is a bug in vbguest and we could guessed the iso_path,
13
+
14
+ errors:
15
+ autodetect_iso_path: |-
16
+ Could not autodetect a local of the Virtualbox Guest Additions iso file.
17
+ Please configure a local path to the iso using `config.vbguest.iso_path`
18
+ in your Vagrantfile or the `--iso` command line option.
19
+ If you think this is a bug and vbguest could have guessed the iso_path,
19
20
  please file a bug: https://github.com/dotless-de/vagrant-vbguest/issues
20
21
 
22
+ downloading_disabled: |-
23
+ Could not locate a local Virtualbox Guest Additions iso file.
24
+ However, the no_remote option was set and thus I will downlownload it from
25
+ %{from}
26
+ Please configure a local path to the iso using `config.vbguest.iso_path`
27
+ in your Vagrantfile or the `--iso` command line option.
28
+
21
29
  download:
22
30
  with: "Downloading VirtualBox Guest Additions ISO with %{class}..."
23
31
  cleaning: "Cleaning up downloaded VirtualBox Guest Additions ISO..."
@@ -20,7 +20,6 @@ Gem::Specification.new do |s|
20
20
  # s.add_development_dependency "rspec"
21
21
  # s.add_runtime_dependency "rest-client"
22
22
 
23
- s.add_dependency "virtualbox", "~> 0.9.1"
24
23
  s.add_dependency "vagrant", ">= 0.9.4"
25
24
  s.add_development_dependency "bundler", ">= 1.0.0"
26
25
 
metadata CHANGED
@@ -1,30 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-vbguest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
5
- prerelease:
4
+ version: 0.3.0.pre
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Robert Schulze
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-12 00:00:00.000000000Z
12
+ date: 2012-04-03 00:00:00.000000000Z
13
13
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: virtualbox
16
- requirement: &70316106858200 !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: 0.9.1
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: *70316106858200
25
14
  - !ruby/object:Gem::Dependency
26
15
  name: vagrant
27
- requirement: &70316106857700 !ruby/object:Gem::Requirement
16
+ requirement: &70272787293680 !ruby/object:Gem::Requirement
28
17
  none: false
29
18
  requirements:
30
19
  - - ! '>='
@@ -32,10 +21,10 @@ dependencies:
32
21
  version: 0.9.4
33
22
  type: :runtime
34
23
  prerelease: false
35
- version_requirements: *70316106857700
24
+ version_requirements: *70272787293680
36
25
  - !ruby/object:Gem::Dependency
37
26
  name: bundler
38
- requirement: &70316106857220 !ruby/object:Gem::Requirement
27
+ requirement: &70272787293160 !ruby/object:Gem::Requirement
39
28
  none: false
40
29
  requirements:
41
30
  - - ! '>='
@@ -43,7 +32,7 @@ dependencies:
43
32
  version: 1.0.0
44
33
  type: :development
45
34
  prerelease: false
46
- version_requirements: *70316106857220
35
+ version_requirements: *70272787293160
47
36
  description: A Vagrant plugin wich automatically installs the host's VirtualBox Guest
48
37
  Additions on the guest system.
49
38
  email:
@@ -62,7 +51,9 @@ files:
62
51
  - lib/vagrant-vbguest.rb
63
52
  - lib/vagrant-vbguest/command.rb
64
53
  - lib/vagrant-vbguest/config.rb
54
+ - lib/vagrant-vbguest/detector.rb
65
55
  - lib/vagrant-vbguest/download.rb
56
+ - lib/vagrant-vbguest/errors.rb
66
57
  - lib/vagrant-vbguest/installer.rb
67
58
  - lib/vagrant-vbguest/middleware.rb
68
59
  - lib/vagrant-vbguest/version.rb