vagrant-vbguest 0.7.0.pre0 → 0.7.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,4 +1,17 @@
1
1
  *.gem
2
+ *.rbc
2
3
  .bundle
4
+ .config
5
+ .yardoc
3
6
  Gemfile.lock
4
- pkg/*
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
@@ -1,9 +1,20 @@
1
1
  ## 0.7.0
2
2
 
3
+ - When looking for a GuestAdditions iso file in media manager
4
+ allow version number in filename. [GH-48], [GH-49] /
5
+ (thanks @neerolyte)
6
+ - Support multiple locations to be searched while "guessing"
7
+ GuestAdditions iso file
8
+ - On Linux guests also search "$HOME/.VirtualBox" for
9
+ GuestAdditions iso file. [GH-48]
3
10
  - Add support for redhat-based distributions (Scientific Linux and
4
11
  presumably CentOS) [GH-47], [GH-46] / (thanks @neerolyte)
5
12
  - Fix an issue with VirtualBox GuestAdditions 4.2.8 [GH-44] /
6
13
  (thanks @jimmycuadra)
14
+ - Reworked bunch of internals, particularly how vagrants's
15
+ environemnt is passed arround
16
+ - Intodruce a vagrant 1.0 compatibility layer for Installers and
17
+ other vbguest internals
7
18
 
8
19
  ### heads-up
9
20
 
@@ -11,6 +22,17 @@
11
22
  will no longer halt vagrant workflow if running the VirtualBox
12
23
  GuestAdditions Installer returns an error-code.
13
24
  Instead it will print a human readable waring message.
25
+ - The environment (`env`) in custom installers is no longer the
26
+ actions environment `Hash`, but the `Environment` instance.
27
+ Which has some implications on how you can access e.g. the `ui`:
28
+ instead of `env[:ui]` use `env.ui`
29
+ - To achieve compatibility to both vagrant 1.0 and 1.1, custom
30
+ Installers, when executing shell commands on the guest system,
31
+ should use vbguests `communicate` wrapper. e.g.:
32
+ A call like `vm.channel.sudo 'apt-get update'` should be
33
+ changed to `channel.sudo 'apt-get update'`
34
+ The old `vm.channel` syntax will continue to work on vagrant 1.0.x
35
+ but will fail on vagrant 1.1.x.
14
36
 
15
37
  ## 0.6.4 (2013-01-24)
16
38
 
@@ -121,4 +143,4 @@
121
143
 
122
144
  ## Previous (≤ 0.0.3)
123
145
 
124
- - Vagrant 0.8 support
146
+ - Vagrant 0.8 support
data/Gemfile CHANGED
@@ -1,3 +1,11 @@
1
- source "http://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
- gemspec
3
+ # Specify your gem's dependencies in vagrant-vbguest.gemspec
4
+ gemspec
5
+
6
+ group :development do
7
+ # We depend on Vagrant for development, but we don't add it as a
8
+ # gem dependency because we expect to be installed within the
9
+ # Vagrant environment itself using `vagrant plugin`.
10
+ gem "vagrant", :git => "git://github.com/mitchellh/vagrant.git", :tag => 'v1.1.2'
11
+ end
data/Rakefile CHANGED
@@ -1 +1,11 @@
1
- require "bundler/gem_tasks"
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ # Immediately sync all stdout so that tools like buildbot can
5
+ # immediately load in the output.
6
+ $stdout.sync = true
7
+ $stderr.sync = true
8
+
9
+ # This installs the tasks that help with gem creation and
10
+ # publishing.
11
+ Bundler::GemHelper.install_tasks
data/Readme.md CHANGED
@@ -4,8 +4,17 @@
4
4
 
5
5
  ## Installation
6
6
 
7
- Requires vagrant 0.9.4 or later (including 1.0)
8
- Since vagrant v1.0.0 the preferred installation method for vagrant is using the provided packages or installers.
7
+ Requires vagrant 0.9.4 or later (including 1.0 and 1.1)
8
+
9
+ On Vagrant 1.1.x use:
10
+
11
+ ```bash
12
+ $ vagrant plugin install vagrant-vbguest
13
+ ```
14
+
15
+ ### Vagrant 1.0 and older
16
+
17
+ Since vagrant v1.0.0 the preferred installation method for vagrant is using the provided packages or installers.
9
18
  If you installed vagrant that way, you need to use vagrant's gem wrapper:
10
19
 
11
20
  ```bash
@@ -213,10 +222,6 @@ Installers take care of the whole installation process, that includes where to s
213
222
  ```ruby
214
223
  class MyInstaller < VagrantVbguest::Installers::Linux
215
224
 
216
- def self.match?(vm)
217
- super && vm.channel.test("test -d /temp")
218
- end
219
-
220
225
  # use /temp instead of /tmp
221
226
  def tmp_path
222
227
  '/temp/VBoxGuestAdditions.iso'
@@ -226,6 +231,14 @@ class MyInstaller < VagrantVbguest::Installers::Linux
226
231
  def mount_point
227
232
  '/media'
228
233
  end
234
+
235
+ def install(opts=nil, &block)
236
+ communicate.sudo('my_distos_way_of_preparing_guestadditions_installation', opts, &block)
237
+ # calling `super` will run the installation
238
+ # also it takes care of uploading the right iso file into the box
239
+ # and cleaning up afterward
240
+ super
241
+ end
229
242
  end
230
243
 
231
244
  Vagrant::Config.run do |config|
@@ -1,6 +1,12 @@
1
- require 'vagrant-vbguest/core_ext/string/interpolate'
1
+ begin
2
+ require "vagrant"
3
+ rescue LoadError
4
+ raise "The Vagrant VBGuest plugin must be run within Vagrant."
5
+ end
6
+
7
+ # Add our custom translations to the load path
8
+ I18n.load_path << File.expand_path("../../locales/en.yml", __FILE__)
2
9
 
3
- require 'vagrant'
4
10
  require "vagrant-vbguest/errors"
5
11
  require 'vagrant-vbguest/helpers'
6
12
 
@@ -13,17 +19,34 @@ require 'vagrant-vbguest/installers/debian'
13
19
  require 'vagrant-vbguest/installers/ubuntu'
14
20
  require 'vagrant-vbguest/installers/redhat'
15
21
 
16
- require 'vagrant-vbguest/config'
17
- require 'vagrant-vbguest/command'
18
22
  require 'vagrant-vbguest/middleware'
19
23
 
20
24
  require 'vagrant-vbguest/download'
21
25
 
22
- Vagrant.config_keys.register(:vbguest) { VagrantVbguest::Config }
23
-
24
- Vagrant.commands.register(:vbguest) { VagrantVbguest::Command }
25
-
26
- Vagrant.actions[:start].use VagrantVbguest::Middleware
27
-
28
- # Add our custom translations to the load path
29
- I18n.load_path << File.expand_path("../../locales/en.yml", __FILE__)
26
+ module VagrantVbguest
27
+
28
+ class Plugin < Vagrant.plugin("2")
29
+
30
+ name "vbguest management"
31
+ description <<-DESC
32
+ Provides automatic and/or manual management of the
33
+ VirtualBox Guest Additions inside the Vagrant environment.
34
+ DESC
35
+
36
+ config('vbguest') do
37
+ require File.expand_path("../vagrant-vbguest/config", __FILE__)
38
+ Config
39
+ end
40
+
41
+ command('vbguest') do
42
+ require File.expand_path("../vagrant-vbguest/command", __FILE__)
43
+ Command
44
+ end
45
+
46
+ # hook after anything that boots:
47
+ # that's all middlewares which will run the buildin "VM::Boot" action
48
+ action_hook(self::ALL_ACTIONS) do |hook|
49
+ hook.after(VagrantPlugins::ProviderVirtualBox::Action::Boot, VagrantVbguest::Middleware)
50
+ end
51
+ end
52
+ end
@@ -1,10 +1,8 @@
1
1
  require 'optparse'
2
- require 'vagrant/command/start_mixins'
3
2
 
4
3
  module VagrantVbguest
5
4
 
6
- class Command < Vagrant::Command::Base
7
- include Vagrant::Command::StartMixins
5
+ module CommandCommons
8
6
  include VagrantVbguest::Helpers::Rebootable
9
7
 
10
8
  # Runs the vbguest installer on the VMs that are represented
@@ -66,9 +64,7 @@ module VagrantVbguest
66
64
 
67
65
  # Executes a command on a specific VM.
68
66
  def execute_on_vm(vm, options)
69
- raise Vagrant::Errors::VMNotCreatedError if !vm.created?
70
- raise Vagrant::Errors::VMInaccessible if !vm.state == :inaccessible
71
- raise Vagrant::Errors::VMNotRunningError if vm.state != :running
67
+ check_runable_on(vm)
72
68
 
73
69
  options = options.clone
74
70
  _method = options.delete(:_method)
@@ -77,7 +73,7 @@ module VagrantVbguest
77
73
  options = vm.config.vbguest.to_hash.merge(options)
78
74
  machine = VagrantVbguest::Machine.new(vm, options)
79
75
  status = machine.state
80
- vm.ui.send((:ok == status ? :success : :warn), I18n.t("vagrant.plugins.vbguest.status.#{status}", machine.info))
76
+ vm.env.ui.send((:ok == status ? :success : :warn), I18n.t("vagrant.plugins.vbguest.status.#{status}", machine.info))
81
77
 
82
78
  if _method != :status
83
79
  machine.send(_method)
@@ -91,6 +87,40 @@ module VagrantVbguest
91
87
  vm.reload(options)
92
88
  end
93
89
  end
90
+
91
+ def check_runable_on(vm); end
92
+ end
93
+
94
+
95
+ if Vagrant::VERSION < "1.1.0"
96
+ require 'vagrant/command/start_mixins'
97
+
98
+ class Command < Vagrant::Command::Base
99
+ include CommandCommons
100
+ include Vagrant::Command::StartMixins
101
+
102
+ def check_runable_on(vm)
103
+ raise Vagrant::Errors::VMNotCreatedError if !vm.created?
104
+ raise Vagrant::Errors::VMInaccessible if !vm.state == :inaccessible
105
+ raise Vagrant::Errors::VMNotRunningError if vm.state != :running
106
+ end
107
+ end
108
+
109
+ else
110
+ require Vagrant.source_root.join("plugins/commands/up/start_mixins")
111
+
112
+ class Command < Vagrant.plugin("2", :command)
113
+ include CommandCommons
114
+ include VagrantPlugins::CommandUp::StartMixins
115
+
116
+ def check_runable_on(vm)
117
+ raise Vagrant::Errors::VMNotCreatedError if vm.state.id == :not_created
118
+ raise Vagrant::Errors::VMInaccessible if vm.state.id == :inaccessible
119
+ raise Vagrant::Errors::VMNotRunningError if vm.state.id != :running
120
+ raise VagrantVbguest::NoVirtualBoxMachineError if vm.provider.class != VagrantPlugins::ProviderVirtualBox::Provider
121
+ end
122
+ end
123
+
94
124
  end
95
125
 
96
126
  end
@@ -1,6 +1,6 @@
1
1
  module VagrantVbguest
2
2
 
3
- class Config < Vagrant::Config::Base
3
+ class Config <( Vagrant::VERSION < "1.1.0" ? Vagrant::Config::Base : Vagrant.plugin("2", :config) )
4
4
 
5
5
  module Attributes
6
6
  attr_accessor :iso_path, :auto_update, :auto_reboot, :no_install, :no_remote, :installer
@@ -3,7 +3,7 @@ module VagrantVbguest
3
3
  class VbguestError < Vagrant::Errors::VagrantError
4
4
  def error_namespace; "vagrant.plugins.vbguest.errors"; end
5
5
  end
6
-
6
+
7
7
  class IsoPathAutodetectionError < VagrantVbguest::VbguestError
8
8
  error_key :autodetect_iso_path
9
9
  end
@@ -11,4 +11,8 @@ module VagrantVbguest
11
11
  class DownloadingDisabledError < VagrantVbguest::VbguestError
12
12
  error_key :downloading_disabled
13
13
  end
14
- end
14
+
15
+ class NoVirtualBoxMachineError < VagrantVbguest::VbguestError
16
+ error_key :no_virtualbox_machine
17
+ end
18
+ end
@@ -1,10 +1,11 @@
1
1
  module VagrantVbguest
2
2
  module Helpers
3
+
3
4
  module Rebootable
4
5
  @@rebooted = {}
5
6
 
6
7
  def rebooted?(vm)
7
- !!@@rebooted[vm.uuid]
8
+ !!@@rebooted[ VmCompatible.vm_id(vm) ]
8
9
  end
9
10
 
10
11
  def reboot(vm, options)
@@ -13,7 +14,7 @@ module VagrantVbguest
13
14
  false
14
15
  elsif options[:auto_reboot]
15
16
  vm.ui.warn(I18n.t("vagrant.plugins.vbguest.restart_vm"))
16
- @@rebooted[vm.uuid] = true
17
+ @@rebooted[ VmCompatible.vm_id(vm) ] = true
17
18
  else
18
19
  vm.ui.warn(I18n.t("vagrant.plugins.vbguest.suggest_restart", :name => vm.name))
19
20
  false
@@ -21,5 +22,33 @@ module VagrantVbguest
21
22
  end
22
23
  end
23
24
 
25
+ module VmCompatible
26
+
27
+ if Vagrant::VERSION < '1.1.0'
28
+ def communicate
29
+ vm.channel
30
+ end
31
+
32
+ def driver
33
+ vm.driver
34
+ end
35
+
36
+ def self.vm_id(vm)
37
+ vm.uuid
38
+ end
39
+ else # Vagrant 1.1, and hopefully upwards
40
+ def communicate
41
+ vm.communicate
42
+ end
43
+
44
+ def driver
45
+ vm.provider.driver
46
+ end
47
+
48
+ def self.vm_id(vm)
49
+ vm.id
50
+ end
51
+ end
52
+ end
24
53
  end
25
- end
54
+ end
@@ -35,12 +35,12 @@ module VagrantVbguest
35
35
  end
36
36
 
37
37
  ##
38
- # Returns an instance of the registrated Installer class which
38
+ # Returns the class of the registrated Installer class which
39
39
  # matches first (according to it's priority) or `nil` if none matches.
40
40
  def detect(vm, options)
41
41
  @installers.keys.sort.reverse.each do |prio|
42
42
  klass = @installers[prio].detect { |k| k.match?(vm) }
43
- return klass.new(vm, options) if klass
43
+ return klass if klass
44
44
  end
45
45
  return nil
46
46
  end
@@ -48,12 +48,9 @@ module VagrantVbguest
48
48
 
49
49
  def initialize(vm, options = {})
50
50
  @vm = vm
51
+ @env = vm.env
51
52
  @options = options
52
53
  @iso_path = nil
53
- @env = {
54
- :ui => vm.ui,
55
- :tmp_path => vm.env.tmp_path
56
- }
57
54
  end
58
55
 
59
56
  def install
@@ -61,7 +58,7 @@ module VagrantVbguest
61
58
  raise NoInstallerFoundError, :method => 'install' if !installer
62
59
 
63
60
  installer.install do |type, data|
64
- @vm.ui.info(data, :prefix => false, :new_line => false)
61
+ @env.ui.info(data, :prefix => false, :new_line => false)
65
62
  end
66
63
  ensure
67
64
  cleanup
@@ -72,7 +69,7 @@ module VagrantVbguest
72
69
  raise NoInstallerFoundError, :method => 'rebuild' if !installer
73
70
 
74
71
  installer.rebuild do |type, data|
75
- @vm.ui.info(data, :prefix => false, :new_line => false)
72
+ @env.ui.info(data, :prefix => false, :new_line => false)
76
73
  end
77
74
  end
78
75
 
@@ -81,7 +78,7 @@ module VagrantVbguest
81
78
  raise NoInstallerFoundError, :method => 'manual start' if !installer
82
79
 
83
80
  installer.start do |type, data|
84
- @vm.ui.info(data, :prefix => false, :new_line => false)
81
+ @env.ui.info(data, :prefix => false, :new_line => false)
85
82
  end
86
83
  end
87
84
 
@@ -112,7 +109,7 @@ module VagrantVbguest
112
109
  @guest_installer ||= if @options[:installer].is_a? Class
113
110
  @options[:installer].new(@vm, @options)
114
111
  else
115
- Installer.detect(@vm, @options)
112
+ installer_klass = Installer.detect(@vm, @options) and installer_klass.new(@vm, @options)
116
113
  end
117
114
  end
118
115
 
@@ -8,6 +8,7 @@ module VagrantVbguest
8
8
  # It defines the basic structure of an Installer and should
9
9
  # never be used directly
10
10
  class Base
11
+ include VagrantVbguest::Helpers::VmCompatible
11
12
 
12
13
  # Tests whether this installer class is applicable to the
13
14
  # current environment. Usually, testing for a specific OS.
@@ -24,10 +25,11 @@ module VagrantVbguest
24
25
  false
25
26
  end
26
27
 
27
- attr_reader :vm, :options
28
+ attr_reader :env, :vm, :options
28
29
 
29
30
  def initialize(vm, options=nil)
30
31
  @vm = vm
32
+ @env = vm.env
31
33
  @options = options
32
34
  end
33
35
 
@@ -42,7 +44,7 @@ module VagrantVbguest
42
44
  # The mountpoint path
43
45
  # Subclasses shall override this method, if they need to mount the uploaded file!
44
46
  #
45
- # @retunn [String]
47
+ # @return [String]
46
48
  def mount_point
47
49
  end
48
50
 
@@ -116,7 +118,7 @@ module VagrantVbguest
116
118
  def guest_version(reload=false)
117
119
  return @guest_version if @guest_version && !reload
118
120
 
119
- guest_version = vm.driver.read_guest_additions_version
121
+ guest_version = driver.read_guest_additions_version
120
122
  guest_version = !guest_version ? nil : guest_version.gsub(/[-_]ose/i, '')
121
123
 
122
124
  @guest_version = guest_version
@@ -126,7 +128,7 @@ module VagrantVbguest
126
128
  #
127
129
  # @return [String] The version code of the Virtual Box *host*
128
130
  def host_version
129
- vm.driver.version
131
+ driver.version
130
132
  end
131
133
 
132
134
  # Determinates the version of the GuestAdditions installer in use
@@ -134,7 +136,7 @@ module VagrantVbguest
134
136
  # @return [String] The version code of the GuestAdditions installer
135
137
  def installer_version(path_to_installer)
136
138
  version = nil
137
- @vm.channel.sudo("#{path_to_installer} --info", :error_check => false) do |type, data|
139
+ communicate.sudo("#{path_to_installer} --info", :error_check => false) do |type, data|
138
140
  if (v = data.to_s.match(/\AIdentification.*\s(\d+\.\d+.\d+)/i))
139
141
  version = v[1]
140
142
  end
@@ -146,7 +148,7 @@ module VagrantVbguest
146
148
  # will start _now_.
147
149
  # The message includes the host and installer version strings.
148
150
  def yield_installation_waring(path_to_installer)
149
- @vm.ui.warn I18n.t("vagrant.plugins.vbguest.installing#{@options[:force] ? '_forced' : ''}",
151
+ @env.ui.warn I18n.t("vagrant.plugins.vbguest.installing#{@options[:force] ? '_forced' : ''}",
150
152
  :guest_version => guest_version,
151
153
  :installer_version => installer_version(path_to_installer) || I18n.t("vagrant.plugins.vbguest.unknown"))
152
154
  end
@@ -155,7 +157,7 @@ module VagrantVbguest
155
157
  # will be rebuild using the installed GuestAdditions.
156
158
  # The message includes the host and installer version strings.
157
159
  def yield_rebuild_warning
158
- @vm.ui.warn I18n.t("vagrant.plugins.vbguest.rebuild#{@options[:force] ? '_forced' : ''}",
160
+ @env.ui.warn I18n.t("vagrant.plugins.vbguest.rebuild#{@options[:force] ? '_forced' : ''}",
159
161
  :guest_version => guest_version(true),
160
162
  :host_version => host_version)
161
163
  end
@@ -167,7 +169,7 @@ module VagrantVbguest
167
169
  # knows there could be a problem. The message includles the installer
168
170
  # version.
169
171
  def yield_installation_error_warning(path_to_installer)
170
- @vm.ui.warn I18n.t("vagrant.plugins.vbguest.install_error",
172
+ @env.ui.warn I18n.t("vagrant.plugins.vbguest.install_error",
171
173
  :installer_version => installer_version(path_to_installer) || I18n.t("vagrant.plugins.vbguest.unknown"))
172
174
  end
173
175
 
@@ -202,12 +204,12 @@ module VagrantVbguest
202
204
  else
203
205
  # :TODO: This will also raise, if the iso_url points to an invalid local path
204
206
  raise VagrantVbguest::DownloadingDisabledError.new(:from => iso_path) if options[:no_remote]
205
- env = {
206
- :ui => vm.ui,
207
- :tmp_path => vm.env.tmp_path,
207
+ downloader_env = {
208
+ :ui => @env.ui,
209
+ :tmp_path => @env.tmp_path,
208
210
  :iso_url => iso_path
209
211
  }
210
- @download = VagrantVbguest::Download.new(env)
212
+ @download = VagrantVbguest::Download.new(downloader_env)
211
213
  @download.download
212
214
  @download.temp_path
213
215
  end
@@ -235,7 +237,7 @@ module VagrantVbguest
235
237
  #
236
238
  # @return [String] Absolute path to the local GuestAdditions iso file, or +nil+ if not found.
237
239
  def media_manager_iso
238
- (m = vm.driver.execute('list', 'dvds').match(/^.+:\s+(.*VBoxGuestAdditions.iso)$/i)) && m[1]
240
+ (m = driver.execute('list', 'dvds').match(/^.+:\s+(.*VBoxGuestAdditions(?:_#{guest_version})?\.iso)$/i)) && m[1]
239
241
  end
240
242
 
241
243
  # Makes an educated guess where the GuestAdditions iso file
@@ -244,42 +246,45 @@ module VagrantVbguest
244
246
  #
245
247
  # @return [String] Absolute path to the local GuestAdditions iso file, or +nil+ if not found.
246
248
  def guess_iso
247
- path_platform = if Vagrant::Util::Platform.linux?
248
- "/usr/share/virtualbox/VBoxGuestAdditions.iso"
249
+ paths = if Vagrant::Util::Platform.linux?
250
+ [
251
+ (File.join(ENV['HOME'], '.VirtualBox', "VBoxGuestAdditions_#{guest_version}.iso") if ENV['HOME']),
252
+ "/usr/share/virtualbox/VBoxGuestAdditions.iso"
253
+ ]
249
254
  elsif Vagrant::Util::Platform.darwin?
250
255
  "/Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso"
251
256
  elsif Vagrant::Util::Platform.windows?
252
257
  if (p = ENV["VBOX_INSTALL_PATH"]) && !p.empty?
253
258
  File.join(p, "VBoxGuestAdditions.iso")
254
- else
259
+ elsif ENV["PROGRAM_FILES"] || ENV["ProgramW6432"] || ENV["PROGRAMFILES"]
255
260
  File.join((ENV["PROGRAM_FILES"] || ENV["ProgramW6432"] || ENV["PROGRAMFILES"]), "/Oracle/VirtualBox/VBoxGuestAdditions.iso")
256
261
  end
257
262
  end
258
- File.exists?(path_platform) ? path_platform : nil
263
+ Array(paths).find { |path| path && File.exists?(path) }
259
264
  end
260
265
 
261
266
  # A helper method to handle the GuestAdditions iso file upload
262
267
  # into the guest box.
263
- # The file will uploaded to the location given by the +tmp_path+ method.
268
+ # The file will uploaded to the location given by the +temp_path+ method.
264
269
  #
265
270
  # @example Default upload
266
271
  # upload(iso_file)
267
272
  #
268
273
  # @param [String] Path of the file to upload to the +tmp_path*
269
274
  def upload(file)
270
- vm.ui.info(I18n.t("vagrant.plugins.vbguest.start_copy_iso", :from => file, :to => tmp_path))
271
- vm.channel.upload(file, tmp_path)
275
+ env.ui.info(I18n.t("vagrant.plugins.vbguest.start_copy_iso", :from => file, :to => tmp_path))
276
+ communicate.upload(file, tmp_path)
272
277
  end
273
278
 
274
279
  # A helper method to delete the uploaded GuestAdditions iso file
275
280
  # from the guest box
276
281
  def cleanup
277
282
  @download.cleanup if @download
278
- vm.channel.execute("test -f #{tmp_path} && rm #{tmp_path}", :error_check => false) do |type, data|
279
- vm.ui.error(data.chomp, :prefix => false)
283
+ communicate.execute("test -f #{tmp_path} && rm #{tmp_path}", :error_check => false) do |type, data|
284
+ env.ui.error(data.chomp, :prefix => false)
280
285
  end
281
286
  end
282
287
 
283
288
  end
284
289
  end
285
- end
290
+ end
@@ -14,10 +14,10 @@ module VagrantVbguest
14
14
  # @yieldparam [String] data Data for the given output.
15
15
  def install(opts=nil, &block)
16
16
  begin
17
- vm.channel.sudo(install_dependencies_cmd, opts, &block)
17
+ communicate.sudo(install_dependencies_cmd, opts, &block)
18
18
  rescue
19
- vm.channel.sudo('apt-get update', opts, &block)
20
- vm.channel.sudo(install_dependencies_cmd, opts, &block)
19
+ communicate.sudo('apt-get update', opts, &block)
20
+ communicate.sudo(install_dependencies_cmd, opts, &block)
21
21
  end
22
22
  super
23
23
  end
@@ -31,10 +31,10 @@ module VagrantVbguest
31
31
  packages = ['linux-headers-`uname -r`']
32
32
  # some Debian system (lenny) dont come with a dkms packe so we neet to skip that.
33
33
  # apt-cache search will exit with 0 even if nothing was found, so we need to grep.
34
- packages << 'dkms' if vm.channel.test('apt-cache search --names-only \'^dkms$\' | grep dkms')
34
+ packages << 'dkms' if communicate.test('apt-cache search --names-only \'^dkms$\' | grep dkms')
35
35
  packages.join ' '
36
36
  end
37
37
  end
38
38
  end
39
39
  end
40
- VagrantVbguest::Installer.register(VagrantVbguest::Installers::Debian, 5)
40
+ VagrantVbguest::Installer.register(VagrantVbguest::Installers::Debian, 5)
@@ -13,7 +13,7 @@ module VagrantVbguest
13
13
  # @return [Symbol] One of `:debian`, `:ubuntu`, `:gentoo`, `:fedora`, `:redhat`, `:suse`, `:arch`
14
14
  def self.distro(vm)
15
15
  @@ditro ||= {}
16
- @@ditro[vm.uuid] ||= vm.guest.distro_dispatch
16
+ @@ditro[ VagrantVbguest::Helpers::VmCompatible.vm_id(vm) ] ||= vm.guest.distro_dispatch
17
17
  end
18
18
 
19
19
  # Matches if the operating system name prints "Linux"
@@ -24,7 +24,7 @@ module VagrantVbguest
24
24
  # therefore should do a more specific check.
25
25
  def self.match?(vm)
26
26
  raise Error, :_key => :do_not_inherit_match_method if self != Linux
27
- vm.channel.test("uname | grep 'Linux'")
27
+ communicate.test("uname | grep 'Linux'")
28
28
  end
29
29
 
30
30
  # defaults the temp path to "/tmp/VBoxGuestAdditions.iso" for all Linux based systems
@@ -44,7 +44,7 @@ module VagrantVbguest
44
44
  # @yieldparam [String] type Type of the output, `:stdout`, `:stderr`, etc.
45
45
  # @yieldparam [String] data Data for the given output.
46
46
  def install(opts=nil, &block)
47
- vm.ui.warn I18n.t("vagrant.plugins.vbguest.errors.installer.generic_linux_installer") if self.class == Linux
47
+ env.ui.warn I18n.t("vagrant.plugins.vbguest.errors.installer.generic_linux_installer") if self.class == Linux
48
48
  upload(iso_file)
49
49
  mount_iso(opts, &block)
50
50
  execute_installer(opts, &block)
@@ -59,7 +59,7 @@ module VagrantVbguest
59
59
  opts = {
60
60
  :sudo => true
61
61
  }.merge(opts || {})
62
- vm.channel.test('lsmod | grep vboxsf', opts, &block)
62
+ communicate.test('lsmod | grep vboxsf', opts, &block)
63
63
  end
64
64
 
65
65
  # This overrides {VagrantVbguest::Installers::Base#guest_version}
@@ -75,9 +75,9 @@ module VagrantVbguest
75
75
  return @guest_version if @guest_version && !reload
76
76
  driver_version = super
77
77
 
78
- @vm.channel.sudo('VBoxService --version', :error_check => false) do |type, data|
78
+ communicate.sudo('VBoxService --version', :error_check => false) do |type, data|
79
79
  if (v = data.to_s.match(/^(\d+\.\d+.\d+)/)) && driver_version != v[1]
80
- @vm.ui.warn(I18n.t("vagrant.plugins.vbguest.guest_version_reports_differ", :driver => driver_version, :service => v[1]))
80
+ @env.ui.warn(I18n.t("vagrant.plugins.vbguest.guest_version_reports_differ", :driver => driver_version, :service => v[1]))
81
81
  @guest_version = v[1]
82
82
  end
83
83
  end
@@ -89,7 +89,7 @@ module VagrantVbguest
89
89
  # @yieldparam [String] type Type of the output, `:stdout`, `:stderr`, etc.
90
90
  # @yieldparam [String] data Data for the given output.
91
91
  def rebuild(opts=nil, &block)
92
- vm.channel.sudo('/etc/init.d/vboxadd setup', opts, &block)
92
+ communicate.sudo('/etc/init.d/vboxadd setup', opts, &block)
93
93
  end
94
94
 
95
95
  # @param [Hash] opts Optional options Hash wich meight get passed to {Vagrant::Communication::SSH#execute} and firends
@@ -98,7 +98,7 @@ module VagrantVbguest
98
98
  # @yieldparam [String] data Data for the given output.
99
99
  def start(opts=nil, &block)
100
100
  opts = {:error_check => false}.merge(opts || {})
101
- vm.channel.sudo('/etc/init.d/vboxadd start', opts, &block)
101
+ communicate.sudo('/etc/init.d/vboxadd start', opts, &block)
102
102
  end
103
103
 
104
104
 
@@ -115,7 +115,7 @@ module VagrantVbguest
115
115
  installer = File.join(mount_point, 'VBoxLinuxAdditions.run')
116
116
  yield_installation_waring(installer)
117
117
  opts = {:error_check => false}.merge(opts || {})
118
- exit_status = vm.channel.sudo("#{installer} --nox11", opts, &block)
118
+ exit_status = communicate.sudo("#{installer} --nox11", opts, &block)
119
119
  yield_installation_error_warning(installer) unless exit_status == 0
120
120
  exit_status
121
121
  end
@@ -129,7 +129,7 @@ module VagrantVbguest
129
129
  # @yieldparam [String] type Type of the output, `:stdout`, `:stderr`, etc.
130
130
  # @yieldparam [String] data Data for the given output.
131
131
  def mount_iso(opts=nil, &block)
132
- vm.channel.sudo("mount #{tmp_path} -o loop #{mount_point}", opts, &block)
132
+ communicate.sudo("mount #{tmp_path} -o loop #{mount_point}", opts, &block)
133
133
  end
134
134
 
135
135
  # A generic helper method for un-mounting the GuestAdditions iso file
@@ -141,9 +141,9 @@ module VagrantVbguest
141
141
  # @yieldparam [String] type Type of the output, `:stdout`, `:stderr`, etc.
142
142
  # @yieldparam [String] data Data for the given output.
143
143
  def unmount_iso(opts=nil, &block)
144
- vm.channel.sudo("umount #{mount_point}", opts, &block)
144
+ communicate.sudo("umount #{mount_point}", opts, &block)
145
145
  end
146
146
  end
147
147
  end
148
148
  end
149
- VagrantVbguest::Installer.register(VagrantVbguest::Installers::Linux, 2)
149
+ VagrantVbguest::Installer.register(VagrantVbguest::Installers::Linux, 2)
@@ -10,7 +10,7 @@ module VagrantVbguest
10
10
 
11
11
  # Install missing deps and yield up to regular linux installation
12
12
  def install(opts=nil, &block)
13
- vm.channel.sudo(install_dependencies_cmd, opts, &block)
13
+ communicate.sudo(install_dependencies_cmd, opts, &block)
14
14
  super
15
15
  end
16
16
 
@@ -3,26 +3,31 @@ module VagrantVbguest
3
3
 
4
4
  require 'micromachine'
5
5
 
6
- attr_reader :installer, :vm, :options
6
+ attr_reader :installer, :env, :vm, :options
7
7
 
8
8
  def initialize vm, options
9
+ @vm = vm
10
+ @env = vm.env
11
+ @options = options
12
+
9
13
  @logger = Log4r::Logger.new("vagrant::plugins::vbguest-machine")
10
- @logger.debug("initialize vbguest machine for VM '#{vm.name}' (#{vm.uuid})")
11
- @vm = vm
12
- @options = options
13
- @installer = Installer.new @vm, @options
14
-
15
- @ga_machine = MicroMachine.new :pending
16
- @ga_machine.when :install, :pending => :installed
17
- @ga_machine.when :start, :pending => :started
18
- @ga_machine.when :rebuild, :pending => :rebuilt, :started => :rebuilt
19
-
20
- @ga_machine.on(:installed) { installer.install }
21
- @ga_machine.on(:started) { installer.start }
22
- @ga_machine.on(:rebuilt) { installer.rebuild }
23
-
24
- @box_machine = MicroMachine.new :first_boot
25
- @box_machine.when :reboot, :first_boot => :rebooted
14
+ @logger.debug("initialize vbguest machine for VM '#{vm.name}' (#{vm.to_s})")
15
+
16
+ @installer = Installer.new vm, options
17
+
18
+ @ga_machine = MicroMachine.new(:pending).tap { |m|
19
+ m.when :install, :pending => :installed
20
+ m.when :start, :pending => :started
21
+ m.when :rebuild, :pending => :rebuilt, :started => :rebuilt
22
+
23
+ m.on(:installed) { installer.install }
24
+ m.on(:started) { installer.start }
25
+ m.on(:rebuilt) { installer.rebuild }
26
+ }
27
+
28
+ @box_machine = MicroMachine.new(:first_boot).tap { |m|
29
+ m.when :reboot, :first_boot => :rebooted
30
+ }
26
31
  end
27
32
 
28
33
  def run
@@ -32,7 +37,7 @@ module VagrantVbguest
32
37
  while (command = runlist.shift)
33
38
  @logger.debug("Running command #{command} from runlist")
34
39
  if !self.send(command)
35
- vm.ui.error('vagrant.plugins.vbguest.machine_loop_guard', :command => command, :state => current_state)
40
+ env.ui.error('vagrant.plugins.vbguest.machine_loop_guard', :command => command, :state => current_state)
36
41
  return false
37
42
  end
38
43
  return run if current_state != state
@@ -41,12 +46,12 @@ module VagrantVbguest
41
46
  end
42
47
 
43
48
  def install
44
- return @vm.ui.warn(I18n.t("vagrant.plugins.vbguest.skipped_installation")) if options[:no_install] && !options[:force]
49
+ return env.ui.warn(I18n.t("vagrant.plugins.vbguest.skipped_installation")) if options[:no_install] && !options[:force]
45
50
  @ga_machine.trigger :install
46
51
  end
47
52
 
48
53
  def rebuild
49
- return @vm.ui.warn(I18n.t("vagrant.plugins.vbguest.skipped_rebuild")) if options[:no_install] && !options[:force]
54
+ return env.ui.warn(I18n.t("vagrant.plugins.vbguest.skipped_rebuild")) if options[:no_install] && !options[:force]
50
55
  @ga_machine.trigger :rebuild
51
56
  end
52
57
 
@@ -91,4 +96,4 @@ module VagrantVbguest
91
96
  }
92
97
  end
93
98
  end
94
- end
99
+ end
@@ -14,13 +14,14 @@ module VagrantVbguest
14
14
 
15
15
  def call(env)
16
16
  @env = env
17
- vm = env[:vm]
18
- options = vm.config.vbguest.to_hash
17
+ vm = env[:vm] || env[:machine]
18
+
19
+ options = vm.config.vbguest.to_hash.freeze
19
20
 
20
21
  if options[:auto_update]
21
22
  machine = VagrantVbguest::Machine.new vm, options
22
23
  status = machine.state
23
- vm.ui.send((:ok == status ? :success : :warn), I18n.t("vagrant.plugins.vbguest.status.#{status}", machine.info))
24
+ vm.env.ui.send((:ok == status ? :success : :warn), I18n.t("vagrant.plugins.vbguest.status.#{status}", machine.info))
24
25
  machine.run
25
26
  reboot(vm, options) if machine.reboot?
26
27
  end
@@ -1,3 +1,3 @@
1
1
  module VagrantVbguest
2
- VERSION = "0.7.0.pre0"
2
+ VERSION = "0.7.0.pre1"
3
3
  end
@@ -1,3 +1,37 @@
1
- # This file is automatically loaded by Vagrant to load any
2
- # plugins. This file kicks off this plugin.
3
- require 'vagrant-vbguest'
1
+ # This file is automatically loaded by Vagrant < 1.1
2
+ # to load any plugins. This file kicks off this plugin.
3
+ begin
4
+ require "vagrant"
5
+ rescue LoadError
6
+ raise "The Vagrant VBGuest plugin must be run within Vagrant."
7
+ end
8
+
9
+ require 'vagrant-vbguest/core_ext/string/interpolate'
10
+
11
+ require "vagrant-vbguest/errors"
12
+ require 'vagrant-vbguest/helpers'
13
+
14
+ require 'vagrant-vbguest/machine'
15
+
16
+ require 'vagrant-vbguest/installer'
17
+ require 'vagrant-vbguest/installers/base'
18
+ require 'vagrant-vbguest/installers/linux'
19
+ require 'vagrant-vbguest/installers/debian'
20
+ require 'vagrant-vbguest/installers/ubuntu'
21
+ require 'vagrant-vbguest/installers/redhat'
22
+
23
+ require 'vagrant-vbguest/config'
24
+ require 'vagrant-vbguest/command'
25
+ require 'vagrant-vbguest/middleware'
26
+
27
+ require 'vagrant-vbguest/download'
28
+
29
+ Vagrant.config_keys.register(:vbguest) { VagrantVbguest::Config }
30
+
31
+ Vagrant.commands.register(:vbguest) { VagrantVbguest::Command }
32
+
33
+ Vagrant.actions[:start].use VagrantVbguest::Middleware
34
+
35
+ # Add our custom translations to the load path
36
+ I18n.load_path << File.expand_path("../../locales/en.yml", __FILE__)
37
+
@@ -42,6 +42,9 @@ en:
42
42
  Please configure a local path to the iso using `config.vbguest.iso_path`
43
43
  in your Vagrantfile or the `--iso` command line option.
44
44
 
45
+ no_virtualbox_machine: |-
46
+ The VBGuest plugin must be used with VirtualBox Machines only.
47
+
45
48
  installer:
46
49
  no_installer_for_platform: |-
47
50
  Sorry, don't know how to %{method} Virtualbox Guest Additions on this platform. Stopping installation.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-vbguest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0.pre0
4
+ version: 0.7.0.pre1
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-14 00:00:00.000000000 Z
12
+ date: 2013-03-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: micromachine
@@ -121,6 +121,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
121
121
  - - ! '>='
122
122
  - !ruby/object:Gem::Version
123
123
  version: '0'
124
+ segments:
125
+ - 0
126
+ hash: 1097977286854134739
124
127
  required_rubygems_version: !ruby/object:Gem::Requirement
125
128
  none: false
126
129
  requirements: