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,21 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
|
|
3
|
+
module Vagrant
|
|
4
|
+
class Action
|
|
5
|
+
module Box
|
|
6
|
+
class Destroy
|
|
7
|
+
def initialize(app, env)
|
|
8
|
+
@app = app
|
|
9
|
+
@env = env
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def call(env)
|
|
13
|
+
env.ui.info I18n.t("vagrant.actions.box.destroy.destroying", :name => env["box"].name)
|
|
14
|
+
FileUtils.rm_rf(env["box"].directory)
|
|
15
|
+
|
|
16
|
+
@app.call(env)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
class Action
|
|
3
|
+
module Box
|
|
4
|
+
class Download
|
|
5
|
+
BASENAME = "box"
|
|
6
|
+
|
|
7
|
+
include Util
|
|
8
|
+
|
|
9
|
+
attr_reader :temp_path
|
|
10
|
+
|
|
11
|
+
def initialize(app, env)
|
|
12
|
+
@app = app
|
|
13
|
+
@env = env
|
|
14
|
+
@env["download.classes"] ||= []
|
|
15
|
+
@env["download.classes"] += [Downloaders::HTTP, Downloaders::File]
|
|
16
|
+
@downloader = nil
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def call(env)
|
|
20
|
+
@env = env
|
|
21
|
+
|
|
22
|
+
download if instantiate_downloader
|
|
23
|
+
@app.call(@env)
|
|
24
|
+
|
|
25
|
+
recover(env) # called in both cases to cleanup workspace
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def instantiate_downloader
|
|
29
|
+
@env["download.classes"].each do |klass|
|
|
30
|
+
if klass.match?(@env["box"].uri)
|
|
31
|
+
@env.ui.info I18n.t("vagrant.actions.box.download.with", :class => klass.to_s)
|
|
32
|
+
@downloader = klass.new(@env)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
raise Errors::BoxDownloadUnknownType if !@downloader
|
|
37
|
+
|
|
38
|
+
@downloader.prepare(@env["box"].uri)
|
|
39
|
+
true
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def download
|
|
43
|
+
with_tempfile do |tempfile|
|
|
44
|
+
download_to(tempfile)
|
|
45
|
+
@temp_path = @env["download.temp_path"] = tempfile.path
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def recover(env)
|
|
50
|
+
if temp_path && File.exist?(temp_path)
|
|
51
|
+
env.ui.info I18n.t("vagrant.actions.box.download.cleaning")
|
|
52
|
+
File.unlink(temp_path)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def with_tempfile
|
|
57
|
+
File.open(box_temp_path, Platform.tar_file_options) do |tempfile|
|
|
58
|
+
yield tempfile
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def box_temp_path
|
|
63
|
+
@env.env.tmp_path.join(BASENAME + Time.now.to_i.to_s)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def download_to(f)
|
|
67
|
+
@downloader.download!(@env["box"].uri, f)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'vagrant/action/general/package'
|
|
2
|
+
|
|
3
|
+
module Vagrant
|
|
4
|
+
class Action
|
|
5
|
+
module Box
|
|
6
|
+
# Packages a box which has already been unpackaged (such as
|
|
7
|
+
# for the `vagrant box repackage` command) by leveraging the
|
|
8
|
+
# general packager middleware.
|
|
9
|
+
class Package < General::Package
|
|
10
|
+
# Alias instead of calling super for testability
|
|
11
|
+
alias_method :general_call, :call
|
|
12
|
+
def call(env)
|
|
13
|
+
env["package.directory"] = env["box"].directory
|
|
14
|
+
general_call(env)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'archive/tar/minitar'
|
|
3
|
+
|
|
4
|
+
module Vagrant
|
|
5
|
+
class Action
|
|
6
|
+
module Box
|
|
7
|
+
# Unpackages a downloaded box to a given directory with a given
|
|
8
|
+
# name.
|
|
9
|
+
#
|
|
10
|
+
# # Required Variables
|
|
11
|
+
#
|
|
12
|
+
# * `download.temp_path` - A location for the downloaded box. This is
|
|
13
|
+
# set by the {Download} action.
|
|
14
|
+
# * `box` - A {Vagrant::Box} object.
|
|
15
|
+
#
|
|
16
|
+
class Unpackage
|
|
17
|
+
attr_reader :box_directory
|
|
18
|
+
|
|
19
|
+
def initialize(app, env)
|
|
20
|
+
@app = app
|
|
21
|
+
@env = env
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def call(env)
|
|
25
|
+
@env = env
|
|
26
|
+
|
|
27
|
+
setup_box_directory
|
|
28
|
+
decompress
|
|
29
|
+
|
|
30
|
+
@app.call(@env)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def recover(env)
|
|
34
|
+
if box_directory && File.directory?(box_directory)
|
|
35
|
+
FileUtils.rm_rf(box_directory)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def setup_box_directory
|
|
40
|
+
raise Errors::BoxAlreadyExists, :name => @env["box"].name if File.directory?(@env["box"].directory)
|
|
41
|
+
|
|
42
|
+
FileUtils.mkdir_p(@env["box"].directory)
|
|
43
|
+
@box_directory = @env["box"].directory
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def decompress
|
|
47
|
+
Dir.chdir(@env["box"].directory) do
|
|
48
|
+
@env.ui.info I18n.t("vagrant.actions.box.unpackage.extracting")
|
|
49
|
+
Archive::Tar::Minitar.unpack(@env["download.temp_path"], @env["box"].directory.to_s)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
class Action
|
|
3
|
+
module Box
|
|
4
|
+
class Verify
|
|
5
|
+
def initialize(app, env)
|
|
6
|
+
@app = app
|
|
7
|
+
@env = env
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def call(env)
|
|
11
|
+
begin
|
|
12
|
+
env.ui.info I18n.t("vagrant.actions.box.verify.verifying")
|
|
13
|
+
VirtualBox::Appliance.new(env["box"].ovf_file.to_s)
|
|
14
|
+
rescue Exception
|
|
15
|
+
raise Errors::BoxVerificationFailed
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
@app.call(env)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
class Action
|
|
3
|
+
# Action builder which provides a nice DSL for building up
|
|
4
|
+
# a middleware sequence for Vagrant actions. This code is based
|
|
5
|
+
# heavily off of `Rack::Builder` and `ActionDispatch::MiddlewareStack`
|
|
6
|
+
# in Rack and Rails, respectively.
|
|
7
|
+
#
|
|
8
|
+
# Usage
|
|
9
|
+
#
|
|
10
|
+
# Building an action sequence is very easy:
|
|
11
|
+
#
|
|
12
|
+
# app = Vagrant::Action::Builder.new do
|
|
13
|
+
# use MiddlewareA
|
|
14
|
+
# use MiddlewareB
|
|
15
|
+
# end
|
|
16
|
+
#
|
|
17
|
+
# Vagrant::Action.run(app)
|
|
18
|
+
#
|
|
19
|
+
class Builder
|
|
20
|
+
# Initializes the builder. An optional block can be passed which
|
|
21
|
+
# will be evaluated in the context of the instance.
|
|
22
|
+
def initialize(&block)
|
|
23
|
+
instance_eval(&block) if block_given?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Returns the current stack of middlewares. You probably won't
|
|
27
|
+
# need to use this directly, and it's recommended that you don't.
|
|
28
|
+
#
|
|
29
|
+
# @return [Array]
|
|
30
|
+
def stack
|
|
31
|
+
@stack ||= []
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Returns a mergeable version of the builder. If `use` is called with
|
|
35
|
+
# the return value of this method, then the stack will merge, instead
|
|
36
|
+
# of being treated as a separate single middleware.
|
|
37
|
+
def flatten
|
|
38
|
+
lambda do |env|
|
|
39
|
+
self.call(env)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Adds a middleware class to the middleware stack. Any additional
|
|
44
|
+
# args and a block, if given, are saved and passed to the initializer
|
|
45
|
+
# of the middleware.
|
|
46
|
+
#
|
|
47
|
+
# @param [Class] middleware The middleware class
|
|
48
|
+
def use(middleware, *args, &block)
|
|
49
|
+
if middleware.kind_of?(Builder)
|
|
50
|
+
# Prepend with a environment setter if args are given
|
|
51
|
+
self.use(Env::Set, *args, &block) if !args.empty? && args.first.is_a?(Hash)
|
|
52
|
+
|
|
53
|
+
# Merge in the other builder's stack into our own
|
|
54
|
+
self.stack.concat(middleware.stack)
|
|
55
|
+
else
|
|
56
|
+
self.stack << [middleware, args, block]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
self
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Inserts a middleware at the given index or directly before the
|
|
63
|
+
# given middleware object.
|
|
64
|
+
def insert(index, middleware, *args, &block)
|
|
65
|
+
index = self.index(index) unless index.is_a?(Integer)
|
|
66
|
+
stack.insert(index, [middleware, args, block])
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
alias_method :insert_before, :insert
|
|
70
|
+
|
|
71
|
+
# Inserts a middleware after the given index or middleware object.
|
|
72
|
+
def insert_after(index, middleware, *args, &block)
|
|
73
|
+
index = self.index(index) unless index.is_a?(Integer)
|
|
74
|
+
raise "no such middleware to insert after: #{index.inspect}" unless index
|
|
75
|
+
insert(index + 1, middleware, *args, &block)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Swaps out the given middlware object or index with the new
|
|
79
|
+
# middleware.
|
|
80
|
+
def swap(index, middleware, *args, &block)
|
|
81
|
+
if index.is_a?(Integer)
|
|
82
|
+
delete(index)
|
|
83
|
+
insert(index, middleware, *args, &block)
|
|
84
|
+
else
|
|
85
|
+
insert_before(index, middleware, *args, &block)
|
|
86
|
+
delete(index)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Deletes the given middleware object or index
|
|
91
|
+
def delete(index)
|
|
92
|
+
index = self.index(index) unless index.is_a?(Integer)
|
|
93
|
+
stack.delete_at(index)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Returns the numeric index for the given middleware object.
|
|
97
|
+
#
|
|
98
|
+
# @param [Object] object The item to find the index for
|
|
99
|
+
# @return [Integer]
|
|
100
|
+
def index(object)
|
|
101
|
+
stack.each_with_index do |item, i|
|
|
102
|
+
return i if item[0] == object
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
nil
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Converts the builder stack to a runnable action sequence.
|
|
109
|
+
#
|
|
110
|
+
# @param [Vagrant::Action::Environment] env The action environment
|
|
111
|
+
# @return [Object] A callable object
|
|
112
|
+
def to_app(env)
|
|
113
|
+
# Wrap the middleware stack with the Warden to provide a consistent
|
|
114
|
+
# and predictable behavior upon exceptions.
|
|
115
|
+
Warden.new(stack.dup, env)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Runs the builder stack with the given environment.
|
|
119
|
+
def call(env)
|
|
120
|
+
to_app(env).call(env)
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
class Action
|
|
3
|
+
# Registers the builtin actions. These are locked away in a
|
|
4
|
+
# method so that their definition can be deferred until after
|
|
5
|
+
# all the necessary Vagrant libraries are loaded. Hopefully
|
|
6
|
+
# in the future this will no longer be necessary with autoloading.
|
|
7
|
+
def self.builtin!
|
|
8
|
+
# provision - Provisions a running VM
|
|
9
|
+
register(:provision, Builder.new do
|
|
10
|
+
use VM::Provision
|
|
11
|
+
end)
|
|
12
|
+
|
|
13
|
+
# start - Starts a VM, assuming it already exists on the
|
|
14
|
+
# environment.
|
|
15
|
+
register(:start, Builder.new do
|
|
16
|
+
use VM::CleanMachineFolder
|
|
17
|
+
use VM::ClearForwardedPorts
|
|
18
|
+
use VM::ForwardPorts
|
|
19
|
+
use VM::Provision
|
|
20
|
+
use VM::NFS
|
|
21
|
+
use VM::ClearSharedFolders
|
|
22
|
+
use VM::ShareFolders
|
|
23
|
+
use VM::HostName
|
|
24
|
+
use VM::Network
|
|
25
|
+
use VM::Customize
|
|
26
|
+
use VM::Modify
|
|
27
|
+
use VM::Boot
|
|
28
|
+
end)
|
|
29
|
+
|
|
30
|
+
# halt - Halts the VM, attempting gracefully but then forcing
|
|
31
|
+
# a restart if fails.
|
|
32
|
+
register(:halt, Builder.new do
|
|
33
|
+
use VM::DiscardState
|
|
34
|
+
use VM::Halt
|
|
35
|
+
end)
|
|
36
|
+
|
|
37
|
+
# suspend - Suspends the VM
|
|
38
|
+
register(:suspend, Builder.new do
|
|
39
|
+
use VM::Suspend
|
|
40
|
+
end)
|
|
41
|
+
|
|
42
|
+
# resume - Resume a VM
|
|
43
|
+
register(:resume, Builder.new do
|
|
44
|
+
use VM::Resume
|
|
45
|
+
end)
|
|
46
|
+
|
|
47
|
+
# reload - Halts then restarts the VM
|
|
48
|
+
register(:reload, Builder.new do
|
|
49
|
+
use Action[:halt]
|
|
50
|
+
use Action[:start]
|
|
51
|
+
end)
|
|
52
|
+
|
|
53
|
+
# up - Imports, prepares, then starts a fresh VM.
|
|
54
|
+
register(:up, Builder.new do
|
|
55
|
+
use VM::CheckBox
|
|
56
|
+
use VM::Import
|
|
57
|
+
use VM::MatchMACAddress
|
|
58
|
+
use VM::CheckGuestAdditions
|
|
59
|
+
use Action[:start]
|
|
60
|
+
end)
|
|
61
|
+
|
|
62
|
+
# destroy - Halts, cleans up, and destroys an existing VM
|
|
63
|
+
register(:destroy, Builder.new do
|
|
64
|
+
use Action[:halt], :force => true
|
|
65
|
+
use VM::ProvisionerCleanup
|
|
66
|
+
use VM::ClearNFSExports
|
|
67
|
+
use VM::Destroy
|
|
68
|
+
use VM::CleanMachineFolder
|
|
69
|
+
use VM::DestroyUnusedNetworkInterfaces
|
|
70
|
+
end)
|
|
71
|
+
|
|
72
|
+
# package - Export and package the VM
|
|
73
|
+
register(:package, Builder.new do
|
|
74
|
+
use Action[:halt]
|
|
75
|
+
use VM::ClearForwardedPorts
|
|
76
|
+
use VM::ClearSharedFolders
|
|
77
|
+
use VM::Modify
|
|
78
|
+
use VM::Export
|
|
79
|
+
use VM::PackageVagrantfile
|
|
80
|
+
use VM::Package
|
|
81
|
+
end)
|
|
82
|
+
|
|
83
|
+
# box_add - Download and add a box.
|
|
84
|
+
register(:box_add, Builder.new do
|
|
85
|
+
use Box::Download
|
|
86
|
+
use Box::Unpackage
|
|
87
|
+
use Box::Verify
|
|
88
|
+
end)
|
|
89
|
+
|
|
90
|
+
# box_remove - Removes/deletes a box.
|
|
91
|
+
register(:box_remove, Builder.new do
|
|
92
|
+
use Box::Destroy
|
|
93
|
+
end)
|
|
94
|
+
|
|
95
|
+
# box_repackage - Repackages a box.
|
|
96
|
+
register(:box_repackage, Builder.new do
|
|
97
|
+
use Box::Package
|
|
98
|
+
end)
|
|
99
|
+
|
|
100
|
+
# Other callbacks. There will be more of these in the future. For
|
|
101
|
+
# now, these are limited to what are needed internally.
|
|
102
|
+
register(:before_action_run, Builder.new do
|
|
103
|
+
use General::Validate
|
|
104
|
+
use VM::CheckAccessible
|
|
105
|
+
end)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
class Action
|
|
3
|
+
module Env
|
|
4
|
+
# A middleware which just sets up the environment with some
|
|
5
|
+
# options which are passed to it.
|
|
6
|
+
class Set
|
|
7
|
+
def initialize(app,env,options=nil)
|
|
8
|
+
@app = app
|
|
9
|
+
env.merge!(options || {})
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def call(env)
|
|
13
|
+
@app.call(env)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|