vagrant 0.8.10 → 0.9.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 +77 -1
- data/Gemfile +0 -14
- data/LICENSE +1 -1
- data/bin/vagrant +47 -20
- data/config/default.rb +6 -14
- data/lib/vagrant.rb +132 -5
- data/lib/vagrant/action.rb +45 -123
- data/lib/vagrant/action/box/destroy.rb +7 -3
- data/lib/vagrant/action/box/download.rb +8 -8
- data/lib/vagrant/action/box/package.rb +2 -2
- data/lib/vagrant/action/box/unpackage.rb +13 -7
- data/lib/vagrant/action/box/verify.rb +5 -5
- data/lib/vagrant/action/builder.rb +23 -19
- data/lib/vagrant/action/builtin.rb +117 -79
- data/lib/vagrant/action/env/set.rb +7 -4
- data/lib/vagrant/action/environment.rb +3 -41
- data/lib/vagrant/action/general/package.rb +14 -29
- data/lib/vagrant/action/general/validate.rb +2 -2
- data/lib/vagrant/action/runner.rb +53 -0
- data/lib/vagrant/action/vm/boot.rb +9 -9
- data/lib/vagrant/action/vm/check_accessible.rb +2 -2
- data/lib/vagrant/action/vm/check_box.rb +10 -12
- data/lib/vagrant/action/vm/check_guest_additions.rb +8 -8
- data/lib/vagrant/action/vm/check_port_collisions.rb +85 -0
- data/lib/vagrant/action/vm/clean_machine_folder.rb +4 -4
- data/lib/vagrant/action/vm/clear_forwarded_ports.rb +3 -11
- data/lib/vagrant/action/vm/clear_network_interfaces.rb +31 -0
- data/lib/vagrant/action/vm/clear_shared_folders.rb +2 -11
- data/lib/vagrant/action/vm/customize.rb +19 -9
- data/lib/vagrant/action/vm/destroy.rb +4 -4
- data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +2 -12
- data/lib/vagrant/action/vm/discard_state.rb +4 -4
- data/lib/vagrant/action/vm/export.rb +13 -8
- data/lib/vagrant/action/vm/forward_ports.rb +55 -102
- data/lib/vagrant/action/vm/halt.rb +9 -6
- data/lib/vagrant/action/vm/host_name.rb +4 -4
- data/lib/vagrant/action/vm/import.rb +19 -10
- data/lib/vagrant/action/vm/match_mac_address.rb +4 -9
- data/lib/vagrant/action/vm/network.rb +300 -94
- data/lib/vagrant/action/vm/nfs.rb +41 -26
- data/lib/vagrant/action/vm/package.rb +1 -1
- data/lib/vagrant/action/vm/package_vagrantfile.rb +5 -2
- data/lib/vagrant/action/vm/provision.rb +42 -13
- data/lib/vagrant/action/vm/provisioner_cleanup.rb +2 -2
- data/lib/vagrant/action/vm/{clear_nfs_exports.rb → prune_nfs_exports.rb} +7 -7
- data/lib/vagrant/action/vm/resume.rb +4 -4
- data/lib/vagrant/action/vm/setup_package_files.rb +54 -0
- data/lib/vagrant/action/vm/share_folders.rb +63 -39
- data/lib/vagrant/action/vm/suspend.rb +4 -4
- data/lib/vagrant/action/warden.rb +13 -6
- data/lib/vagrant/box.rb +9 -55
- data/lib/vagrant/box_collection.rb +22 -17
- data/lib/vagrant/cli.rb +62 -47
- data/lib/vagrant/command.rb +18 -20
- data/lib/vagrant/command/base.rb +135 -90
- data/lib/vagrant/command/box.rb +46 -21
- data/lib/vagrant/command/box_add.rb +33 -0
- data/lib/vagrant/command/box_list.rb +25 -0
- data/lib/vagrant/command/box_remove.rb +23 -0
- data/lib/vagrant/command/box_repackage.rb +23 -0
- data/lib/vagrant/command/destroy.rb +16 -5
- data/lib/vagrant/command/halt.rb +25 -7
- data/lib/vagrant/command/init.rb +30 -7
- data/lib/vagrant/command/package.rb +49 -18
- data/lib/vagrant/command/provision.rb +22 -9
- data/lib/vagrant/command/reload.rb +18 -5
- data/lib/vagrant/command/resume.rb +18 -5
- data/lib/vagrant/command/ssh.rb +69 -31
- data/lib/vagrant/command/ssh_config.rb +37 -22
- data/lib/vagrant/command/status.rb +22 -20
- data/lib/vagrant/command/suspend.rb +18 -5
- data/lib/vagrant/command/up.rb +41 -8
- data/lib/vagrant/communication.rb +7 -0
- data/lib/vagrant/communication/base.rb +56 -0
- data/lib/vagrant/communication/ssh.rb +200 -0
- data/lib/vagrant/config.rb +29 -103
- data/lib/vagrant/config/base.rb +18 -26
- data/lib/vagrant/config/container.rb +37 -0
- data/lib/vagrant/config/error_recorder.rb +1 -1
- data/lib/vagrant/config/loader.rb +125 -0
- data/lib/vagrant/config/nfs.rb +1 -3
- data/lib/vagrant/config/package.rb +1 -3
- data/lib/vagrant/config/ssh.rb +31 -16
- data/lib/vagrant/config/top.rb +36 -25
- data/lib/vagrant/config/vagrant.rb +2 -5
- data/lib/vagrant/config/vm.rb +115 -56
- data/lib/vagrant/config/vm/provisioner.rb +16 -20
- data/lib/vagrant/config/vm/sub_vm.rb +1 -1
- data/lib/vagrant/data_store.rb +23 -15
- data/lib/vagrant/downloaders/base.rb +7 -5
- data/lib/vagrant/downloaders/file.rb +4 -4
- data/lib/vagrant/downloaders/http.rb +4 -5
- data/lib/vagrant/driver.rb +7 -0
- data/lib/vagrant/driver/virtualbox.rb +121 -0
- data/lib/vagrant/driver/virtualbox_4_0.rb +411 -0
- data/lib/vagrant/driver/virtualbox_4_1.rb +411 -0
- data/lib/vagrant/driver/virtualbox_base.rb +284 -0
- data/lib/vagrant/environment.rb +221 -240
- data/lib/vagrant/errors.rb +74 -25
- data/lib/vagrant/guest.rb +16 -0
- data/lib/vagrant/guest/arch.rb +48 -0
- data/lib/vagrant/{systems → guest}/base.rb +30 -18
- data/lib/vagrant/guest/debian.rb +61 -0
- data/lib/vagrant/{systems → guest}/freebsd.rb +11 -18
- data/lib/vagrant/guest/gentoo.rb +32 -0
- data/lib/vagrant/guest/linux.rb +78 -0
- data/lib/vagrant/{systems → guest}/linux/config.rb +2 -4
- data/lib/vagrant/guest/linux/error.rb +9 -0
- data/lib/vagrant/guest/redhat.rb +66 -0
- data/lib/vagrant/guest/solaris.rb +114 -0
- data/lib/vagrant/{systems → guest}/suse.rb +2 -2
- data/lib/vagrant/guest/ubuntu.rb +23 -0
- data/lib/vagrant/hosts.rb +23 -6
- data/lib/vagrant/hosts/arch.rb +7 -3
- data/lib/vagrant/hosts/base.rb +36 -46
- data/lib/vagrant/hosts/bsd.rb +53 -16
- data/lib/vagrant/hosts/fedora.rb +14 -0
- data/lib/vagrant/hosts/freebsd.rb +6 -36
- data/lib/vagrant/hosts/linux.rb +45 -20
- data/lib/vagrant/hosts/windows.rb +16 -0
- data/lib/vagrant/provisioners.rb +10 -7
- data/lib/vagrant/provisioners/base.rb +11 -34
- data/lib/vagrant/provisioners/chef.rb +30 -26
- data/lib/vagrant/provisioners/chef_client.rb +37 -23
- data/lib/vagrant/provisioners/chef_solo.rb +61 -16
- data/lib/vagrant/provisioners/puppet.rb +70 -38
- data/lib/vagrant/provisioners/puppet_server.rb +12 -13
- data/lib/vagrant/provisioners/shell.rb +24 -24
- data/lib/vagrant/registry.rb +49 -0
- data/lib/vagrant/ssh.rb +82 -153
- data/lib/vagrant/ui.rb +118 -50
- data/lib/vagrant/util/busy.rb +1 -1
- data/lib/vagrant/util/file_mode.rb +12 -0
- data/lib/vagrant/util/network_ip.rb +28 -0
- data/lib/vagrant/util/platform.rb +1 -0
- data/lib/vagrant/util/subprocess.rb +227 -0
- data/lib/vagrant/version.rb +1 -1
- data/lib/vagrant/vm.rb +111 -97
- data/tasks/acceptance.rake +3 -3
- data/tasks/test.rake +7 -2
- data/templates/commands/init/Vagrantfile.erb +11 -4
- data/templates/{ssh_config.erb → commands/ssh_config/config.erb} +0 -0
- data/templates/guests/arch/network_dhcp.erb +7 -0
- data/templates/guests/arch/network_static.erb +7 -0
- data/templates/guests/debian/network_dhcp.erb +6 -0
- data/templates/guests/debian/network_static.erb +7 -0
- data/templates/guests/gentoo/network_dhcp.erb +4 -0
- data/templates/guests/gentoo/network_static.erb +4 -0
- data/templates/guests/redhat/network_dhcp.erb +6 -0
- data/templates/guests/redhat/network_static.erb +7 -0
- data/templates/locales/en.yml +241 -122
- data/templates/{chef_server_client.erb → provisioners/chef_client/client.erb} +0 -0
- data/templates/{chef_solo_solo.erb → provisioners/chef_solo/solo.erb} +0 -0
- data/test/acceptance/base.rb +10 -10
- data/test/acceptance/box_test.rb +28 -6
- data/test/acceptance/destroy_test.rb +1 -1
- data/test/acceptance/halt_test.rb +4 -4
- data/test/acceptance/init_test.rb +3 -3
- data/test/acceptance/networking/host_only_test.rb +37 -0
- data/test/acceptance/networking/port_forward_test.rb +125 -0
- data/test/acceptance/package_test.rb +46 -0
- data/test/acceptance/provisioning/basic_test.rb +61 -0
- data/test/acceptance/provisioning/chef_solo_test.rb +37 -0
- data/test/acceptance/provisioning/shell_test.rb +53 -0
- data/test/acceptance/resume_test.rb +1 -1
- data/test/acceptance/skeletons/chef_solo_basic/README.md +3 -0
- data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +5 -0
- data/test/acceptance/skeletons/chef_solo_json/README.md +3 -0
- data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +6 -0
- data/test/acceptance/skeletons/provisioner_multi/README.md +3 -0
- data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +5 -0
- data/test/acceptance/ssh_test.rb +7 -2
- data/test/acceptance/support/config.rb +1 -1
- data/test/acceptance/support/isolated_environment.rb +41 -150
- data/test/acceptance/support/matchers/match_output.rb +1 -1
- data/test/acceptance/support/matchers/succeed.rb +14 -0
- data/test/acceptance/support/network_tests.rb +29 -0
- data/test/acceptance/support/output.rb +9 -1
- data/test/acceptance/support/shared/base_context.rb +16 -9
- data/test/acceptance/support/shared/command_examples.rb +4 -4
- data/test/acceptance/suspend_test.rb +1 -1
- data/test/acceptance/up_basic_test.rb +26 -7
- data/test/acceptance/up_with_box_url.rb +1 -1
- data/test/acceptance/vagrant_test.rb +1 -1
- data/test/acceptance/version_test.rb +0 -5
- data/test/support/isolated_environment.rb +46 -0
- data/test/{acceptance/support → support}/tempdir.rb +0 -0
- data/test/unit/base.rb +21 -0
- data/test/unit/support/isolated_environment.rb +39 -0
- data/test/unit/support/shared/base_context.rb +30 -0
- data/test/unit/vagrant/action/builder_test.rb +126 -177
- data/test/unit/vagrant/action/environment_test.rb +10 -21
- data/test/unit/vagrant/action/runner_test.rb +65 -0
- data/test/unit/vagrant/action/warden_test.rb +64 -97
- data/test/unit/vagrant/box_collection_test.rb +44 -33
- data/test/unit/vagrant/box_test.rb +25 -65
- data/test/unit/vagrant/command/base_test.rb +141 -14
- data/test/unit/vagrant/config/base_test.rb +16 -43
- data/test/unit/vagrant/config/loader_test.rb +79 -0
- data/test/unit/vagrant/config/top_test.rb +69 -0
- data/test/unit/vagrant/config/vm_test.rb +62 -47
- data/test/unit/vagrant/config_test.rb +16 -151
- data/test/unit/vagrant/data_store_test.rb +43 -61
- data/test/unit/vagrant/downloaders/base_test.rb +12 -22
- data/test/unit/vagrant/downloaders/file_test.rb +58 -31
- data/test/unit/vagrant/downloaders/http_test.rb +12 -86
- data/test/unit/vagrant/environment_test.rb +107 -536
- data/test/unit/vagrant/hosts_test.rb +36 -0
- data/test/unit/vagrant/registry_test.rb +56 -0
- data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
- data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +23 -24
- data/test/unit/vagrant/util/network_ip_test.rb +17 -0
- data/test/unit/vagrant/util/retryable_test.rb +90 -34
- data/test/unit/vagrant_test.rb +27 -0
- data/test/{unit → unit_legacy}/locales/en.yml +0 -0
- data/test/{unit → unit_legacy}/test_helper.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/box/destroy_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/box/download_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/box/package_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/box/unpackage_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/box/verify_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/env/set_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/general/package_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/general/validate_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/boot_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/check_accessible_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/check_box_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/check_guest_additions_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/clean_machine_folder_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/clear_forwarded_ports_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/clear_nfs_exports_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/clear_shared_folders_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/customize_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/destroy_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/discard_state_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/export_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/forward_ports_helpers_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/forward_ports_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/halt_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/host_name_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/import_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/match_mac_address_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/modify_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/network_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/nfs_helpers_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/nfs_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/package_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/package_vagrantfile_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/provision_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/provisioner_cleanup_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/resume_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/share_folders_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action/vm/suspend_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/action_test.rb +0 -0
- data/test/unit_legacy/vagrant/box_collection_test.rb +45 -0
- data/test/unit_legacy/vagrant/box_test.rb +74 -0
- data/test/{unit → unit_legacy}/vagrant/cli_test.rb +0 -0
- data/test/unit_legacy/vagrant/command/base_test.rb +23 -0
- data/test/{unit → unit_legacy}/vagrant/command/group_base_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/command/helpers_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/command/init_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/command/package_test.rb +0 -0
- data/test/unit_legacy/vagrant/config/base_test.rb +52 -0
- data/test/{unit → unit_legacy}/vagrant/config/error_recorder_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/config/ssh_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/config/vagrant_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/config/vm/provisioner_test.rb +0 -0
- data/test/unit_legacy/vagrant/config/vm_test.rb +47 -0
- data/test/unit_legacy/vagrant/config_test.rb +148 -0
- data/test/unit_legacy/vagrant/downloaders/http_test.rb +93 -0
- data/test/unit_legacy/vagrant/environment_test.rb +539 -0
- data/test/{unit → unit_legacy}/vagrant/errors_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/hosts/base_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/hosts/bsd_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/hosts/linux_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/plugin_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/provisioners/base_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/provisioners/chef_client_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/provisioners/chef_solo_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/provisioners/chef_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/provisioners/puppet_server_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/provisioners/puppet_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/provisioners/shell_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/ssh/session_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/ssh_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/systems/base_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/systems/linux_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/util/busy_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/util/counter_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/util/platform_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/util/stacked_proc_runner_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/util/template_renderer_test.rb +0 -0
- data/test/{unit → unit_legacy}/vagrant/vm_test.rb +0 -0
- data/vagrant.gemspec +7 -9
- metadata +214 -216
- data/keys/vagrant.ppk +0 -26
- data/lib/vagrant/action/box.rb +0 -11
- data/lib/vagrant/action/env.rb +0 -7
- data/lib/vagrant/action/general.rb +0 -8
- data/lib/vagrant/action/vm.rb +0 -34
- data/lib/vagrant/action/vm/forward_ports_helpers.rb +0 -28
- data/lib/vagrant/action/vm/modify.rb +0 -37
- data/lib/vagrant/action/vm/nfs_helpers.rb +0 -11
- data/lib/vagrant/command/group_base.rb +0 -107
- data/lib/vagrant/command/helpers.rb +0 -33
- data/lib/vagrant/command/named_base.rb +0 -14
- data/lib/vagrant/command/upgrade_to_060.rb +0 -45
- data/lib/vagrant/command/version.rb +0 -13
- data/lib/vagrant/ssh/session.rb +0 -136
- data/lib/vagrant/systems.rb +0 -13
- data/lib/vagrant/systems/arch.rb +0 -34
- data/lib/vagrant/systems/debian.rb +0 -36
- data/lib/vagrant/systems/gentoo.rb +0 -27
- data/lib/vagrant/systems/linux.rb +0 -82
- data/lib/vagrant/systems/linux/error.rb +0 -9
- data/lib/vagrant/systems/redhat.rb +0 -48
- data/lib/vagrant/systems/solaris.rb +0 -113
- data/lib/vagrant/systems/ubuntu.rb +0 -17
- data/templates/network_entry_arch.erb +0 -9
- data/templates/network_entry_debian.erb +0 -8
- data/templates/network_entry_gentoo.erb +0 -5
- data/templates/network_entry_redhat.erb +0 -9
- data/test/unit/vagrant/ui_test.rb +0 -29
@@ -1,7 +1,5 @@
|
|
1
|
-
require File.expand_path("../nfs_helpers", __FILE__)
|
2
|
-
|
3
1
|
module Vagrant
|
4
|
-
|
2
|
+
module Action
|
5
3
|
module VM
|
6
4
|
# Enables NFS based shared folders. `nfsd` must already be installed
|
7
5
|
# on the host machine, and NFS client must already be installed on
|
@@ -16,8 +14,6 @@ module Vagrant
|
|
16
14
|
# folder.
|
17
15
|
#
|
18
16
|
class NFS
|
19
|
-
include NFSHelpers
|
20
|
-
|
21
17
|
def initialize(app,env)
|
22
18
|
@app = app
|
23
19
|
@env = env
|
@@ -32,7 +28,6 @@ module Vagrant
|
|
32
28
|
|
33
29
|
if !folders.empty?
|
34
30
|
prepare_folders
|
35
|
-
clear_nfs_exports(env)
|
36
31
|
export_folders
|
37
32
|
end
|
38
33
|
|
@@ -42,7 +37,12 @@ module Vagrant
|
|
42
37
|
end
|
43
38
|
|
44
39
|
def recover(env)
|
45
|
-
|
40
|
+
# Ignore any VagrantErrors, because they were expected and
|
41
|
+
# will cause the VM to stick around.
|
42
|
+
return if env["vagrant.error"].is_a?(Errors::VagrantError)
|
43
|
+
|
44
|
+
# Otherwise, clear the NFS exports.
|
45
|
+
clear_nfs_exports(env)
|
46
46
|
end
|
47
47
|
|
48
48
|
# Returns the folders which are to be synced via NFS.
|
@@ -55,14 +55,14 @@ module Vagrant
|
|
55
55
|
# task.
|
56
56
|
def extract_folders
|
57
57
|
# Load the NFS enabled shared folders
|
58
|
-
@folders = @env[
|
58
|
+
@folders = @env[:vm].config.vm.shared_folders.inject({}) do |acc, data|
|
59
59
|
key, opts = data
|
60
60
|
|
61
61
|
if opts[:nfs]
|
62
62
|
# Duplicate the options, set the hostpath, and set disabled on the original
|
63
63
|
# options so the ShareFolders middleware doesn't try to mount it.
|
64
64
|
acc[key] = opts.dup
|
65
|
-
acc[key][:hostpath] = File.expand_path(opts[:hostpath], @env
|
65
|
+
acc[key][:hostpath] = File.expand_path(opts[:hostpath], @env[:root_path])
|
66
66
|
opts[:disabled] = true
|
67
67
|
end
|
68
68
|
|
@@ -91,7 +91,7 @@ module Vagrant
|
|
91
91
|
|
92
92
|
# The options on the hash get priority, then the default
|
93
93
|
# values
|
94
|
-
value = opts.has_key?(key) ? opts[key] : @env[
|
94
|
+
value = opts.has_key?(key) ? opts[key] : @env[:vm].config.nfs.send(key)
|
95
95
|
return value if value != :auto
|
96
96
|
|
97
97
|
# Get UID/GID from folder if we've made it this far
|
@@ -104,31 +104,40 @@ module Vagrant
|
|
104
104
|
# involves adding a line to `/etc/exports` for this VM, but it is
|
105
105
|
# up to the host class to define the specific behavior.
|
106
106
|
def export_folders
|
107
|
-
@env
|
108
|
-
|
109
|
-
@env["host"].nfs_export(guest_ip, folders)
|
107
|
+
@env[:ui].info I18n.t("vagrant.actions.vm.nfs.exporting")
|
108
|
+
@env[:host].nfs_export(@env[:vm].uuid, guest_ip, folders)
|
110
109
|
end
|
111
110
|
|
112
111
|
# Uses the system class to mount the NFS folders.
|
113
112
|
def mount_folders
|
114
|
-
@env
|
113
|
+
@env[:ui].info I18n.t("vagrant.actions.vm.nfs.mounting")
|
115
114
|
|
116
115
|
# Only mount the folders which have a guest path specified
|
117
|
-
|
118
|
-
|
119
|
-
|
116
|
+
mount_folders = {}
|
117
|
+
folders.each do |name, opts|
|
118
|
+
if opts[:guestpath]
|
119
|
+
mount_folders[name] = opts.dup
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
@env[:vm].guest.mount_nfs(host_ip, mount_folders)
|
120
124
|
end
|
121
125
|
|
122
126
|
# Returns the IP address of the first host only network adapter
|
123
127
|
#
|
124
128
|
# @return [String]
|
125
129
|
def host_ip
|
126
|
-
|
127
|
-
|
130
|
+
@env[:vm].driver.read_network_interfaces.each do |adapter, opts|
|
131
|
+
if opts[:type] == :hostonly
|
132
|
+
@env[:vm].driver.read_host_only_interfaces.each do |interface|
|
133
|
+
if interface[:name] == opts[:hostonly]
|
134
|
+
return interface[:ip]
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
128
138
|
end
|
129
139
|
|
130
|
-
|
131
|
-
interface.host_interface_object.ip_address
|
140
|
+
nil
|
132
141
|
end
|
133
142
|
|
134
143
|
# Returns the IP address of the guest by looking at the first
|
@@ -136,12 +145,18 @@ module Vagrant
|
|
136
145
|
#
|
137
146
|
# @return [String]
|
138
147
|
def guest_ip
|
139
|
-
@env[
|
148
|
+
@env[:vm].config.vm.networks.each do |type, args|
|
149
|
+
if type == :hostonly && args[0].is_a?(String)
|
150
|
+
return args[0]
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
nil
|
140
155
|
end
|
141
156
|
|
142
157
|
# Checks if there are any NFS enabled shared folders.
|
143
158
|
def nfs_enabled?
|
144
|
-
@env[
|
159
|
+
@env[:vm].config.vm.shared_folders.each do |key, opts|
|
145
160
|
return true if opts[:nfs]
|
146
161
|
end
|
147
162
|
|
@@ -150,9 +165,9 @@ module Vagrant
|
|
150
165
|
|
151
166
|
# Verifies that the host is set and supports NFS.
|
152
167
|
def verify_settings
|
153
|
-
raise Errors::NFSHostRequired if @env[
|
154
|
-
raise Errors::NFSNotSupported if !@env[
|
155
|
-
raise Errors::NFSNoHostNetwork if
|
168
|
+
raise Errors::NFSHostRequired if @env[:host].nil?
|
169
|
+
raise Errors::NFSNotSupported if !@env[:host].nfs?
|
170
|
+
raise Errors::NFSNoHostNetwork if !guest_ip
|
156
171
|
end
|
157
172
|
end
|
158
173
|
end
|
@@ -1,9 +1,12 @@
|
|
1
|
+
require 'vagrant/util/template_renderer'
|
2
|
+
|
1
3
|
module Vagrant
|
2
|
-
|
4
|
+
module Action
|
3
5
|
module VM
|
4
6
|
# Puts a generated Vagrantfile into the package directory so that
|
5
7
|
# it can be included in the package.
|
6
8
|
class PackageVagrantfile
|
9
|
+
# For TemplateRenderer
|
7
10
|
include Util
|
8
11
|
|
9
12
|
def initialize(app, env)
|
@@ -23,7 +26,7 @@ module Vagrant
|
|
23
26
|
def create_vagrantfile
|
24
27
|
File.open(File.join(@env["export.temp_dir"], "Vagrantfile"), "w") do |f|
|
25
28
|
f.write(TemplateRenderer.render("package_Vagrantfile", {
|
26
|
-
:base_mac => @env["vm"].
|
29
|
+
:base_mac => @env["vm"].driver.read_mac_address
|
27
30
|
}))
|
28
31
|
end
|
29
32
|
end
|
@@ -1,32 +1,61 @@
|
|
1
|
+
require "log4r"
|
2
|
+
|
1
3
|
module Vagrant
|
2
|
-
|
4
|
+
module Action
|
3
5
|
module VM
|
4
6
|
class Provision
|
5
7
|
def initialize(app, env)
|
8
|
+
@logger = Log4r::Logger.new("vagrant::action::vm::provision")
|
6
9
|
@app = app
|
7
|
-
|
8
|
-
|
10
|
+
|
11
|
+
env["provision.enabled"] = true if !env.has_key?("provision.enabled")
|
9
12
|
end
|
10
13
|
|
11
14
|
def call(env)
|
12
|
-
|
13
|
-
|
14
|
-
provisioners =
|
15
|
-
|
15
|
+
@env = env
|
16
|
+
|
17
|
+
provisioners = nil
|
18
|
+
|
19
|
+
# We set this here so that even if this value is changed in the future,
|
20
|
+
# it stays constant to what we expect here in this moment.
|
21
|
+
enabled = env["provision.enabled"]
|
22
|
+
if enabled
|
23
|
+
# Instantiate and prepare the provisioners. Preparation must happen here
|
24
|
+
# so that shared folders and such can properly take effect.
|
25
|
+
provisioners = enabled_provisioners
|
26
|
+
provisioners.map { |p| p.prepare }
|
27
|
+
end
|
16
28
|
|
17
29
|
@app.call(env)
|
18
30
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
31
|
+
if enabled
|
32
|
+
# Take prepared provisioners and run the provisioning
|
33
|
+
provisioners.each do |instance|
|
34
|
+
@env[:ui].info I18n.t("vagrant.actions.vm.provision.beginning",
|
35
|
+
:provisioner => instance.class)
|
36
|
+
instance.provision!
|
37
|
+
end
|
23
38
|
end
|
24
39
|
end
|
25
40
|
|
26
41
|
def enabled_provisioners
|
27
|
-
|
28
|
-
|
42
|
+
enabled = []
|
43
|
+
@env[:vm].config.vm.provisioners.each do |provisioner|
|
44
|
+
if @env["provision.types"]
|
45
|
+
# If we've specified types of provisioners to enable, then we
|
46
|
+
# only use those provisioners, and skip any that we haven't
|
47
|
+
# specified.
|
48
|
+
if !@env["provision.types"].include?(provisioner.shortcut.to_s)
|
49
|
+
@logger.debug("Skipping provisioner: #{provisioner.shortcut}")
|
50
|
+
next
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
enabled << provisioner.provisioner.new(@env, provisioner.config)
|
29
55
|
end
|
56
|
+
|
57
|
+
# Return the enable provisioners
|
58
|
+
enabled
|
30
59
|
end
|
31
60
|
end
|
32
61
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Vagrant
|
2
|
-
|
2
|
+
module Action
|
3
3
|
module VM
|
4
4
|
class ProvisionerCleanup
|
5
5
|
def initialize(app, env)
|
@@ -16,7 +16,7 @@ module Vagrant
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def enabled_provisioners
|
19
|
-
@env[
|
19
|
+
@env[:vm].config.vm.provisioners.map do |provisioner|
|
20
20
|
provisioner.provisioner.new(@env, provisioner.config)
|
21
21
|
end
|
22
22
|
end
|
@@ -1,17 +1,17 @@
|
|
1
|
-
require File.expand_path("../nfs_helpers", __FILE__)
|
2
|
-
|
3
1
|
module Vagrant
|
4
|
-
|
2
|
+
module Action
|
5
3
|
module VM
|
6
|
-
class
|
7
|
-
include NFSHelpers
|
8
|
-
|
4
|
+
class PruneNFSExports
|
9
5
|
def initialize(app, env)
|
10
6
|
@app = app
|
11
7
|
end
|
12
8
|
|
13
9
|
def call(env)
|
14
|
-
|
10
|
+
if env[:host]
|
11
|
+
valid_ids = env[:vm].driver.read_vms
|
12
|
+
env[:host].nfs_prune(valid_ids)
|
13
|
+
end
|
14
|
+
|
15
15
|
@app.call(env)
|
16
16
|
end
|
17
17
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Vagrant
|
2
|
-
|
2
|
+
module Action
|
3
3
|
module VM
|
4
4
|
class Resume
|
5
5
|
def initialize(app, env)
|
@@ -7,9 +7,9 @@ module Vagrant
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def call(env)
|
10
|
-
if env[
|
11
|
-
env
|
12
|
-
env[
|
10
|
+
if env[:vm].state == :saved
|
11
|
+
env[:ui].info I18n.t("vagrant.actions.vm.resume.resuming")
|
12
|
+
env[:action_runner].run(Boot, env)
|
13
13
|
end
|
14
14
|
|
15
15
|
@app.call(env)
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Action
|
5
|
+
module VM
|
6
|
+
# Sets up the mapping of files to copy into the package and verifies
|
7
|
+
# that the files can be properly copied.
|
8
|
+
class SetupPackageFiles
|
9
|
+
def initialize(app, env)
|
10
|
+
@app = app
|
11
|
+
|
12
|
+
env["package.include"] ||= []
|
13
|
+
env["package.vagrantfile"] ||= nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
files = {}
|
18
|
+
env["package.include"].each do |file|
|
19
|
+
source = Pathname.new(file)
|
20
|
+
dest = nil
|
21
|
+
|
22
|
+
# If the source is relative then we add the file as-is to the include
|
23
|
+
# directory. Otherwise, we copy only the file into the root of the
|
24
|
+
# include directory. Kind of strange, but seems to match what people
|
25
|
+
# expect based on history.
|
26
|
+
if source.relative?
|
27
|
+
dest = source
|
28
|
+
else
|
29
|
+
dest = source.basename
|
30
|
+
end
|
31
|
+
|
32
|
+
# Assign the mapping
|
33
|
+
files[file] = dest
|
34
|
+
end
|
35
|
+
|
36
|
+
if env["package.vagrantfile"]
|
37
|
+
# Vagrantfiles are treated special and mapped to a specific file
|
38
|
+
files[env["package.vagrantfile"]] = "_Vagrantfile"
|
39
|
+
end
|
40
|
+
|
41
|
+
# Verify the mapping
|
42
|
+
files.each do |from, _|
|
43
|
+
raise Errors::PackageIncludeMissing, :file => from if !File.exist?(from)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Save the mapping
|
47
|
+
env["package.files"] = files
|
48
|
+
|
49
|
+
@app.call(env)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -1,15 +1,20 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require 'log4r'
|
4
|
+
|
1
5
|
module Vagrant
|
2
|
-
|
6
|
+
module Action
|
3
7
|
module VM
|
4
8
|
class ShareFolders
|
5
9
|
def initialize(app, env)
|
6
|
-
@
|
7
|
-
@
|
10
|
+
@logger = Log4r::Logger.new("vagrant::action::vm::share_folders")
|
11
|
+
@app = app
|
8
12
|
end
|
9
13
|
|
10
14
|
def call(env)
|
11
15
|
@env = env
|
12
16
|
|
17
|
+
prepare_folders
|
13
18
|
create_metadata
|
14
19
|
|
15
20
|
@app.call(env)
|
@@ -20,7 +25,7 @@ module Vagrant
|
|
20
25
|
# This method returns an actual list of VirtualBox shared
|
21
26
|
# folders to create and their proper path.
|
22
27
|
def shared_folders
|
23
|
-
@env.
|
28
|
+
@env[:vm].config.vm.shared_folders.inject({}) do |acc, data|
|
24
29
|
key, value = data
|
25
30
|
|
26
31
|
next acc if value[:disabled]
|
@@ -32,54 +37,73 @@ module Vagrant
|
|
32
37
|
end
|
33
38
|
end
|
34
39
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
40
|
+
# Prepares the shared folders by verifying they exist and creating them
|
41
|
+
# if they don't.
|
42
|
+
def prepare_folders
|
43
|
+
shared_folders.each do |name, options|
|
44
|
+
hostpath = Pathname.new(options[:hostpath]).expand_path(@env[:root_path])
|
45
|
+
|
46
|
+
if !hostpath.directory? && options[:create]
|
47
|
+
# Host path doesn't exist, so let's create it.
|
48
|
+
@logger.debug("Host path doesn't exist, creating: #{hostpath}")
|
49
|
+
|
50
|
+
begin
|
51
|
+
hostpath.mkpath
|
52
|
+
rescue Errno::EACCES
|
53
|
+
raise Errors::SharedFolderCreateFailed, :path => hostpath.to_s
|
54
|
+
end
|
44
55
|
end
|
45
56
|
end
|
57
|
+
end
|
46
58
|
|
47
|
-
|
59
|
+
def create_metadata
|
60
|
+
@env[:ui].info I18n.t("vagrant.actions.vm.share_folders.creating")
|
61
|
+
|
62
|
+
folders = []
|
63
|
+
shared_folders.each do |name, data|
|
64
|
+
folders << {
|
65
|
+
:name => name,
|
66
|
+
:hostpath => File.expand_path(data[:hostpath], @env[:root_path])
|
67
|
+
}
|
68
|
+
end
|
69
|
+
|
70
|
+
@env[:vm].driver.share_folders(folders)
|
48
71
|
end
|
49
72
|
|
50
73
|
def mount_shared_folders
|
51
|
-
@env
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
10000
|
61
|
-
end
|
74
|
+
@env[:ui].info I18n.t("vagrant.actions.vm.share_folders.mounting")
|
75
|
+
|
76
|
+
# short guestpaths first, so we don't step on ourselves
|
77
|
+
folders = shared_folders.sort_by do |name, data|
|
78
|
+
if data[:guestpath]
|
79
|
+
data[:guestpath].length
|
80
|
+
else
|
81
|
+
# A long enough path to just do this at the end.
|
82
|
+
10000
|
62
83
|
end
|
84
|
+
end
|
63
85
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
86
|
+
# Go through each folder and mount
|
87
|
+
folders.each do |name, data|
|
88
|
+
if data[:guestpath]
|
89
|
+
# Guest path specified, so mount the folder to specified point
|
90
|
+
@env[:ui].info(I18n.t("vagrant.actions.vm.share_folders.mounting_entry",
|
69
91
|
:name => name,
|
70
92
|
:guest_path => data[:guestpath]))
|
71
93
|
|
72
|
-
|
73
|
-
|
74
|
-
group = data[:group] || @env["config"].ssh.username
|
94
|
+
# Dup the data so we can pass it to the guest API
|
95
|
+
data = data.dup
|
75
96
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
97
|
+
# Calculate the owner and group
|
98
|
+
data[:owner] ||= @env[:vm].config.ssh.username
|
99
|
+
data[:group] ||= @env[:vm].config.ssh.username
|
100
|
+
|
101
|
+
# Mount the actual folder
|
102
|
+
@env[:vm].guest.mount_shared_folder(name, data[:guestpath], data)
|
103
|
+
else
|
104
|
+
# If no guest path is specified, then automounting is disabled
|
105
|
+
@env[:ui].info(I18n.t("vagrant.actions.vm.share_folders.nomount_entry",
|
81
106
|
:name => name))
|
82
|
-
end
|
83
107
|
end
|
84
108
|
end
|
85
109
|
end
|