rvagrant 0.8.7.dev
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/.gitignore +25 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +386 -0
- data/Gemfile +21 -0
- data/LICENSE +21 -0
- data/README.md +61 -0
- data/Rakefile +11 -0
- data/bin/vagrant +28 -0
- data/config/default.rb +38 -0
- data/contrib/README.md +12 -0
- data/contrib/emacs/vagrant.el +8 -0
- data/contrib/vim/vagrantfile.vim +9 -0
- data/keys/README.md +17 -0
- data/keys/vagrant +27 -0
- data/keys/vagrant.ppk +26 -0
- data/keys/vagrant.pub +1 -0
- data/lib/vagrant.rb +44 -0
- data/lib/vagrant/action.rb +138 -0
- data/lib/vagrant/action/box.rb +11 -0
- data/lib/vagrant/action/box/destroy.rb +21 -0
- data/lib/vagrant/action/box/download.rb +72 -0
- data/lib/vagrant/action/box/package.rb +19 -0
- data/lib/vagrant/action/box/unpackage.rb +55 -0
- data/lib/vagrant/action/box/verify.rb +23 -0
- data/lib/vagrant/action/builder.rb +124 -0
- data/lib/vagrant/action/builtin.rb +108 -0
- data/lib/vagrant/action/env.rb +7 -0
- data/lib/vagrant/action/env/set.rb +18 -0
- data/lib/vagrant/action/environment.rb +50 -0
- data/lib/vagrant/action/general.rb +8 -0
- data/lib/vagrant/action/general/package.rb +113 -0
- data/lib/vagrant/action/general/validate.rb +19 -0
- data/lib/vagrant/action/vm.rb +34 -0
- data/lib/vagrant/action/vm/boot.rb +48 -0
- data/lib/vagrant/action/vm/check_accessible.rb +23 -0
- data/lib/vagrant/action/vm/check_box.rb +28 -0
- data/lib/vagrant/action/vm/check_guest_additions.rb +35 -0
- data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
- data/lib/vagrant/action/vm/clear_forwarded_ports.rb +26 -0
- data/lib/vagrant/action/vm/clear_nfs_exports.rb +20 -0
- data/lib/vagrant/action/vm/clear_shared_folders.rb +27 -0
- data/lib/vagrant/action/vm/customize.rb +26 -0
- data/lib/vagrant/action/vm/destroy.rb +19 -0
- data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +30 -0
- data/lib/vagrant/action/vm/discard_state.rb +22 -0
- data/lib/vagrant/action/vm/export.rb +52 -0
- data/lib/vagrant/action/vm/forward_ports.rb +133 -0
- data/lib/vagrant/action/vm/forward_ports_helpers.rb +28 -0
- data/lib/vagrant/action/vm/halt.rb +29 -0
- data/lib/vagrant/action/vm/host_name.rb +21 -0
- data/lib/vagrant/action/vm/import.rb +40 -0
- data/lib/vagrant/action/vm/match_mac_address.rb +26 -0
- data/lib/vagrant/action/vm/modify.rb +37 -0
- data/lib/vagrant/action/vm/network.rb +146 -0
- data/lib/vagrant/action/vm/nfs.rb +160 -0
- data/lib/vagrant/action/vm/nfs_helpers.rb +11 -0
- data/lib/vagrant/action/vm/package.rb +23 -0
- data/lib/vagrant/action/vm/package_vagrantfile.rb +33 -0
- data/lib/vagrant/action/vm/provision.rb +34 -0
- data/lib/vagrant/action/vm/provisioner_cleanup.rb +26 -0
- data/lib/vagrant/action/vm/resume.rb +20 -0
- data/lib/vagrant/action/vm/share_folders.rb +78 -0
- data/lib/vagrant/action/vm/suspend.rb +20 -0
- data/lib/vagrant/action/warden.rb +85 -0
- data/lib/vagrant/box.rb +90 -0
- data/lib/vagrant/box_collection.rb +53 -0
- data/lib/vagrant/cli.rb +55 -0
- data/lib/vagrant/command.rb +25 -0
- data/lib/vagrant/command/base.rb +106 -0
- data/lib/vagrant/command/box.rb +33 -0
- data/lib/vagrant/command/destroy.rb +17 -0
- data/lib/vagrant/command/group_base.rb +107 -0
- data/lib/vagrant/command/halt.rb +18 -0
- data/lib/vagrant/command/helpers.rb +33 -0
- data/lib/vagrant/command/init.rb +14 -0
- data/lib/vagrant/command/named_base.rb +14 -0
- data/lib/vagrant/command/package.rb +41 -0
- data/lib/vagrant/command/provision.rb +23 -0
- data/lib/vagrant/command/reload.rb +17 -0
- data/lib/vagrant/command/resume.rb +17 -0
- data/lib/vagrant/command/ssh.rb +49 -0
- data/lib/vagrant/command/ssh_config.rb +29 -0
- data/lib/vagrant/command/status.rb +31 -0
- data/lib/vagrant/command/suspend.rb +17 -0
- data/lib/vagrant/command/up.rb +19 -0
- data/lib/vagrant/command/upgrade_to_060.rb +45 -0
- data/lib/vagrant/command/version.rb +13 -0
- data/lib/vagrant/config.rb +123 -0
- data/lib/vagrant/config/base.rb +85 -0
- data/lib/vagrant/config/error_recorder.rb +19 -0
- data/lib/vagrant/config/nfs.rb +10 -0
- data/lib/vagrant/config/package.rb +9 -0
- data/lib/vagrant/config/ssh.rb +38 -0
- data/lib/vagrant/config/top.rb +61 -0
- data/lib/vagrant/config/vagrant.rb +17 -0
- data/lib/vagrant/config/vm.rb +148 -0
- data/lib/vagrant/config/vm/provisioner.rb +56 -0
- data/lib/vagrant/config/vm/sub_vm.rb +17 -0
- data/lib/vagrant/data_store.rb +70 -0
- data/lib/vagrant/downloaders.rb +7 -0
- data/lib/vagrant/downloaders/base.rb +23 -0
- data/lib/vagrant/downloaders/file.rb +22 -0
- data/lib/vagrant/downloaders/http.rb +70 -0
- data/lib/vagrant/environment.rb +516 -0
- data/lib/vagrant/errors.rb +352 -0
- data/lib/vagrant/hosts.rb +9 -0
- data/lib/vagrant/hosts/arch.rb +27 -0
- data/lib/vagrant/hosts/base.rb +76 -0
- data/lib/vagrant/hosts/bsd.rb +58 -0
- data/lib/vagrant/hosts/fedora.rb +11 -0
- data/lib/vagrant/hosts/linux.rb +69 -0
- data/lib/vagrant/plugin.rb +79 -0
- data/lib/vagrant/provisioners.rb +9 -0
- data/lib/vagrant/provisioners/base.rb +67 -0
- data/lib/vagrant/provisioners/chef.rb +155 -0
- data/lib/vagrant/provisioners/chef_client.rb +120 -0
- data/lib/vagrant/provisioners/chef_solo.rb +135 -0
- data/lib/vagrant/provisioners/puppet.rb +137 -0
- data/lib/vagrant/provisioners/puppet_server.rb +55 -0
- data/lib/vagrant/provisioners/shell.rb +96 -0
- data/lib/vagrant/ssh.rb +224 -0
- data/lib/vagrant/ssh/session.rb +136 -0
- data/lib/vagrant/systems.rb +13 -0
- data/lib/vagrant/systems/arch.rb +34 -0
- data/lib/vagrant/systems/base.rb +87 -0
- data/lib/vagrant/systems/debian.rb +36 -0
- data/lib/vagrant/systems/freebsd.rb +84 -0
- data/lib/vagrant/systems/gentoo.rb +27 -0
- data/lib/vagrant/systems/linux.rb +82 -0
- data/lib/vagrant/systems/linux/config.rb +21 -0
- data/lib/vagrant/systems/linux/error.rb +9 -0
- data/lib/vagrant/systems/redhat.rb +48 -0
- data/lib/vagrant/systems/solaris.rb +67 -0
- data/lib/vagrant/systems/suse.rb +9 -0
- data/lib/vagrant/systems/ubuntu.rb +17 -0
- data/lib/vagrant/test_helpers.rb +128 -0
- data/lib/vagrant/ui.rb +81 -0
- data/lib/vagrant/util.rb +13 -0
- data/lib/vagrant/util/busy.rb +59 -0
- data/lib/vagrant/util/counter.rb +24 -0
- data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
- data/lib/vagrant/util/platform.rb +57 -0
- data/lib/vagrant/util/retryable.rb +25 -0
- data/lib/vagrant/util/safe_exec.rb +35 -0
- data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
- data/lib/vagrant/util/template_renderer.rb +83 -0
- data/lib/vagrant/version.rb +6 -0
- data/lib/vagrant/vm.rb +181 -0
- data/templates/chef_server_client.erb +32 -0
- data/templates/chef_solo_solo.erb +23 -0
- data/templates/commands/init/Vagrantfile.erb +86 -0
- data/templates/config/validation_failed.erb +7 -0
- data/templates/locales/en.yml +556 -0
- data/templates/network_entry_arch.erb +9 -0
- data/templates/network_entry_debian.erb +8 -0
- data/templates/network_entry_gentoo.erb +5 -0
- data/templates/network_entry_redhat.erb +9 -0
- data/templates/nfs/exports.erb +5 -0
- data/templates/nfs/exports_linux.erb +5 -0
- data/templates/package_Vagrantfile.erb +11 -0
- data/templates/ssh_config.erb +15 -0
- data/test/unit/locales/en.yml +8 -0
- data/test/unit/test_helper.rb +28 -0
- data/test/unit/vagrant/action/box/destroy_test.rb +18 -0
- data/test/unit/vagrant/action/box/download_test.rb +125 -0
- data/test/unit/vagrant/action/box/package_test.rb +25 -0
- data/test/unit/vagrant/action/box/unpackage_test.rb +84 -0
- data/test/unit/vagrant/action/box/verify_test.rb +30 -0
- data/test/unit/vagrant/action/builder_test.rb +207 -0
- data/test/unit/vagrant/action/env/set_test.rb +24 -0
- data/test/unit/vagrant/action/environment_test.rb +27 -0
- data/test/unit/vagrant/action/general/package_test.rb +268 -0
- data/test/unit/vagrant/action/general/validate_test.rb +31 -0
- data/test/unit/vagrant/action/vm/boot_test.rb +66 -0
- data/test/unit/vagrant/action/vm/check_accessible_test.rb +61 -0
- data/test/unit/vagrant/action/vm/check_box_test.rb +56 -0
- data/test/unit/vagrant/action/vm/check_guest_additions_test.rb +9 -0
- data/test/unit/vagrant/action/vm/clean_machine_folder_test.rb +84 -0
- data/test/unit/vagrant/action/vm/clear_forwarded_ports_test.rb +52 -0
- data/test/unit/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
- data/test/unit/vagrant/action/vm/clear_shared_folders_test.rb +40 -0
- data/test/unit/vagrant/action/vm/customize_test.rb +37 -0
- data/test/unit/vagrant/action/vm/destroy_test.rb +25 -0
- data/test/unit/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +49 -0
- data/test/unit/vagrant/action/vm/discard_state_test.rb +45 -0
- data/test/unit/vagrant/action/vm/export_test.rb +107 -0
- data/test/unit/vagrant/action/vm/forward_ports_helpers_test.rb +77 -0
- data/test/unit/vagrant/action/vm/forward_ports_test.rb +213 -0
- data/test/unit/vagrant/action/vm/halt_test.rb +79 -0
- data/test/unit/vagrant/action/vm/host_name_test.rb +36 -0
- data/test/unit/vagrant/action/vm/import_test.rb +66 -0
- data/test/unit/vagrant/action/vm/match_mac_address_test.rb +40 -0
- data/test/unit/vagrant/action/vm/modify_test.rb +38 -0
- data/test/unit/vagrant/action/vm/network_test.rb +286 -0
- data/test/unit/vagrant/action/vm/nfs_helpers_test.rb +26 -0
- data/test/unit/vagrant/action/vm/nfs_test.rb +260 -0
- data/test/unit/vagrant/action/vm/package_test.rb +25 -0
- data/test/unit/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
- data/test/unit/vagrant/action/vm/provision_test.rb +65 -0
- data/test/unit/vagrant/action/vm/provisioner_cleanup_test.rb +56 -0
- data/test/unit/vagrant/action/vm/resume_test.rb +35 -0
- data/test/unit/vagrant/action/vm/share_folders_test.rb +144 -0
- data/test/unit/vagrant/action/vm/suspend_test.rb +35 -0
- data/test/unit/vagrant/action/warden_test.rb +125 -0
- data/test/unit/vagrant/action_test.rb +89 -0
- data/test/unit/vagrant/box_collection_test.rb +45 -0
- data/test/unit/vagrant/box_test.rb +74 -0
- data/test/unit/vagrant/cli_test.rb +35 -0
- data/test/unit/vagrant/command/base_test.rb +23 -0
- data/test/unit/vagrant/command/group_base_test.rb +15 -0
- data/test/unit/vagrant/command/helpers_test.rb +88 -0
- data/test/unit/vagrant/command/package_test.rb +27 -0
- data/test/unit/vagrant/config/base_test.rb +52 -0
- data/test/unit/vagrant/config/error_recorder_test.rb +18 -0
- data/test/unit/vagrant/config/ssh_test.rb +12 -0
- data/test/unit/vagrant/config/vagrant_test.rb +35 -0
- data/test/unit/vagrant/config/vm/provisioner_test.rb +92 -0
- data/test/unit/vagrant/config/vm_test.rb +56 -0
- data/test/unit/vagrant/config_test.rb +162 -0
- data/test/unit/vagrant/data_store_test.rb +77 -0
- data/test/unit/vagrant/downloaders/base_test.rb +28 -0
- data/test/unit/vagrant/downloaders/file_test.rb +48 -0
- data/test/unit/vagrant/downloaders/http_test.rb +82 -0
- data/test/unit/vagrant/environment_test.rb +598 -0
- data/test/unit/vagrant/errors_test.rb +42 -0
- data/test/unit/vagrant/hosts/base_test.rb +46 -0
- data/test/unit/vagrant/hosts/bsd_test.rb +53 -0
- data/test/unit/vagrant/hosts/linux_test.rb +54 -0
- data/test/unit/vagrant/plugin_test.rb +9 -0
- data/test/unit/vagrant/provisioners/base_test.rb +63 -0
- data/test/unit/vagrant/provisioners/chef_client_test.rb +190 -0
- data/test/unit/vagrant/provisioners/chef_solo_test.rb +114 -0
- data/test/unit/vagrant/provisioners/chef_test.rb +202 -0
- data/test/unit/vagrant/provisioners/puppet_server_test.rb +68 -0
- data/test/unit/vagrant/provisioners/puppet_test.rb +182 -0
- data/test/unit/vagrant/provisioners/shell_test.rb +79 -0
- data/test/unit/vagrant/ssh/session_test.rb +40 -0
- data/test/unit/vagrant/ssh_test.rb +307 -0
- data/test/unit/vagrant/systems/base_test.rb +18 -0
- data/test/unit/vagrant/systems/linux_test.rb +104 -0
- data/test/unit/vagrant/ui_test.rb +29 -0
- data/test/unit/vagrant/util/busy_test.rb +106 -0
- data/test/unit/vagrant/util/counter_test.rb +29 -0
- data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +39 -0
- data/test/unit/vagrant/util/platform_test.rb +18 -0
- data/test/unit/vagrant/util/retryable_test.rb +50 -0
- data/test/unit/vagrant/util/stacked_proc_runner_test.rb +43 -0
- data/test/unit/vagrant/util/template_renderer_test.rb +145 -0
- data/test/unit/vagrant/vm_test.rb +300 -0
- data/vagrant.gemspec +35 -0
- metadata +431 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
class Action
|
|
3
|
+
# Represents an action environment which is what is passed
|
|
4
|
+
# to the `call` method of each action. This environment contains
|
|
5
|
+
# some helper methods for accessing the environment as well
|
|
6
|
+
# as being a hash, to store any additional options.
|
|
7
|
+
class Environment < Util::HashWithIndifferentAccess
|
|
8
|
+
# The {Vagrant::Environment} object represented by this
|
|
9
|
+
# action environment.
|
|
10
|
+
attr_reader :env
|
|
11
|
+
|
|
12
|
+
def initialize(env)
|
|
13
|
+
super() do |h,k|
|
|
14
|
+
# By default, try to find the key as a method on the
|
|
15
|
+
# environment. Gross eval use here.
|
|
16
|
+
begin
|
|
17
|
+
value = eval("h.env.#{k}")
|
|
18
|
+
h[k] = value
|
|
19
|
+
rescue Exception
|
|
20
|
+
nil
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
@env = env
|
|
25
|
+
@interrupted = false
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Returns a UI object from the environment
|
|
29
|
+
def ui
|
|
30
|
+
env.ui
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Marks an environment as interrupted (by an outside signal or
|
|
34
|
+
# anything). This will trigger any middleware sequences using this
|
|
35
|
+
# environment to halt. This is automatically set by {Action} when
|
|
36
|
+
# a SIGINT is captured.
|
|
37
|
+
def interrupt!
|
|
38
|
+
@interrupted = true
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Returns a boolean denoting if environment has been interrupted
|
|
42
|
+
# with a SIGINT.
|
|
43
|
+
#
|
|
44
|
+
# @return [Bool]
|
|
45
|
+
def interrupted?
|
|
46
|
+
!!@interrupted
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'archive/tar/minitar'
|
|
3
|
+
|
|
4
|
+
module Vagrant
|
|
5
|
+
class Action
|
|
6
|
+
module General
|
|
7
|
+
# A general packaging (tar) middleware. Given the following options,
|
|
8
|
+
# it will do the right thing:
|
|
9
|
+
#
|
|
10
|
+
# * package.output - The filename of the outputted package.
|
|
11
|
+
# * package.include - An array of files to include in the package.
|
|
12
|
+
# * package.directory - The directory which contains the contents to
|
|
13
|
+
# compress into the package.
|
|
14
|
+
#
|
|
15
|
+
# This middleware always produces the final file in the current working
|
|
16
|
+
# directory (FileUtils.pwd)
|
|
17
|
+
class Package
|
|
18
|
+
include Util
|
|
19
|
+
|
|
20
|
+
def initialize(app, env)
|
|
21
|
+
@app = app
|
|
22
|
+
@env = env
|
|
23
|
+
@env["package.output"] ||= env["config"].package.name
|
|
24
|
+
@env["package.include"] ||= []
|
|
25
|
+
@env["package.vagrantfile"] ||= nil
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def call(env)
|
|
29
|
+
@env = env
|
|
30
|
+
|
|
31
|
+
raise Errors::PackageOutputExists if File.exist?(tar_path)
|
|
32
|
+
raise Errors::PackageRequiresDirectory if !@env["package.directory"] || !File.directory?(@env["package.directory"])
|
|
33
|
+
|
|
34
|
+
verify_files_to_copy
|
|
35
|
+
compress
|
|
36
|
+
|
|
37
|
+
@app.call(env)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def recover(env)
|
|
41
|
+
# Don't delete the tar_path if the error is that the output already
|
|
42
|
+
# exists, since this will nuke the user's previous file.
|
|
43
|
+
if !env["vagrant.error"].is_a?(Errors::PackageOutputExists)
|
|
44
|
+
# Cleanup any packaged files if the packaging failed at some point.
|
|
45
|
+
File.delete(tar_path) if File.exist?(tar_path)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def files_to_copy
|
|
50
|
+
package_dir = Pathname.new(@env["package.directory"]).join("include")
|
|
51
|
+
|
|
52
|
+
files = @env["package.include"].inject({}) do |acc, file|
|
|
53
|
+
source = Pathname.new(file)
|
|
54
|
+
acc[file] = source.relative? ? package_dir.join(source) : package_dir.join(source.basename)
|
|
55
|
+
acc
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
files[@env["package.vagrantfile"]] = package_dir.join("_Vagrantfile") if @env["package.vagrantfile"]
|
|
59
|
+
files
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def verify_files_to_copy
|
|
63
|
+
files_to_copy.each do |file, _|
|
|
64
|
+
raise Errors::PackageIncludeMissing, :file => file if !File.exist?(file)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# This method copies the include files (passed in via command line)
|
|
69
|
+
# to the temporary directory so they are included in a sub-folder within
|
|
70
|
+
# the actual box
|
|
71
|
+
def copy_include_files
|
|
72
|
+
files_to_copy.each do |from, to|
|
|
73
|
+
@env.ui.info I18n.t("vagrant.actions.general.package.packaging", :file => from)
|
|
74
|
+
FileUtils.mkdir_p(to.parent)
|
|
75
|
+
|
|
76
|
+
# Copy direcotry contents recursively.
|
|
77
|
+
if File.directory?(from)
|
|
78
|
+
FileUtils.cp_r(Dir.glob(from), to.parent)
|
|
79
|
+
else
|
|
80
|
+
FileUtils.cp(from, to)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Compress the exported file into a package
|
|
86
|
+
def compress
|
|
87
|
+
@env.ui.info I18n.t("vagrant.actions.general.package.compressing", :tar_path => tar_path)
|
|
88
|
+
File.open(tar_path, Platform.tar_file_options) do |tar|
|
|
89
|
+
Archive::Tar::Minitar::Output.open(tar) do |output|
|
|
90
|
+
begin
|
|
91
|
+
current_dir = FileUtils.pwd
|
|
92
|
+
|
|
93
|
+
copy_include_files
|
|
94
|
+
|
|
95
|
+
FileUtils.cd(@env["package.directory"])
|
|
96
|
+
Dir.glob(File.join(".", "**", "*")).each do |entry|
|
|
97
|
+
Archive::Tar::Minitar.pack_file(entry, output)
|
|
98
|
+
end
|
|
99
|
+
ensure
|
|
100
|
+
FileUtils.cd(current_dir)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Path to the final box output file
|
|
107
|
+
def tar_path
|
|
108
|
+
File.join(FileUtils.pwd, @env["package.output"])
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
class Action
|
|
3
|
+
module General
|
|
4
|
+
# Simply validates the configuration of the current Vagrant
|
|
5
|
+
# environment.
|
|
6
|
+
class Validate
|
|
7
|
+
def initialize(app, env)
|
|
8
|
+
@app = app
|
|
9
|
+
@env = env
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def call(env)
|
|
13
|
+
@env["config"].validate! if !@env.has_key?("validate") || @env["validate"]
|
|
14
|
+
@app.call(@env)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
class Action
|
|
3
|
+
module VM
|
|
4
|
+
autoload :Boot, 'vagrant/action/vm/boot'
|
|
5
|
+
autoload :CheckAccessible, 'vagrant/action/vm/check_accessible'
|
|
6
|
+
autoload :CheckBox, 'vagrant/action/vm/check_box'
|
|
7
|
+
autoload :CheckGuestAdditions, 'vagrant/action/vm/check_guest_additions'
|
|
8
|
+
autoload :CleanMachineFolder, 'vagrant/action/vm/clean_machine_folder'
|
|
9
|
+
autoload :ClearForwardedPorts, 'vagrant/action/vm/clear_forwarded_ports'
|
|
10
|
+
autoload :ClearNFSExports, 'vagrant/action/vm/clear_nfs_exports'
|
|
11
|
+
autoload :ClearSharedFolders, 'vagrant/action/vm/clear_shared_folders'
|
|
12
|
+
autoload :Customize, 'vagrant/action/vm/customize'
|
|
13
|
+
autoload :Destroy, 'vagrant/action/vm/destroy'
|
|
14
|
+
autoload :DestroyUnusedNetworkInterfaces, 'vagrant/action/vm/destroy_unused_network_interfaces'
|
|
15
|
+
autoload :DiscardState, 'vagrant/action/vm/discard_state'
|
|
16
|
+
autoload :Export, 'vagrant/action/vm/export'
|
|
17
|
+
autoload :ForwardPorts, 'vagrant/action/vm/forward_ports'
|
|
18
|
+
autoload :Halt, 'vagrant/action/vm/halt'
|
|
19
|
+
autoload :HostName, 'vagrant/action/vm/host_name'
|
|
20
|
+
autoload :Import, 'vagrant/action/vm/import'
|
|
21
|
+
autoload :MatchMACAddress, 'vagrant/action/vm/match_mac_address'
|
|
22
|
+
autoload :Modify, 'vagrant/action/vm/modify'
|
|
23
|
+
autoload :Network, 'vagrant/action/vm/network'
|
|
24
|
+
autoload :NFS, 'vagrant/action/vm/nfs'
|
|
25
|
+
autoload :Package, 'vagrant/action/vm/package'
|
|
26
|
+
autoload :PackageVagrantfile, 'vagrant/action/vm/package_vagrantfile'
|
|
27
|
+
autoload :Provision, 'vagrant/action/vm/provision'
|
|
28
|
+
autoload :ProvisionerCleanup, 'vagrant/action/vm/provisioner_cleanup'
|
|
29
|
+
autoload :Resume, 'vagrant/action/vm/resume'
|
|
30
|
+
autoload :ShareFolders, 'vagrant/action/vm/share_folders'
|
|
31
|
+
autoload :Suspend, 'vagrant/action/vm/suspend'
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
class Action
|
|
3
|
+
module VM
|
|
4
|
+
class Boot
|
|
5
|
+
def initialize(app, env)
|
|
6
|
+
@app = app
|
|
7
|
+
@env = env
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def call(env)
|
|
11
|
+
@env = env
|
|
12
|
+
|
|
13
|
+
# Start up the VM and wait for it to boot.
|
|
14
|
+
boot
|
|
15
|
+
raise Errors::VMFailedToBoot if !wait_for_boot
|
|
16
|
+
|
|
17
|
+
@app.call(env)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def boot
|
|
21
|
+
@env.ui.info I18n.t("vagrant.actions.vm.boot.booting")
|
|
22
|
+
@env["vm"].vm.start(@env.env.config.vm.boot_mode)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def wait_for_boot
|
|
26
|
+
@env.ui.info I18n.t("vagrant.actions.vm.boot.waiting")
|
|
27
|
+
|
|
28
|
+
@env["config"].ssh.max_tries.to_i.times do |i|
|
|
29
|
+
if @env["vm"].ssh.up?
|
|
30
|
+
@env.ui.info I18n.t("vagrant.actions.vm.boot.ready")
|
|
31
|
+
return true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Return true so that the vm_failed_to_boot error doesn't
|
|
35
|
+
# get shown
|
|
36
|
+
return true if @env.interrupted?
|
|
37
|
+
|
|
38
|
+
sleep 2 if !@env["vagrant.test"]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
@env.ui.error I18n.t("vagrant.actions.vm.boot.failed")
|
|
42
|
+
false
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
class Action
|
|
3
|
+
module VM
|
|
4
|
+
class CheckAccessible
|
|
5
|
+
def initialize(app, env)
|
|
6
|
+
@app = app
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def call(env)
|
|
10
|
+
if env["vm"] && env["vm"].created? && !env["vm"].vm.accessible?
|
|
11
|
+
# The VM we are attempting to manipulate is inaccessible. This
|
|
12
|
+
# is a very bad situation and can only be fixed by the user. It
|
|
13
|
+
# also prohibits us from actually doing anything with the virtual
|
|
14
|
+
# machine, so we raise an error.
|
|
15
|
+
raise Errors::VMInaccessible
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
@app.call(env)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
class Action
|
|
3
|
+
module VM
|
|
4
|
+
class CheckBox
|
|
5
|
+
def initialize(app, env)
|
|
6
|
+
@app = app
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def call(env)
|
|
10
|
+
box_name = env["config"].vm.box
|
|
11
|
+
raise Errors::BoxNotSpecified if !box_name
|
|
12
|
+
|
|
13
|
+
if !env.env.boxes.find(box_name)
|
|
14
|
+
box_url = env["config"].vm.box_url
|
|
15
|
+
raise Errors::BoxSpecifiedDoesntExist, :name => box_name if !box_url
|
|
16
|
+
|
|
17
|
+
env.ui.info I18n.t("vagrant.actions.vm.check_box.not_found", :name => box_name)
|
|
18
|
+
Vagrant::Box.add(env.env, box_name, box_url)
|
|
19
|
+
env["boxes"].reload!
|
|
20
|
+
env.env.reload_config!
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
@app.call(env)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
class Action
|
|
3
|
+
module VM
|
|
4
|
+
# Middleware which verifies that the VM has the proper guest additions
|
|
5
|
+
# installed and prints a warning if they're not detected or if the
|
|
6
|
+
# version does not match the installed VirtualBox version.
|
|
7
|
+
class CheckGuestAdditions
|
|
8
|
+
def initialize(app, env)
|
|
9
|
+
@app = app
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def call(env)
|
|
13
|
+
# Use the raw interface for now, while the virtualbox gem
|
|
14
|
+
# doesn't support guest properties (due to cross platform issues)
|
|
15
|
+
version = env["vm"].vm.interface.get_guest_property_value("/VirtualBox/GuestAdd/Version")
|
|
16
|
+
if version.empty?
|
|
17
|
+
env.ui.warn I18n.t("vagrant.actions.vm.check_guest_additions.not_detected")
|
|
18
|
+
else
|
|
19
|
+
# Strip the -OSE/_OSE off from the guest additions
|
|
20
|
+
version = version.gsub(/[-_]ose/i, '')
|
|
21
|
+
|
|
22
|
+
if version != VirtualBox.version
|
|
23
|
+
env.ui.warn(I18n.t("vagrant.actions.vm.check_guest_additions.version_mismatch",
|
|
24
|
+
:guest_version => version,
|
|
25
|
+
:virtualbox_version => VirtualBox.version))
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Continue
|
|
30
|
+
@app.call(env)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
|
|
3
|
+
module Vagrant
|
|
4
|
+
class Action
|
|
5
|
+
module VM
|
|
6
|
+
# Cleans up the VirtualBox machine folder for any ".xml-prev"
|
|
7
|
+
# files which VirtualBox may have left over. This is a bug in
|
|
8
|
+
# VirtualBox. As soon as this is fixed, this middleware can and
|
|
9
|
+
# will be removed.
|
|
10
|
+
class CleanMachineFolder
|
|
11
|
+
def initialize(app, env)
|
|
12
|
+
@app = app
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def call(env)
|
|
16
|
+
clean_machine_folder
|
|
17
|
+
@app.call(env)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def clean_machine_folder
|
|
21
|
+
folder = File.join(VirtualBox::Global.global.system_properties.default_machine_folder, "*")
|
|
22
|
+
|
|
23
|
+
# Small safeguard against potentially unwanted rm-rf, since the default
|
|
24
|
+
# machine folder will typically always be greater than 10 characters long.
|
|
25
|
+
# For users with it < 10, out of luck?
|
|
26
|
+
return if folder.length < 10
|
|
27
|
+
|
|
28
|
+
Dir[folder].each do |f|
|
|
29
|
+
next unless File.directory?(f)
|
|
30
|
+
|
|
31
|
+
keep = Dir["#{f}/**/*"].find do |d|
|
|
32
|
+
# Find a file that doesn't have ".xml-prev" as the suffix,
|
|
33
|
+
# which signals that we want to keep this folder
|
|
34
|
+
File.file?(d) && !(File.basename(d) =~ /\.vbox-prev$/)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
FileUtils.rm_rf(f) if !keep
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
class Action
|
|
3
|
+
module VM
|
|
4
|
+
class ClearForwardedPorts
|
|
5
|
+
def initialize(app, env)
|
|
6
|
+
@app = app
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def call(env)
|
|
10
|
+
proc = lambda do |vm|
|
|
11
|
+
env.ui.info I18n.t("vagrant.actions.vm.clear_forward_ports.deleting")
|
|
12
|
+
|
|
13
|
+
vm.network_adapters.each do |na|
|
|
14
|
+
na.nat_driver.forwarded_ports.dup.each do |fp|
|
|
15
|
+
fp.destroy
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
env["vm.modify"].call(proc)
|
|
21
|
+
@app.call(env)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require File.expand_path("../nfs_helpers", __FILE__)
|
|
2
|
+
|
|
3
|
+
module Vagrant
|
|
4
|
+
class Action
|
|
5
|
+
module VM
|
|
6
|
+
class ClearNFSExports
|
|
7
|
+
include NFSHelpers
|
|
8
|
+
|
|
9
|
+
def initialize(app, env)
|
|
10
|
+
@app = app
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def call(env)
|
|
14
|
+
clear_nfs_exports(env)
|
|
15
|
+
@app.call(env)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|