vagrant-vbguest 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +10 -0
- data/lib/vagrant-vbguest.rb +1 -4
- data/lib/vagrant-vbguest/command.rb +4 -34
- data/lib/vagrant-vbguest/download.rb +14 -69
- data/lib/vagrant-vbguest/errors.rb +1 -1
- data/lib/vagrant-vbguest/hosts/base.rb +15 -9
- data/lib/vagrant-vbguest/hosts/virtualbox.rb +15 -0
- data/lib/vagrant-vbguest/installer.rb +1 -1
- data/lib/vagrant-vbguest/installers/base.rb +7 -7
- data/lib/vagrant-vbguest/installers/linux.rb +4 -4
- data/lib/vagrant-vbguest/machine.rb +3 -3
- data/lib/vagrant-vbguest/middleware.rb +11 -2
- data/lib/vagrant-vbguest/rebootable.rb +39 -0
- data/lib/vagrant-vbguest/vagrant_compat.rb +18 -0
- data/lib/vagrant-vbguest/vagrant_compat/vagrant_1_0/command.rb +17 -0
- data/lib/vagrant-vbguest/vagrant_compat/vagrant_1_0/download.rb +51 -0
- data/lib/vagrant-vbguest/vagrant_compat/vagrant_1_0/rebootable.rb +23 -0
- data/lib/vagrant-vbguest/vagrant_compat/vagrant_1_0/vm_compatible.rb +31 -0
- data/lib/vagrant-vbguest/vagrant_compat/vagrant_1_1/command.rb +18 -0
- data/lib/vagrant-vbguest/vagrant_compat/vagrant_1_1/download.rb +1 -0
- data/lib/vagrant-vbguest/vagrant_compat/vagrant_1_1/rebootable.rb +30 -0
- data/lib/vagrant-vbguest/vagrant_compat/vagrant_1_1/vm_compatible.rb +31 -0
- data/lib/vagrant-vbguest/vagrant_compat/vagrant_1_2/command.rb +1 -0
- data/lib/vagrant-vbguest/vagrant_compat/vagrant_1_2/download.rb +18 -0
- data/lib/vagrant-vbguest/vagrant_compat/vagrant_1_2/rebootable.rb +1 -0
- data/lib/vagrant-vbguest/vagrant_compat/vagrant_1_2/vm_compatible.rb +15 -0
- data/lib/vagrant-vbguest/version.rb +1 -1
- data/lib/vagrant_init.rb +1 -3
- data/locales/en.yml +54 -52
- metadata +17 -4
- data/lib/vagrant-vbguest/helpers.rb +0 -61
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
## 0.8.0
|
2
|
+
|
3
|
+
- Adds Vagrant 1.2 compatibility [GH-59], [GH-60], [GH-62] /
|
4
|
+
(thanks @Andrew8xx8 for pointing directions)
|
5
|
+
- Fix basic/fallback linux installer [GH-56]
|
6
|
+
- Guard auto-reload on broken vagrant builds.
|
7
|
+
Some varant 1.1.x versions have a bug regarding ssh and cleaning
|
8
|
+
up old connections, which results in varant crashing when a box
|
9
|
+
is reloaded.
|
10
|
+
|
1
11
|
## 0.7.1
|
2
12
|
|
3
13
|
- Fix auto-reloading for vagrant 1.1 [GH-52]
|
data/lib/vagrant-vbguest.rb
CHANGED
@@ -8,7 +8,7 @@ end
|
|
8
8
|
I18n.load_path << File.expand_path("../../locales/en.yml", __FILE__)
|
9
9
|
|
10
10
|
require "vagrant-vbguest/errors"
|
11
|
-
require 'vagrant-vbguest/
|
11
|
+
require 'vagrant-vbguest/vagrant_compat'
|
12
12
|
|
13
13
|
require 'vagrant-vbguest/machine'
|
14
14
|
|
@@ -24,8 +24,6 @@ require 'vagrant-vbguest/installers/redhat'
|
|
24
24
|
|
25
25
|
require 'vagrant-vbguest/middleware'
|
26
26
|
|
27
|
-
require 'vagrant-vbguest/download'
|
28
|
-
|
29
27
|
module VagrantVbguest
|
30
28
|
|
31
29
|
class Plugin < Vagrant.plugin("2")
|
@@ -42,7 +40,6 @@ module VagrantVbguest
|
|
42
40
|
end
|
43
41
|
|
44
42
|
command('vbguest') do
|
45
|
-
require File.expand_path("../vagrant-vbguest/command", __FILE__)
|
46
43
|
Command
|
47
44
|
end
|
48
45
|
|
@@ -73,48 +73,18 @@ module VagrantVbguest
|
|
73
73
|
options = vm.config.vbguest.to_hash.merge(options)
|
74
74
|
machine = VagrantVbguest::Machine.new(vm, options)
|
75
75
|
status = machine.state
|
76
|
-
vm.env.ui.send((:ok == status ? :success : :warn), I18n.t("
|
76
|
+
vm.env.ui.send((:ok == status ? :success : :warn), I18n.t("vagrant_vbguest.status.#{status}", machine.info))
|
77
77
|
|
78
78
|
if _method != :status
|
79
79
|
machine.send(_method)
|
80
80
|
end
|
81
81
|
|
82
|
-
reboot(vm, options) if _rebootable && machine.reboot?
|
82
|
+
reboot!(vm, options) if _rebootable && machine.reboot?
|
83
83
|
end
|
84
84
|
|
85
|
-
def check_runable_on(vm)
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
if Vagrant::VERSION < "1.1.0"
|
90
|
-
require 'vagrant/command/start_mixins'
|
91
|
-
|
92
|
-
class Command < Vagrant::Command::Base
|
93
|
-
include CommandCommons
|
94
|
-
include Vagrant::Command::StartMixins
|
95
|
-
|
96
|
-
def check_runable_on(vm)
|
97
|
-
raise Vagrant::Errors::VMNotCreatedError if !vm.created?
|
98
|
-
raise Vagrant::Errors::VMInaccessible if !vm.state == :inaccessible
|
99
|
-
raise Vagrant::Errors::VMNotRunningError if vm.state != :running
|
100
|
-
end
|
85
|
+
def check_runable_on(vm)
|
86
|
+
raise NotImplementedError
|
101
87
|
end
|
102
|
-
|
103
|
-
else
|
104
|
-
require Vagrant.source_root.join("plugins/commands/up/start_mixins")
|
105
|
-
|
106
|
-
class Command < Vagrant.plugin("2", :command)
|
107
|
-
include CommandCommons
|
108
|
-
include VagrantPlugins::CommandUp::StartMixins
|
109
|
-
|
110
|
-
def check_runable_on(vm)
|
111
|
-
raise Vagrant::Errors::VMNotCreatedError if vm.state.id == :not_created
|
112
|
-
raise Vagrant::Errors::VMInaccessible if vm.state.id == :inaccessible
|
113
|
-
raise Vagrant::Errors::VMNotRunningError if vm.state.id != :running
|
114
|
-
raise VagrantVbguest::NoVirtualBoxMachineError if vm.provider.class != VagrantPlugins::ProviderVirtualBox::Provider
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
88
|
end
|
119
89
|
|
120
90
|
end
|
@@ -1,83 +1,28 @@
|
|
1
1
|
module VagrantVbguest
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
# This adoption does not run as a action/middleware, but is called manually
|
6
|
-
#
|
7
|
-
# MIT License - Mitchell Hashimoto and John Bender - https://github.com/mitchellh/vagrant
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
class Download
|
3
|
+
class DownloadBase
|
4
|
+
attr_reader :source, :destination, :downloader
|
12
5
|
|
13
|
-
|
14
|
-
|
15
|
-
include Vagrant::Util
|
16
|
-
|
17
|
-
attr_reader :temp_path
|
18
|
-
|
19
|
-
def initialize(env)
|
20
|
-
@env = env
|
21
|
-
@env["download.classes"] ||= []
|
22
|
-
@env["download.classes"] += [Vagrant::Downloaders::HTTP, Vagrant::Downloaders::File]
|
6
|
+
def initialize(source, destination, options=nil)
|
23
7
|
@downloader = nil
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
# since it is used so many times.
|
29
|
-
classes = @env["download.classes"]
|
30
|
-
|
31
|
-
# Find the class to use.
|
32
|
-
classes.each_index do |i|
|
33
|
-
klass = classes[i]
|
34
|
-
|
35
|
-
# Use the class if it matches the given URI or if this
|
36
|
-
# is the last class...
|
37
|
-
if classes.length == (i + 1) || klass.match?(@env[:url])
|
38
|
-
@env[:ui].info I18n.t("vagrant.plugins.vbguest.download.with", :class => klass.to_s)
|
39
|
-
@downloader = klass.new(@env[:ui])
|
40
|
-
break
|
41
|
-
end
|
8
|
+
@source = source
|
9
|
+
@destination = destination
|
10
|
+
if File.directory?(destination)
|
11
|
+
@destination = File.join(destination, "vbguest_download_#{Time.now.to_i.to_s}")
|
42
12
|
end
|
43
|
-
|
44
|
-
# This line should never be reached, but we'll keep this here
|
45
|
-
# just in case for now.
|
46
|
-
raise Errors::BoxDownloadUnknownType if !@downloader
|
47
|
-
|
48
|
-
@downloader.prepare(@env[:url]) if @downloader.respond_to?(:prepare)
|
49
|
-
true
|
13
|
+
@ui = options[:ui]
|
50
14
|
end
|
51
15
|
|
52
|
-
def download
|
53
|
-
|
54
|
-
with_tempfile do |tempfile|
|
55
|
-
download_to(tempfile)
|
56
|
-
@temp_path = @env["download.temp_path"] = tempfile.path
|
57
|
-
end
|
58
|
-
end
|
16
|
+
def download!
|
17
|
+
raise NotImplementedError
|
59
18
|
end
|
60
19
|
|
61
20
|
def cleanup
|
62
|
-
if
|
63
|
-
@
|
64
|
-
File.unlink(
|
21
|
+
if destination && File.exist?(destination)
|
22
|
+
@ui.info I18n.t("vagrant_vbguest.download.cleaning")
|
23
|
+
File.unlink(destination)
|
65
24
|
end
|
66
25
|
end
|
67
|
-
|
68
|
-
def with_tempfile
|
69
|
-
File.open(temp_filename, Platform.tar_file_options) do |tempfile|
|
70
|
-
yield tempfile
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def temp_filename
|
75
|
-
@env[:tmp_path].join(BASENAME + Time.now.to_i.to_s)
|
76
|
-
end
|
77
|
-
|
78
|
-
def download_to(f)
|
79
|
-
@downloader.download!(@env[:url], f)
|
80
|
-
end
|
81
|
-
|
82
26
|
end
|
27
|
+
|
83
28
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
1
3
|
module VagrantVbguest
|
2
4
|
module Hosts
|
3
5
|
class Base
|
@@ -46,7 +48,7 @@ module VagrantVbguest
|
|
46
48
|
|
47
49
|
path = versionize(path)
|
48
50
|
|
49
|
-
if
|
51
|
+
if file_match? path
|
50
52
|
@additions_file = path
|
51
53
|
else
|
52
54
|
# :TODO: This will also raise, if the iso_url points to an invalid local path
|
@@ -62,6 +64,15 @@ module VagrantVbguest
|
|
62
64
|
|
63
65
|
protected
|
64
66
|
|
67
|
+
# fix bug when the vagrant version is higher than 1.2, by moving method Vagrant::Vagrant::File.match? here
|
68
|
+
def file_match?(uri)
|
69
|
+
extracted = ::URI.extract(uri, "file")
|
70
|
+
|
71
|
+
return true if extracted && extracted.include?(uri)
|
72
|
+
|
73
|
+
return ::File.file?(::File.expand_path(uri))
|
74
|
+
end
|
75
|
+
|
65
76
|
# Default web URI, where "additions file" can be downloaded.
|
66
77
|
#
|
67
78
|
# @return [String] A URI template containing the versions placeholder.
|
@@ -97,14 +108,9 @@ module VagrantVbguest
|
|
97
108
|
#
|
98
109
|
# @return [String] The path to the downloaded file
|
99
110
|
def download(path)
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
:url => path
|
104
|
-
}
|
105
|
-
@download = VagrantVbguest::Download.new(downloader_env)
|
106
|
-
@download.download
|
107
|
-
@download.temp_path
|
111
|
+
@download = VagrantVbguest::Download.new(path, @env.tmp_path, :ui => @env.ui)
|
112
|
+
@download.download!
|
113
|
+
@download.destination
|
108
114
|
end
|
109
115
|
|
110
116
|
end
|
@@ -20,6 +20,21 @@ module VagrantVbguest
|
|
20
20
|
media_manager_iso || guess_local_iso
|
21
21
|
end
|
22
22
|
|
23
|
+
# Kicks off +VagrantVbguest::Download+ to download the additions file
|
24
|
+
# into a temp file.
|
25
|
+
#
|
26
|
+
# To remove the created tempfile call +cleanup+
|
27
|
+
#
|
28
|
+
# @param [String] The path or URI to download
|
29
|
+
#
|
30
|
+
# @return [String] The path to the downloaded file
|
31
|
+
def download(path)
|
32
|
+
temp_path = File.join(@env.tmp_path, "VBoxGuestAdditions_#{version}.iso")
|
33
|
+
@download = VagrantVbguest::Download.new(path, temp_path, :ui => @env.ui)
|
34
|
+
@download.download!
|
35
|
+
@download.destination
|
36
|
+
end
|
37
|
+
|
23
38
|
private
|
24
39
|
|
25
40
|
# Helper method which queries the VirtualBox media manager
|
@@ -6,7 +6,7 @@ module VagrantVbguest
|
|
6
6
|
class Installer
|
7
7
|
|
8
8
|
class NoInstallerFoundError < Vagrant::Errors::VagrantError
|
9
|
-
error_namespace "
|
9
|
+
error_namespace "vagrant_vbguest.errors.installer"
|
10
10
|
error_key "no_install_script_for_platform"
|
11
11
|
end
|
12
12
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module VagrantVbguest
|
2
2
|
module Installers
|
3
3
|
class Error < Vagrant::Errors::VagrantError
|
4
|
-
error_namespace "
|
4
|
+
error_namespace "vagrant_vbguest.errors.installer"
|
5
5
|
end
|
6
6
|
|
7
7
|
# This is the base class all installers must inherit from
|
@@ -144,16 +144,16 @@ module VagrantVbguest
|
|
144
144
|
# will start _now_.
|
145
145
|
# The message includes the host and installer version strings.
|
146
146
|
def yield_installation_waring(path_to_installer)
|
147
|
-
@env.ui.warn I18n.t("
|
147
|
+
@env.ui.warn I18n.t("vagrant_vbguest.installing#{@options[:force] ? '_forced' : ''}",
|
148
148
|
:guest_version => guest_version,
|
149
|
-
:installer_version => installer_version(path_to_installer) || I18n.t("
|
149
|
+
:installer_version => installer_version(path_to_installer) || I18n.t("vagrant_vbguest.unknown"))
|
150
150
|
end
|
151
151
|
|
152
152
|
# Helper to yield a warning message to the user, that the installation
|
153
153
|
# will be rebuild using the installed GuestAdditions.
|
154
154
|
# The message includes the host and installer version strings.
|
155
155
|
def yield_rebuild_warning
|
156
|
-
@env.ui.warn I18n.t("
|
156
|
+
@env.ui.warn I18n.t("vagrant_vbguest.rebuild#{@options[:force] ? '_forced' : ''}",
|
157
157
|
:guest_version => guest_version(true),
|
158
158
|
:host_version => @host.version)
|
159
159
|
end
|
@@ -165,8 +165,8 @@ module VagrantVbguest
|
|
165
165
|
# knows there could be a problem. The message includles the installer
|
166
166
|
# version.
|
167
167
|
def yield_installation_error_warning(path_to_installer)
|
168
|
-
@env.ui.warn I18n.t("
|
169
|
-
:installer_version => installer_version(path_to_installer) || I18n.t("
|
168
|
+
@env.ui.warn I18n.t("vagrant_vbguest.install_error",
|
169
|
+
:installer_version => installer_version(path_to_installer) || I18n.t("vagrant_vbguest.unknown"))
|
170
170
|
end
|
171
171
|
|
172
172
|
def iso_file
|
@@ -183,7 +183,7 @@ module VagrantVbguest
|
|
183
183
|
#
|
184
184
|
# @param [String] Path of the file to upload to the +tmp_path*
|
185
185
|
def upload(file)
|
186
|
-
env.ui.info(I18n.t("
|
186
|
+
env.ui.info(I18n.t("vagrant_vbguest.start_copy_iso", :from => file, :to => tmp_path))
|
187
187
|
communicate.upload(file, tmp_path)
|
188
188
|
end
|
189
189
|
|
@@ -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[
|
16
|
+
@@ditro[ vm_id(vm) ] ||= distro_name vm
|
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
|
-
|
27
|
+
communicate_to(vm).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
|
-
env.ui.warn I18n.t("
|
47
|
+
env.ui.warn I18n.t("vagrant_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)
|
@@ -77,7 +77,7 @@ module VagrantVbguest
|
|
77
77
|
|
78
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
|
-
@env.ui.warn(I18n.t("
|
80
|
+
@env.ui.warn(I18n.t("vagrant_vbguest.guest_version_reports_differ", :driver => driver_version, :service => v[1]))
|
81
81
|
@guest_version = v[1]
|
82
82
|
end
|
83
83
|
end
|
@@ -23,7 +23,7 @@ module VagrantVbguest
|
|
23
23
|
while (command = runlist.shift)
|
24
24
|
@logger.debug("Running command #{command} from runlist")
|
25
25
|
if !self.send(command)
|
26
|
-
env.ui.error('
|
26
|
+
env.ui.error('vagrant_vbguest.machine_loop_guard', :command => command, :state => current_state)
|
27
27
|
return false
|
28
28
|
end
|
29
29
|
return run if current_state != state
|
@@ -32,12 +32,12 @@ module VagrantVbguest
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def install
|
35
|
-
return env.ui.warn(I18n.t("
|
35
|
+
return env.ui.warn(I18n.t("vagrant_vbguest.skipped_installation")) if options[:no_install] && !options[:force]
|
36
36
|
guest_additions_state.trigger :install
|
37
37
|
end
|
38
38
|
|
39
39
|
def rebuild
|
40
|
-
return env.ui.warn(I18n.t("
|
40
|
+
return env.ui.warn(I18n.t("vagrant_vbguest.skipped_rebuild")) if options[:no_install] && !options[:force]
|
41
41
|
guest_additions_state.trigger :rebuild
|
42
42
|
end
|
43
43
|
|
@@ -16,17 +16,26 @@ module VagrantVbguest
|
|
16
16
|
@env = env
|
17
17
|
vm = env[:vm] || env[:machine]
|
18
18
|
|
19
|
-
options = vm.config.vbguest.to_hash.freeze
|
19
|
+
options = override_config(vm.config.vbguest.to_hash).freeze
|
20
20
|
|
21
21
|
if options[:auto_update]
|
22
22
|
machine = VagrantVbguest::Machine.new vm, options
|
23
23
|
status = machine.state
|
24
|
-
vm.env.ui.send((:ok == status ? :success : :warn), I18n.t("
|
24
|
+
vm.env.ui.send((:ok == status ? :success : :warn), I18n.t("vagrant_vbguest.status.#{status}", machine.info))
|
25
25
|
machine.run
|
26
26
|
reboot(vm, options) if machine.reboot?
|
27
27
|
end
|
28
|
+
|
28
29
|
@app.call(env)
|
29
30
|
end
|
30
31
|
|
32
|
+
def override_config(opts)
|
33
|
+
if opts[:auto_reboot] && Vagrant::VERSION.between?("1.1.0", "1.1.5") && Vagrant::VERSION != "1.1.4"
|
34
|
+
@env[:ui].warn I18n.t("vagrant_vbguest.vagrant_11_reload_issues")
|
35
|
+
opts.merge!({:auto_reboot => false})
|
36
|
+
end
|
37
|
+
opts
|
38
|
+
end
|
39
|
+
|
31
40
|
end
|
32
41
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module VagrantVbguest
|
2
|
+
module Helpers
|
3
|
+
|
4
|
+
module Rebootable
|
5
|
+
include VmCompatible
|
6
|
+
def self.included(base)
|
7
|
+
base.extend(ClassMethods)
|
8
|
+
end
|
9
|
+
|
10
|
+
@@rebooted = {}
|
11
|
+
|
12
|
+
def rebooted?(vm)
|
13
|
+
!!@@rebooted[ self.class.vm_id(vm) ]
|
14
|
+
end
|
15
|
+
|
16
|
+
def reboot?(vm, options)
|
17
|
+
if rebooted?(vm)
|
18
|
+
vm.env.ui.error(I18n.t("vagrant_vbguest.restart_loop_guard_activated"))
|
19
|
+
false
|
20
|
+
elsif options[:auto_reboot]
|
21
|
+
vm.env.ui.warn(I18n.t("vagrant_vbguest.restart_vm"))
|
22
|
+
@@rebooted[ self.class.vm_id(vm) ] = true
|
23
|
+
else
|
24
|
+
vm.env.ui.warn(I18n.t("vagrant_vbguest.suggest_restart", :name => vm.name))
|
25
|
+
false
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def reboot(vm, options)
|
30
|
+
raise NotImplementedError
|
31
|
+
end
|
32
|
+
|
33
|
+
def reboot!(vm, options)
|
34
|
+
raise NotImplementedError
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
vagrant_version = Gem::Version.new(Vagrant::VERSION)
|
2
|
+
supported_version = {
|
3
|
+
"< 1.1.0" => "1_0",
|
4
|
+
"~> 1.1.0" => "1_1",
|
5
|
+
"~> 1.2.0" => "1_2"
|
6
|
+
}
|
7
|
+
compat_version = supported_version.find { |requirement, version|
|
8
|
+
Gem::Requirement.new(requirement).satisfied_by?(vagrant_version)
|
9
|
+
}[1]
|
10
|
+
|
11
|
+
if !compat_version
|
12
|
+
# @TODO: yield warning
|
13
|
+
compat_version = supported_version.to_a.last[1]
|
14
|
+
end
|
15
|
+
|
16
|
+
%w{vm_compatible rebootable command download}.each do |r|
|
17
|
+
require File.expand_path("../vagrant_compat/vagrant_#{compat_version}/#{r}", __FILE__)
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'vagrant-vbguest/command'
|
2
|
+
require 'vagrant/command/start_mixins'
|
3
|
+
|
4
|
+
module VagrantVbguest
|
5
|
+
|
6
|
+
class Command < Vagrant::Command::Base
|
7
|
+
include CommandCommons
|
8
|
+
include Vagrant::Command::StartMixins
|
9
|
+
|
10
|
+
def check_runable_on(vm)
|
11
|
+
raise Vagrant::Errors::VMNotCreatedError if !vm.created?
|
12
|
+
raise Vagrant::Errors::VMInaccessible if !vm.state == :inaccessible
|
13
|
+
raise Vagrant::Errors::VMNotRunningError if vm.state != :running
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'vagrant-vbguest/download'
|
2
|
+
module VagrantVbguest
|
3
|
+
# This implementation is based on Action::Box::Download by vagrant
|
4
|
+
#
|
5
|
+
# This adoption does not run as a action/middleware, but is called manually
|
6
|
+
#
|
7
|
+
# MIT License - Mitchell Hashimoto and John Bender - https://github.com/mitchellh/vagrant
|
8
|
+
#
|
9
|
+
#
|
10
|
+
#
|
11
|
+
class Download < DownloadBase
|
12
|
+
|
13
|
+
include Vagrant::Util
|
14
|
+
|
15
|
+
def download!
|
16
|
+
if instantiate_downloader
|
17
|
+
File.open(@destination, Platform.tar_file_options) do |destination_file|
|
18
|
+
@downloader.download!(@source, destination_file)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
@destination
|
22
|
+
end
|
23
|
+
|
24
|
+
def instantiate_downloader
|
25
|
+
# Assign to a temporary variable since this is easier to type out,
|
26
|
+
# since it is used so many times.
|
27
|
+
classes = [Vagrant::Downloaders::HTTP, Vagrant::Downloaders::File]
|
28
|
+
|
29
|
+
# Find the class to use.
|
30
|
+
classes.each_index do |i|
|
31
|
+
klass = classes[i]
|
32
|
+
|
33
|
+
# Use the class if it matches the given URI or if this
|
34
|
+
# is the last class...
|
35
|
+
if classes.length == (i + 1) || klass.match?(@source)
|
36
|
+
@ui.info I18n.t("vagrant_vbguest.download.with", :class => klass.to_s)
|
37
|
+
@downloader = klass.new(@ui)
|
38
|
+
break
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# This line should never be reached, but we'll keep this here
|
43
|
+
# just in case for now.
|
44
|
+
raise Errors::BoxDownloadUnknownType if !@downloader
|
45
|
+
|
46
|
+
@downloader.prepare(@source) if @downloader.respond_to?(:prepare)
|
47
|
+
true
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'vagrant-vbguest/rebootable'
|
2
|
+
|
3
|
+
module VagrantVbguest
|
4
|
+
module Helpers
|
5
|
+
|
6
|
+
module Rebootable
|
7
|
+
def reboot(vm, options)
|
8
|
+
if reboot? vm, options
|
9
|
+
@env[:action_runner].run(Vagrant::Action::VM::Halt, @env)
|
10
|
+
@env[:action_runner].run(Vagrant::Action::VM::Boot, @env)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# executes the whole reboot process
|
15
|
+
def reboot!(vm, options)
|
16
|
+
if reboot? vm, options
|
17
|
+
vm.reload(options)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module VagrantVbguest
|
2
|
+
module Helpers
|
3
|
+
module VmCompatible
|
4
|
+
def communicate
|
5
|
+
vm.channel
|
6
|
+
end
|
7
|
+
|
8
|
+
def driver
|
9
|
+
vm.driver
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.included(base)
|
13
|
+
base.extend(ClassMethods)
|
14
|
+
end
|
15
|
+
|
16
|
+
module ClassMethods
|
17
|
+
def vm_id(vm)
|
18
|
+
vm.uuid
|
19
|
+
end
|
20
|
+
|
21
|
+
def communicate_to(vm)
|
22
|
+
vm.channel
|
23
|
+
end
|
24
|
+
|
25
|
+
def distro_name(vm)
|
26
|
+
vm.guest.distro_dispatch
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'vagrant-vbguest/command'
|
2
|
+
require Vagrant.source_root.join("plugins/commands/up/start_mixins")
|
3
|
+
|
4
|
+
module VagrantVbguest
|
5
|
+
|
6
|
+
class Command < Vagrant.plugin("2", :command)
|
7
|
+
include CommandCommons
|
8
|
+
include VagrantPlugins::CommandUp::StartMixins
|
9
|
+
|
10
|
+
def check_runable_on(vm)
|
11
|
+
raise Vagrant::Errors::VMNotCreatedError if vm.state.id == :not_created
|
12
|
+
raise Vagrant::Errors::VMInaccessible if vm.state.id == :inaccessible
|
13
|
+
raise Vagrant::Errors::VMNotRunningError if vm.state.id != :running
|
14
|
+
raise VagrantVbguest::NoVirtualBoxMachineError if vm.provider.class != VagrantPlugins::ProviderVirtualBox::Provider
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require File.expand_path("../../vagrant_1_0/download", __FILE__)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'vagrant-vbguest/rebootable'
|
2
|
+
|
3
|
+
module VagrantVbguest
|
4
|
+
module Helpers
|
5
|
+
|
6
|
+
module Rebootable
|
7
|
+
def reboot(vm, options)
|
8
|
+
if reboot? vm, options
|
9
|
+
simle_reboot = Vagrant::Action::Builder.new.tap do |b|
|
10
|
+
b.use Vagrant::Action::Builtin::Call, Vagrant::Action::Builtin::GracefulHalt, :poweroff, :running do |env2, b2|
|
11
|
+
if !env2[:result]
|
12
|
+
b2.use VagrantPlugins::ProviderVirtualBox::Action::ForcedHalt
|
13
|
+
end
|
14
|
+
end
|
15
|
+
b.use VagrantPlugins::ProviderVirtualBox::Action::Boot
|
16
|
+
end
|
17
|
+
@env[:action_runner].run(simle_reboot, @env)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# executes the whole reboot process
|
22
|
+
def reboot!(vm, options)
|
23
|
+
if reboot? vm, options
|
24
|
+
vm.action(:reload, options)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module VagrantVbguest
|
2
|
+
module Helpers
|
3
|
+
module VmCompatible
|
4
|
+
def communicate
|
5
|
+
vm.communicate
|
6
|
+
end
|
7
|
+
|
8
|
+
def driver
|
9
|
+
vm.provider.driver
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.included(base)
|
13
|
+
base.extend(ClassMethods)
|
14
|
+
end
|
15
|
+
|
16
|
+
module ClassMethods
|
17
|
+
def vm_id(vm)
|
18
|
+
vm.id
|
19
|
+
end
|
20
|
+
|
21
|
+
def communicate_to(vm)
|
22
|
+
vm.communicate
|
23
|
+
end
|
24
|
+
|
25
|
+
def distro_name(vm)
|
26
|
+
vm.guest.distro_dispatch
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require File.expand_path("../../vagrant_1_1/command", __FILE__)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'vagrant-vbguest/download'
|
2
|
+
require "vagrant/util/downloader"
|
3
|
+
|
4
|
+
module VagrantVbguest
|
5
|
+
|
6
|
+
class Download < DownloadBase
|
7
|
+
|
8
|
+
def download!
|
9
|
+
downloader_options = {}
|
10
|
+
downloader_options[:ui] = @ui
|
11
|
+
@ui.info(I18n.t("vagrant_vbguest.download.started", :source => @source))
|
12
|
+
@downloader = Vagrant::Util::Downloader.new(@source, @destination, downloader_options)
|
13
|
+
@downloader.download!
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require File.expand_path("../../vagrant_1_1/rebootable", __FILE__)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.expand_path("../../vagrant_1_1/vm_compatible", __FILE__)
|
2
|
+
module VagrantVbguest
|
3
|
+
module Helpers
|
4
|
+
module VmCompatible
|
5
|
+
def self.included(base)
|
6
|
+
base.extend(ClassMethods)
|
7
|
+
end
|
8
|
+
module ClassMethods
|
9
|
+
def distro_name(vm)
|
10
|
+
vm.guest.name
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/vagrant_init.rb
CHANGED
@@ -9,7 +9,7 @@ end
|
|
9
9
|
require 'vagrant-vbguest/core_ext/string/interpolate'
|
10
10
|
|
11
11
|
require "vagrant-vbguest/errors"
|
12
|
-
require 'vagrant-vbguest/
|
12
|
+
require 'vagrant-vbguest/vagrant_compat'
|
13
13
|
|
14
14
|
require 'vagrant-vbguest/machine'
|
15
15
|
|
@@ -27,8 +27,6 @@ require 'vagrant-vbguest/config'
|
|
27
27
|
require 'vagrant-vbguest/command'
|
28
28
|
require 'vagrant-vbguest/middleware'
|
29
29
|
|
30
|
-
require 'vagrant-vbguest/download'
|
31
|
-
|
32
30
|
Vagrant.config_keys.register(:vbguest) { VagrantVbguest::Config }
|
33
31
|
|
34
32
|
Vagrant.commands.register(:vbguest) { VagrantVbguest::Command }
|
data/locales/en.yml
CHANGED
@@ -1,59 +1,61 @@
|
|
1
1
|
en:
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
2
|
+
vagrant_vbguest:
|
3
|
+
skipped_installation: "Updating GuestAdditions skipped."
|
4
|
+
skipped_rebuild: "Rebuilding GuestAdditions skipped."
|
5
|
+
installing: "Installing Virtualbox Guest Additions %{installer_version} - guest version is %{guest_version}"
|
6
|
+
installing_forced: "Forcing installation of Virtualbox Guest Additions %{installer_version} - guest version is %{guest_version}"
|
7
|
+
rebuild: "Rebuilding Virtualbox Guest Additions %{guest_version} (Your host version is %{host_version})"
|
8
|
+
rebuild_forced: "Forcing rebuilding of Virtualbox Guest Additions %{guest_version} (Your host version is %{host_version})"
|
9
|
+
install_error: "An error occurred during installation of VirtualBox Guest Additions %{installer_version}. Some functionality may not work as intended."
|
10
|
+
start_copy_iso: "Copy iso file %{from} into the box %{to}"
|
11
|
+
restart_vm: "Restarting VM to apply changes..."
|
12
|
+
suggest_restart: "Guest Additions got installed. However, they seem not be loaded correctly. Please restart the box running `vagrant reload %{name}`"
|
13
|
+
restart_loop_guard_activated: "Guest Additions will not load, even after reboot."
|
14
|
+
machine_loop_guard: "Could not execute %{command} from current state %{state}. To prevent running in circles, we'll stop."
|
15
|
+
guest_version_reports_differ: |-
|
16
|
+
Got different reports about installed GuestAdditions version:
|
17
|
+
Virtualbox on your host claims: %{driver}
|
18
|
+
VBoxService inside the vm claims: %{service}
|
19
|
+
Going on, assuming VBoxService is correct...
|
20
|
+
vagrant_11_reload_issues: |-
|
21
|
+
This version of vagrant has issues with reloading boxes. `auto_reboot` got disabled as a precaution.
|
22
|
+
Expect errors and run `vagrant halt` and `vagrant up` instead of `vagrant reload`!
|
23
|
+
unknown: unknown
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
status:
|
26
|
+
clean: "No installation found."
|
27
|
+
unmatched: "GuestAdditions versions on your host (%{host_version}) and guest (%{guest_version}) do not match."
|
28
|
+
not_running: "GuestAdditions seems to be installed (%{guest_version}) correctly, but not running."
|
29
|
+
ok: "GuestAdditions %{guest_version} running --- OK."
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
31
|
+
errors:
|
32
|
+
autodetect_iso_path: |-
|
33
|
+
Could not locate a local Virtualbox Guest Additions iso file.
|
34
|
+
Please configure a local path to the iso using `config.vbguest.iso_path`
|
35
|
+
in your Vagrantfile or the `--iso` command line option.
|
36
|
+
If you think this is a bug and vbguest could have guessed the iso_path,
|
37
|
+
please file an issue at: https://github.com/dotless-de/vagrant-vbguest/issues
|
37
38
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
39
|
+
downloading_disabled: |-
|
40
|
+
Could not locate a local Virtualbox Guest Additions iso file.
|
41
|
+
However, the no_remote option was set and thus I will not download it from
|
42
|
+
%{from}
|
43
|
+
Please configure a local path to the iso using `config.vbguest.iso_path`
|
44
|
+
in your Vagrantfile or the `--iso` command line option.
|
44
45
|
|
45
|
-
|
46
|
-
|
46
|
+
no_virtualbox_machine: |-
|
47
|
+
The VBGuest plugin must be used with VirtualBox Machines only.
|
47
48
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
49
|
+
installer:
|
50
|
+
no_installer_for_platform: |-
|
51
|
+
Sorry, don't know how to %{method} Virtualbox Guest Additions on this platform. Stopping installation.
|
52
|
+
generic_linux_installer: |-
|
53
|
+
The guest's platform is currently not supported, will try generic Linux method...
|
54
|
+
do_not_inherit_match_method: |-
|
55
|
+
Installer classes must provide their own `match?` method.
|
55
56
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
57
|
+
download:
|
58
|
+
started: "Downloading VirtualBox Guest Additions ISO from %{source}"
|
59
|
+
with: "Downloading VirtualBox Guest Additions ISO with %{class}..."
|
60
|
+
cleaning: "Cleaning up downloaded VirtualBox Guest Additions ISO..."
|
61
|
+
unknown_type: "Unknown or unsupported URI type given for VirtualBox Guest Additions ISO download."
|
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.
|
4
|
+
version: 0.8.0
|
5
5
|
prerelease:
|
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-
|
12
|
+
date: 2013-04-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: micromachine
|
@@ -95,7 +95,6 @@ files:
|
|
95
95
|
- lib/vagrant-vbguest/core_ext/string/interpolate.rb
|
96
96
|
- lib/vagrant-vbguest/download.rb
|
97
97
|
- lib/vagrant-vbguest/errors.rb
|
98
|
-
- lib/vagrant-vbguest/helpers.rb
|
99
98
|
- lib/vagrant-vbguest/hosts/base.rb
|
100
99
|
- lib/vagrant-vbguest/hosts/virtualbox.rb
|
101
100
|
- lib/vagrant-vbguest/installer.rb
|
@@ -106,6 +105,20 @@ files:
|
|
106
105
|
- lib/vagrant-vbguest/installers/ubuntu.rb
|
107
106
|
- lib/vagrant-vbguest/machine.rb
|
108
107
|
- lib/vagrant-vbguest/middleware.rb
|
108
|
+
- lib/vagrant-vbguest/rebootable.rb
|
109
|
+
- lib/vagrant-vbguest/vagrant_compat.rb
|
110
|
+
- lib/vagrant-vbguest/vagrant_compat/vagrant_1_0/command.rb
|
111
|
+
- lib/vagrant-vbguest/vagrant_compat/vagrant_1_0/download.rb
|
112
|
+
- lib/vagrant-vbguest/vagrant_compat/vagrant_1_0/rebootable.rb
|
113
|
+
- lib/vagrant-vbguest/vagrant_compat/vagrant_1_0/vm_compatible.rb
|
114
|
+
- lib/vagrant-vbguest/vagrant_compat/vagrant_1_1/command.rb
|
115
|
+
- lib/vagrant-vbguest/vagrant_compat/vagrant_1_1/download.rb
|
116
|
+
- lib/vagrant-vbguest/vagrant_compat/vagrant_1_1/rebootable.rb
|
117
|
+
- lib/vagrant-vbguest/vagrant_compat/vagrant_1_1/vm_compatible.rb
|
118
|
+
- lib/vagrant-vbguest/vagrant_compat/vagrant_1_2/command.rb
|
119
|
+
- lib/vagrant-vbguest/vagrant_compat/vagrant_1_2/download.rb
|
120
|
+
- lib/vagrant-vbguest/vagrant_compat/vagrant_1_2/rebootable.rb
|
121
|
+
- lib/vagrant-vbguest/vagrant_compat/vagrant_1_2/vm_compatible.rb
|
109
122
|
- lib/vagrant-vbguest/version.rb
|
110
123
|
- lib/vagrant_init.rb
|
111
124
|
- locales/en.yml
|
@@ -125,7 +138,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
125
138
|
version: '0'
|
126
139
|
segments:
|
127
140
|
- 0
|
128
|
-
hash: -
|
141
|
+
hash: -1570498090693693149
|
129
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
143
|
none: false
|
131
144
|
requirements:
|
@@ -1,61 +0,0 @@
|
|
1
|
-
module VagrantVbguest
|
2
|
-
module Helpers
|
3
|
-
|
4
|
-
module Rebootable
|
5
|
-
@@rebooted = {}
|
6
|
-
|
7
|
-
def rebooted?(vm)
|
8
|
-
!!@@rebooted[ VmCompatible.vm_id(vm) ]
|
9
|
-
end
|
10
|
-
|
11
|
-
def reboot(vm, options)
|
12
|
-
run_reboot = if rebooted?(vm)
|
13
|
-
vm.env.ui.error(I18n.t("vagrant.plugins.vbguest.restart_loop_guard_activated"))
|
14
|
-
false
|
15
|
-
elsif options[:auto_reboot]
|
16
|
-
vm.env.ui.warn(I18n.t("vagrant.plugins.vbguest.restart_vm"))
|
17
|
-
@@rebooted[ VmCompatible.vm_id(vm) ] = true
|
18
|
-
else
|
19
|
-
vm.env.ui.warn(I18n.t("vagrant.plugins.vbguest.suggest_restart", :name => vm.name))
|
20
|
-
false
|
21
|
-
end
|
22
|
-
return unless run_reboot
|
23
|
-
|
24
|
-
if Vagrant::VERSION < '1.1.0'
|
25
|
-
vm.reload(options)
|
26
|
-
else
|
27
|
-
vm.action(:reload, options)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
module VmCompatible
|
33
|
-
|
34
|
-
if Vagrant::VERSION < '1.1.0'
|
35
|
-
def communicate
|
36
|
-
vm.channel
|
37
|
-
end
|
38
|
-
|
39
|
-
def driver
|
40
|
-
vm.driver
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.vm_id(vm)
|
44
|
-
vm.uuid
|
45
|
-
end
|
46
|
-
else # Vagrant 1.1, and hopefully upwards
|
47
|
-
def communicate
|
48
|
-
vm.communicate
|
49
|
-
end
|
50
|
-
|
51
|
-
def driver
|
52
|
-
vm.provider.driver
|
53
|
-
end
|
54
|
-
|
55
|
-
def self.vm_id(vm)
|
56
|
-
vm.id
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|