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
data/lib/vagrant/hosts/bsd.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'log4r'
|
2
|
+
|
1
3
|
require 'vagrant/util/platform'
|
2
4
|
|
3
5
|
module Vagrant
|
@@ -7,9 +9,21 @@ module Vagrant
|
|
7
9
|
include Util
|
8
10
|
include Util::Retryable
|
9
11
|
|
10
|
-
def self.
|
11
|
-
|
12
|
-
|
12
|
+
def self.match?
|
13
|
+
Util::Platform.darwin? || Util::Platform.bsd?
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.precedence
|
17
|
+
# Set a lower precedence because this is a generic OS. We
|
18
|
+
# want specific distros to match first.
|
19
|
+
2
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(*args)
|
23
|
+
super
|
24
|
+
|
25
|
+
@logger = Log4r::Logger.new("vagrant::hosts::bsd")
|
26
|
+
@nfs_restart_command = "sudo nfsd restart"
|
13
27
|
end
|
14
28
|
|
15
29
|
def nfs?
|
@@ -18,42 +32,65 @@ module Vagrant
|
|
18
32
|
end
|
19
33
|
end
|
20
34
|
|
21
|
-
def nfs_export(ip, folders)
|
35
|
+
def nfs_export(id, ip, folders)
|
22
36
|
output = TemplateRenderer.render('nfs/exports',
|
23
|
-
:uuid =>
|
37
|
+
:uuid => id,
|
24
38
|
:ip => ip,
|
25
39
|
:folders => folders)
|
26
40
|
|
27
41
|
# The sleep ensures that the output is truly flushed before any `sudo`
|
28
42
|
# commands are issued.
|
29
|
-
|
43
|
+
@ui.info I18n.t("vagrant.hosts.bsd.nfs_export")
|
30
44
|
sleep 0.5
|
31
45
|
|
46
|
+
# First, clean up the old entry
|
47
|
+
nfs_cleanup(id)
|
48
|
+
|
49
|
+
# Output the rendered template into the exports
|
32
50
|
output.split("\n").each do |line|
|
33
|
-
# This should only ask for administrative permission once, even
|
34
|
-
# though its executed in multiple subshells.
|
35
51
|
line = line.gsub('"', '\"')
|
36
52
|
system(%Q[sudo su root -c "echo '#{line}' >> /etc/exports"])
|
37
53
|
end
|
38
54
|
|
39
55
|
# We run restart here instead of "update" just in case nfsd
|
40
56
|
# is not starting
|
41
|
-
system(
|
57
|
+
system(@nfs_restart_command)
|
42
58
|
end
|
43
59
|
|
44
|
-
def
|
60
|
+
def nfs_prune(valid_ids)
|
45
61
|
return if !File.exist?("/etc/exports")
|
46
62
|
|
47
|
-
|
48
|
-
system("cat /etc/exports | grep 'VAGRANT-BEGIN: #{env.vm.uuid}' > /dev/null 2>&1")
|
63
|
+
@logger.info("Pruning invalid NFS entries...")
|
49
64
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
65
|
+
output = false
|
66
|
+
|
67
|
+
File.read("/etc/exports").lines.each do |line|
|
68
|
+
if line =~ /^# VAGRANT-BEGIN: (.+?)$/
|
69
|
+
if valid_ids.include?($1.to_s)
|
70
|
+
@logger.debug("Valid ID: #{$1.to_s}")
|
71
|
+
else
|
72
|
+
if !output
|
73
|
+
# We want to warn the user but we only want to output once
|
74
|
+
@ui.info I18n.t("vagrant.hosts.bsd.nfs_prune")
|
75
|
+
output = true
|
76
|
+
end
|
77
|
+
|
78
|
+
@logger.info("Invalid ID, pruning: #{$1.to_s}")
|
79
|
+
nfs_cleanup($1.to_s)
|
80
|
+
end
|
54
81
|
end
|
55
82
|
end
|
56
83
|
end
|
84
|
+
|
85
|
+
protected
|
86
|
+
|
87
|
+
def nfs_cleanup(id)
|
88
|
+
return if !File.exist?("/etc/exports")
|
89
|
+
|
90
|
+
# Use sed to just strip out the block of code which was inserted
|
91
|
+
# by Vagrant, and restart NFS.
|
92
|
+
system("sudo sed -e '/^# VAGRANT-BEGIN: #{id}/,/^# VAGRANT-END: #{id}/ d' -ibak /etc/exports")
|
93
|
+
end
|
57
94
|
end
|
58
95
|
end
|
59
96
|
end
|
data/lib/vagrant/hosts/fedora.rb
CHANGED
@@ -1,6 +1,20 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
1
3
|
module Vagrant
|
2
4
|
module Hosts
|
3
5
|
class Fedora < Linux
|
6
|
+
def self.match?
|
7
|
+
release_file = Pathname.new("/etc/redhat-release")
|
8
|
+
|
9
|
+
if release_file.exist?
|
10
|
+
release_file.open("r") do |f|
|
11
|
+
return true if f.gets =~ /^Fedora/
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
false
|
16
|
+
end
|
17
|
+
|
4
18
|
def initialize(*args)
|
5
19
|
super
|
6
20
|
|
@@ -7,45 +7,15 @@ module Vagrant
|
|
7
7
|
include Util
|
8
8
|
include Util::Retryable
|
9
9
|
|
10
|
-
def
|
11
|
-
|
12
|
-
:uuid => env.vm.uuid,
|
13
|
-
:ip => ip,
|
14
|
-
:folders => folders)
|
15
|
-
|
16
|
-
# The sleep ensures that the output is truly flushed before any `sudo`
|
17
|
-
# commands are issued.
|
18
|
-
env.ui.info I18n.t("vagrant.hosts.bsd.nfs_export.prepare")
|
19
|
-
sleep 0.5
|
20
|
-
|
21
|
-
output.split("\n").each do |line|
|
22
|
-
# This should only ask for administrative permission once, even
|
23
|
-
# though its executed in multiple subshells.
|
24
|
-
line = line.gsub('"', '\"')
|
25
|
-
system(%Q[sudo su root -c "echo '#{line}' >> /etc/exports"])
|
26
|
-
end
|
27
|
-
|
28
|
-
# We run restart here instead of "update" just in case nfsd
|
29
|
-
# is not starting
|
30
|
-
system("sudo /etc/rc.d/mountd onereload")
|
10
|
+
def self.match?
|
11
|
+
Util::Platform.freebsd?
|
31
12
|
end
|
32
13
|
|
33
|
-
|
34
|
-
|
35
|
-
def nfs_cleanup
|
36
|
-
return if !File.exist?("/etc/exports")
|
37
|
-
|
38
|
-
retryable(:tries => 10, :on => TypeError) do
|
39
|
-
system("cat /etc/exports | grep 'VAGRANT-BEGIN: #{env.vm.uuid}' > /dev/null 2>&1")
|
14
|
+
def initialize(*args)
|
15
|
+
super
|
40
16
|
|
41
|
-
|
42
|
-
# Use sed to just strip out the block of code which was inserted
|
43
|
-
# by Vagrant
|
44
|
-
system("sudo sed -e '/^# VAGRANT-BEGIN: #{env.vm.uuid}/,/^# VAGRANT-END: #{env.vm.uuid}/ d' -ibak /etc/exports")
|
45
|
-
end
|
46
|
-
|
47
|
-
system("sudo /etc/rc.d/mountd onereload")
|
48
|
-
end
|
17
|
+
@nfs_restart_command = "sudo /etc/rc.d/mountd onereload"
|
49
18
|
end
|
19
|
+
end
|
50
20
|
end
|
51
21
|
end
|
data/lib/vagrant/hosts/linux.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'log4r'
|
2
|
+
|
1
3
|
require 'vagrant/util/platform'
|
2
4
|
|
3
5
|
module Vagrant
|
@@ -7,23 +9,20 @@ module Vagrant
|
|
7
9
|
include Util
|
8
10
|
include Util::Retryable
|
9
11
|
|
10
|
-
def self.
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
if File.exist?("/etc/redhat-release")
|
15
|
-
# Check if we have a known redhat release
|
16
|
-
File.open("/etc/redhat-release") do |f|
|
17
|
-
return Fedora if f.gets =~ /^Fedora/
|
18
|
-
end
|
19
|
-
end
|
12
|
+
def self.match?
|
13
|
+
Util::Platform.linux?
|
14
|
+
end
|
20
15
|
|
21
|
-
|
16
|
+
def self.precedence
|
17
|
+
# Set a lower precedence because this is a generic OS. We
|
18
|
+
# want specific distros to match first.
|
19
|
+
2
|
22
20
|
end
|
23
21
|
|
24
22
|
def initialize(*args)
|
25
23
|
super
|
26
24
|
|
25
|
+
@logger = Log4r::Logger.new("vagrant::hosts::linux")
|
27
26
|
@nfs_server_binary = "/etc/init.d/nfs-kernel-server"
|
28
27
|
end
|
29
28
|
|
@@ -34,15 +33,17 @@ module Vagrant
|
|
34
33
|
end
|
35
34
|
end
|
36
35
|
|
37
|
-
def nfs_export(ip, folders)
|
36
|
+
def nfs_export(id, ip, folders)
|
38
37
|
output = TemplateRenderer.render('nfs/exports_linux',
|
39
|
-
:uuid =>
|
38
|
+
:uuid => id,
|
40
39
|
:ip => ip,
|
41
40
|
:folders => folders)
|
42
41
|
|
43
|
-
|
42
|
+
@ui.info I18n.t("vagrant.hosts.linux.nfs_export")
|
44
43
|
sleep 0.5
|
45
44
|
|
45
|
+
nfs_cleanup(id)
|
46
|
+
|
46
47
|
output.split("\n").each do |line|
|
47
48
|
# This should only ask for administrative permission once, even
|
48
49
|
# though its executed in multiple subshells.
|
@@ -54,16 +55,40 @@ module Vagrant
|
|
54
55
|
system("sudo #{@nfs_server_binary} restart")
|
55
56
|
end
|
56
57
|
|
57
|
-
def
|
58
|
+
def nfs_prune(valid_ids)
|
58
59
|
return if !File.exist?("/etc/exports")
|
59
|
-
system("cat /etc/exports | grep 'VAGRANT-BEGIN: #{env.vm.uuid}' > /dev/null 2>&1")
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
61
|
+
@logger.info("Pruning invalid NFS entries...")
|
62
|
+
|
63
|
+
output = false
|
64
|
+
|
65
|
+
File.read("/etc/exports").lines.each do |line|
|
66
|
+
if line =~ /^# VAGRANT-BEGIN: (.+?)$/
|
67
|
+
if valid_ids.include?($1.to_s)
|
68
|
+
@logger.debug("Valid ID: #{$1.to_s}")
|
69
|
+
else
|
70
|
+
if !output
|
71
|
+
# We want to warn the user but we only want to output once
|
72
|
+
@ui.info I18n.t("vagrant.hosts.linux.nfs_prune")
|
73
|
+
output = true
|
74
|
+
end
|
75
|
+
|
76
|
+
@logger.info("Invalid ID, pruning: #{$1.to_s}")
|
77
|
+
nfs_cleanup($1.to_s)
|
78
|
+
end
|
79
|
+
end
|
65
80
|
end
|
66
81
|
end
|
82
|
+
|
83
|
+
protected
|
84
|
+
|
85
|
+
def nfs_cleanup(id)
|
86
|
+
return if !File.exist?("/etc/exports")
|
87
|
+
|
88
|
+
# Use sed to just strip out the block of code which was inserted
|
89
|
+
# by Vagrant
|
90
|
+
system("sudo sed -e '/^# VAGRANT-BEGIN: #{id}/,/^# VAGRANT-END: #{id}/ d' -ibak /etc/exports")
|
91
|
+
end
|
67
92
|
end
|
68
93
|
end
|
69
94
|
end
|
data/lib/vagrant/provisioners.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
# These aren't autoloaded because they have to register things such
|
2
2
|
# as configuration classes right away with Vagrant.
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
3
|
+
module Vagrant
|
4
|
+
module Provisioners
|
5
|
+
autoload :Base, 'vagrant/provisioners/base'
|
6
|
+
autoload :ChefSolo, 'vagrant/provisioners/chef_solo'
|
7
|
+
autoload :ChefClient, 'vagrant/provisioners/chef_client'
|
8
|
+
autoload :Puppet, 'vagrant/provisioners/puppet'
|
9
|
+
autoload :PuppetServer, 'vagrant/provisioners/puppet_server'
|
10
|
+
autoload :Shell, 'vagrant/provisioners/shell'
|
11
|
+
end
|
12
|
+
end
|
@@ -1,52 +1,29 @@
|
|
1
1
|
module Vagrant
|
2
2
|
module Provisioners
|
3
3
|
# The base class for a "provisioner." A provisioner is responsible for
|
4
|
-
# provisioning a Vagrant system.
|
5
|
-
#
|
6
|
-
#
|
4
|
+
# provisioning a Vagrant system.
|
5
|
+
#
|
6
|
+
# This has been abstracted out so it is easy to provide support for
|
7
|
+
# multiple solutions.
|
7
8
|
class Base
|
8
9
|
include Vagrant::Util
|
9
10
|
|
10
|
-
# The environment which provisioner is running in. This is
|
11
|
-
#
|
12
|
-
attr_reader :
|
11
|
+
# The environment which provisioner is running in. This is the
|
12
|
+
# action environment, not a Vagrant::Environment.
|
13
|
+
attr_reader :env
|
13
14
|
|
14
15
|
# The configuration for this provisioner. This will be an instance of
|
15
16
|
# the `Config` class which is part of the provisioner.
|
16
17
|
attr_reader :config
|
17
18
|
|
18
|
-
# Registers a provisioner with a given shortcut. This allows that provisioner
|
19
|
-
# to be referenced with the shortcut.
|
20
|
-
#
|
21
|
-
# @param [Symbol] shortcut
|
22
|
-
def self.register(shortcut)
|
23
|
-
registered[shortcut] = self
|
24
|
-
end
|
25
|
-
|
26
|
-
# Returns the provisioner associated with the given shortcut.
|
27
|
-
def self.registered
|
28
|
-
@@registered ||= {}
|
29
|
-
end
|
30
|
-
|
31
19
|
def initialize(env, config)
|
32
|
-
@
|
20
|
+
@env = env
|
33
21
|
@config = config
|
34
22
|
end
|
35
23
|
|
36
|
-
#
|
37
|
-
#
|
38
|
-
|
39
|
-
# @return [Vagrant::Environment]
|
40
|
-
def env
|
41
|
-
action_env.env
|
42
|
-
end
|
43
|
-
|
44
|
-
# Returns the VM which this provisioner is working on.
|
45
|
-
#
|
46
|
-
# @return [Vagrant::VM]
|
47
|
-
def vm
|
48
|
-
env.vm
|
49
|
-
end
|
24
|
+
# This method is expected to return a class that is used for configuration
|
25
|
+
# for the provisioner.
|
26
|
+
def self.config_class; end
|
50
27
|
|
51
28
|
# This is the method called to "prepare" the provisioner. This is called
|
52
29
|
# before any actions are run by the action runner (see {Vagrant::Actions::Runner}).
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
|
1
3
|
module Vagrant
|
2
4
|
module Provisioners
|
3
5
|
# This class is a base class where the common functionality shared between
|
@@ -17,11 +19,12 @@ module Vagrant
|
|
17
19
|
end
|
18
20
|
|
19
21
|
def verify_binary(binary)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
# Checks for the existence of chef binary and error if it
|
23
|
+
# doesn't exist.
|
24
|
+
env[:vm].channel.sudo("which #{binary}",
|
25
|
+
:error_class => ChefError,
|
26
|
+
:error_key => :chef_not_detected,
|
27
|
+
:binary => binary)
|
25
28
|
end
|
26
29
|
|
27
30
|
# Returns the path to the Chef binary, taking into account the
|
@@ -32,10 +35,8 @@ module Vagrant
|
|
32
35
|
end
|
33
36
|
|
34
37
|
def chown_provisioning_folder
|
35
|
-
vm.
|
36
|
-
|
37
|
-
ssh.sudo!("chown #{env.config.ssh.username} #{config.provisioning_path}")
|
38
|
-
end
|
38
|
+
env[:vm].channel.sudo("mkdir -p #{config.provisioning_path}")
|
39
|
+
env[:vm].channel.sudo("chown #{env[:vm].config.ssh.username} #{config.provisioning_path}")
|
39
40
|
end
|
40
41
|
|
41
42
|
def setup_config(template, filename, template_vars)
|
@@ -50,17 +51,23 @@ module Vagrant
|
|
50
51
|
:no_proxy => config.no_proxy
|
51
52
|
}.merge(template_vars))
|
52
53
|
|
53
|
-
|
54
|
+
# Create a temporary file to store the data so we
|
55
|
+
# can upload it
|
56
|
+
temp = Tempfile.new("vagrant")
|
57
|
+
temp.write(config_file)
|
58
|
+
temp.close
|
59
|
+
|
60
|
+
env[:vm].channel.upload(temp.path, File.join(config.provisioning_path, filename))
|
54
61
|
end
|
55
62
|
|
56
63
|
def setup_json
|
57
|
-
env
|
64
|
+
env[:ui].info I18n.t("vagrant.provisioners.chef.json")
|
58
65
|
|
59
66
|
# Set up our configuration that is passed to the attributes by default
|
60
|
-
data = { :config => env.
|
67
|
+
data = { :config => env[:global_config].to_hash }
|
61
68
|
|
62
69
|
# Add our default share directory if it exists
|
63
|
-
default_share = env.config.vm.shared_folders["v-root"]
|
70
|
+
default_share = env[:vm].config.vm.shared_folders["v-root"]
|
64
71
|
data[:directory] = default_share[:guestpath] if default_share
|
65
72
|
|
66
73
|
# And wrap it under the "vagrant" namespace
|
@@ -72,7 +79,13 @@ module Vagrant
|
|
72
79
|
|
73
80
|
json = data.to_json
|
74
81
|
|
75
|
-
|
82
|
+
# Create a temporary file to store the data so we
|
83
|
+
# can upload it
|
84
|
+
temp = Tempfile.new("vagrant")
|
85
|
+
temp.write(json)
|
86
|
+
temp.close
|
87
|
+
|
88
|
+
env[:vm].channel.upload(temp.path, File.join(config.provisioning_path, "dna.json"))
|
76
89
|
end
|
77
90
|
end
|
78
91
|
|
@@ -99,22 +112,13 @@ module Vagrant
|
|
99
112
|
attr_accessor :no_proxy
|
100
113
|
attr_accessor :binary_path
|
101
114
|
attr_accessor :binary_env
|
115
|
+
attr_accessor :attempts
|
102
116
|
attr_writer :run_list
|
103
117
|
|
104
118
|
def initialize
|
105
|
-
@
|
106
|
-
@log_level = :info
|
119
|
+
@attempts = 1
|
107
120
|
@json = {}
|
108
|
-
@
|
109
|
-
@http_proxy_user = nil
|
110
|
-
@http_proxy_pass = nil
|
111
|
-
@https_proxy = nil
|
112
|
-
@https_proxy_user = nil
|
113
|
-
@https_proxy_pass = nil
|
114
|
-
@no_proxy = nil
|
115
|
-
@binary_path = nil
|
116
|
-
@binary_env = nil
|
117
|
-
@run_list = nil
|
121
|
+
@log_level = :info
|
118
122
|
end
|
119
123
|
|
120
124
|
# This returns the json that is merged with the defaults and the
|