vagrantup 1.0.7 → 1.1.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +91 -0
- data/LICENSE +2 -2
- data/README.md +11 -13
- data/bin/vagrant +29 -5
- data/config/default.rb +14 -9
- data/contrib/bash/completion.sh +3 -0
- data/keys/README.md +3 -3
- data/lib/vagrant.rb +156 -102
- data/lib/vagrant/action.rb +26 -47
- data/lib/vagrant/action/builder.rb +49 -23
- data/lib/vagrant/action/builtin/box_add.rb +85 -0
- data/lib/vagrant/action/builtin/call.rb +67 -0
- data/lib/vagrant/action/builtin/config_validate.rb +30 -0
- data/lib/vagrant/action/builtin/confirm.rb +38 -0
- data/lib/vagrant/action/builtin/env_set.rb +24 -0
- data/lib/vagrant/action/builtin/graceful_halt.rb +73 -0
- data/lib/vagrant/action/builtin/handle_box_url.rb +43 -0
- data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +117 -0
- data/lib/vagrant/action/builtin/lock.rb +57 -0
- data/lib/vagrant/action/builtin/nfs.rb +117 -0
- data/lib/vagrant/action/builtin/provision.rb +70 -0
- data/lib/vagrant/action/builtin/set_hostname.rb +27 -0
- data/lib/vagrant/action/builtin/ssh_exec.rb +42 -0
- data/lib/vagrant/action/builtin/ssh_run.rb +43 -0
- data/lib/vagrant/action/general/package.rb +19 -18
- data/lib/vagrant/action/hook.rb +103 -0
- data/lib/vagrant/action/runner.rb +21 -5
- data/lib/vagrant/action/warden.rb +20 -9
- data/lib/vagrant/box.rb +75 -26
- data/lib/vagrant/box_collection.rb +301 -35
- data/lib/vagrant/cli.rb +20 -14
- data/lib/vagrant/config.rb +23 -9
- data/lib/vagrant/config/loader.rb +131 -36
- data/lib/vagrant/config/v1.rb +9 -0
- data/lib/vagrant/config/v1/dummy_config.rb +13 -0
- data/lib/vagrant/config/v1/loader.rb +105 -0
- data/lib/vagrant/config/v1/root.rb +60 -0
- data/lib/vagrant/config/v2.rb +9 -0
- data/lib/vagrant/config/v2/dummy_config.rb +13 -0
- data/lib/vagrant/config/v2/loader.rb +141 -0
- data/lib/vagrant/config/v2/root.rb +105 -0
- data/lib/vagrant/config/v2/util.rb +21 -0
- data/lib/vagrant/config/version_base.rb +80 -0
- data/lib/vagrant/downloaders/base.rb +0 -3
- data/lib/vagrant/downloaders/file.rb +10 -4
- data/lib/vagrant/downloaders/http.rb +29 -10
- data/lib/vagrant/environment.rb +447 -240
- data/lib/vagrant/errors.rb +138 -97
- data/lib/vagrant/hosts.rb +3 -12
- data/lib/vagrant/machine.rb +325 -0
- data/lib/vagrant/machine_state.rb +45 -0
- data/lib/vagrant/plugin.rb +3 -78
- data/lib/vagrant/plugin/v1.rb +19 -0
- data/lib/vagrant/plugin/v1/command.rb +169 -0
- data/lib/vagrant/plugin/v1/communicator.rb +98 -0
- data/lib/vagrant/plugin/v1/config.rb +112 -0
- data/lib/vagrant/plugin/v1/errors.rb +15 -0
- data/lib/vagrant/plugin/v1/guest.rb +92 -0
- data/lib/vagrant/plugin/v1/host.rb +66 -0
- data/lib/vagrant/plugin/v1/manager.rb +131 -0
- data/lib/vagrant/plugin/v1/plugin.rb +229 -0
- data/lib/vagrant/plugin/v1/provider.rb +68 -0
- data/lib/vagrant/plugin/v1/provisioner.rb +50 -0
- data/lib/vagrant/plugin/v2.rb +22 -0
- data/lib/vagrant/plugin/v2/command.rb +234 -0
- data/lib/vagrant/plugin/v2/communicator.rb +98 -0
- data/lib/vagrant/plugin/v2/components.rb +29 -0
- data/lib/vagrant/plugin/v2/config.rb +101 -0
- data/lib/vagrant/plugin/v2/errors.rb +15 -0
- data/lib/vagrant/plugin/v2/guest.rb +92 -0
- data/lib/vagrant/plugin/v2/host.rb +66 -0
- data/lib/vagrant/plugin/v2/manager.rb +158 -0
- data/lib/vagrant/plugin/v2/plugin.rb +217 -0
- data/lib/vagrant/plugin/v2/provider.rb +69 -0
- data/lib/vagrant/plugin/v2/provisioner.rb +47 -0
- data/lib/vagrant/registry.rb +43 -17
- data/lib/vagrant/ssh.rb +15 -9
- data/lib/vagrant/ui.rb +7 -5
- data/lib/vagrant/util/is_port_open.rb +1 -1
- data/lib/vagrant/util/platform.rb +19 -0
- data/lib/vagrant/util/retryable.rb +8 -2
- data/lib/vagrant/util/safe_exec.rb +2 -2
- data/lib/vagrant/util/scoped_hash_override.rb +45 -0
- data/lib/vagrant/util/ssh.rb +126 -0
- data/lib/vagrant/util/string_block_editor.rb +75 -0
- data/lib/vagrant/util/subprocess.rb +33 -10
- data/lib/vagrant/util/which.rb +43 -0
- data/lib/vagrant/version.rb +1 -1
- data/plugins/README.md +5 -0
- data/plugins/commands/box/command/add.rb +46 -0
- data/plugins/commands/box/command/list.rb +41 -0
- data/plugins/commands/box/command/remove.rb +37 -0
- data/plugins/commands/box/command/repackage.rb +43 -0
- data/plugins/commands/box/command/root.rb +75 -0
- data/plugins/commands/box/plugin.rb +15 -0
- data/plugins/commands/destroy/command.rb +31 -0
- data/plugins/commands/destroy/plugin.rb +18 -0
- data/plugins/commands/halt/command.rb +33 -0
- data/plugins/commands/halt/plugin.rb +18 -0
- data/{lib/vagrant/command/init.rb → plugins/commands/init/command.rb} +4 -4
- data/plugins/commands/init/plugin.rb +18 -0
- data/plugins/commands/package/command.rb +83 -0
- data/plugins/commands/package/plugin.rb +18 -0
- data/plugins/commands/plugin/action.rb +52 -0
- data/plugins/commands/plugin/action/bundler_check.rb +25 -0
- data/plugins/commands/plugin/action/install_gem.rb +70 -0
- data/plugins/commands/plugin/action/license_plugin.rb +54 -0
- data/plugins/commands/plugin/action/list_plugins.rb +54 -0
- data/plugins/commands/plugin/action/prune_gems.rb +149 -0
- data/plugins/commands/plugin/action/uninstall_plugin.rb +23 -0
- data/plugins/commands/plugin/command/base.rb +22 -0
- data/plugins/commands/plugin/command/install.rb +39 -0
- data/plugins/commands/plugin/command/license.rb +31 -0
- data/plugins/commands/plugin/command/list.rb +28 -0
- data/plugins/commands/plugin/command/root.rb +75 -0
- data/plugins/commands/plugin/command/uninstall.rb +28 -0
- data/plugins/commands/plugin/gem_helper.rb +74 -0
- data/plugins/commands/plugin/plugin.rb +22 -0
- data/plugins/commands/plugin/state_file.rb +57 -0
- data/plugins/commands/provision/command.rb +34 -0
- data/plugins/commands/provision/plugin.rb +18 -0
- data/plugins/commands/reload/command.rb +37 -0
- data/plugins/commands/reload/plugin.rb +18 -0
- data/plugins/commands/resume/command.rb +25 -0
- data/plugins/commands/resume/plugin.rb +17 -0
- data/{lib/vagrant/command/ssh.rb → plugins/commands/ssh/command.rb} +17 -41
- data/plugins/commands/ssh/plugin.rb +17 -0
- data/{lib/vagrant/command/ssh_config.rb → plugins/commands/ssh_config/command.rb} +14 -16
- data/plugins/commands/ssh_config/plugin.rb +18 -0
- data/plugins/commands/status/command.rb +39 -0
- data/plugins/commands/status/plugin.rb +18 -0
- data/plugins/commands/suspend/command.rb +25 -0
- data/plugins/commands/suspend/plugin.rb +18 -0
- data/plugins/commands/up/command.rb +45 -0
- data/plugins/commands/up/plugin.rb +17 -0
- data/{lib/vagrant/command → plugins/commands/up}/start_mixins.rb +6 -6
- data/{lib/vagrant/communication/ssh.rb → plugins/communicators/ssh/communicator.rb} +139 -52
- data/plugins/communicators/ssh/plugin.rb +19 -0
- data/plugins/guests/arch/guest.rb +41 -0
- data/plugins/guests/arch/plugin.rb +15 -0
- data/{lib/vagrant/guest/debian.rb → plugins/guests/debian/guest.rb} +21 -13
- data/plugins/guests/debian/plugin.rb +15 -0
- data/{lib/vagrant/guest/fedora.rb → plugins/guests/fedora/guest.rb} +19 -14
- data/plugins/guests/fedora/plugin.rb +15 -0
- data/plugins/guests/freebsd/config.rb +13 -0
- data/plugins/guests/freebsd/guest.rb +70 -0
- data/plugins/guests/freebsd/plugin.rb +20 -0
- data/plugins/guests/gentoo/guest.rb +51 -0
- data/plugins/guests/gentoo/plugin.rb +15 -0
- data/plugins/guests/linux/config.rb +13 -0
- data/{lib/vagrant/guest/linux.rb → plugins/guests/linux/guest.rb} +35 -34
- data/plugins/guests/linux/plugin.rb +20 -0
- data/plugins/guests/openbsd/guest.rb +13 -0
- data/plugins/guests/openbsd/plugin.rb +15 -0
- data/{lib/vagrant/guest/redhat.rb → plugins/guests/redhat/guest.rb} +22 -15
- data/plugins/guests/redhat/plugin.rb +15 -0
- data/plugins/guests/solaris/config.rb +18 -0
- data/plugins/guests/solaris/guest.rb +73 -0
- data/plugins/guests/solaris/plugin.rb +20 -0
- data/plugins/guests/suse/guest.rb +24 -0
- data/plugins/guests/suse/plugin.rb +15 -0
- data/plugins/guests/ubuntu/guest.rb +44 -0
- data/plugins/guests/ubuntu/plugin.rb +15 -0
- data/{lib/vagrant/hosts/arch.rb → plugins/hosts/arch/host.rb} +18 -5
- data/plugins/hosts/arch/plugin.rb +15 -0
- data/{lib/vagrant/hosts/bsd.rb → plugins/hosts/bsd/host.rb} +16 -11
- data/plugins/hosts/bsd/plugin.rb +15 -0
- data/{lib/vagrant/hosts/fedora.rb → plugins/hosts/fedora/host.rb} +8 -4
- data/plugins/hosts/fedora/plugin.rb +15 -0
- data/{lib/vagrant/hosts/freebsd.rb → plugins/hosts/freebsd/host.rb} +10 -8
- data/plugins/hosts/freebsd/plugin.rb +15 -0
- data/{lib/vagrant/hosts/gentoo.rb → plugins/hosts/gentoo/host.rb} +7 -3
- data/plugins/hosts/gentoo/plugin.rb +15 -0
- data/{lib/vagrant/hosts/linux.rb → plugins/hosts/linux/host.rb} +12 -11
- data/plugins/hosts/linux/plugin.rb +15 -0
- data/{lib/vagrant/hosts/opensuse.rb → plugins/hosts/opensuse/host.rb} +8 -4
- data/plugins/hosts/opensuse/plugin.rb +15 -0
- data/{lib/vagrant/hosts/windows.rb → plugins/hosts/windows/host.rb} +5 -4
- data/plugins/hosts/windows/plugin.rb +15 -0
- data/plugins/kernel_v1/config/nfs.rb +20 -0
- data/plugins/kernel_v1/config/package.rb +17 -0
- data/plugins/kernel_v1/config/ssh.rb +46 -0
- data/plugins/kernel_v1/config/vagrant.rb +31 -0
- data/plugins/kernel_v1/config/vm.rb +184 -0
- data/plugins/kernel_v1/plugin.rb +44 -0
- data/plugins/kernel_v2/config/nfs.rb +10 -0
- data/plugins/kernel_v2/config/package.rb +9 -0
- data/plugins/kernel_v2/config/ssh.rb +35 -0
- data/plugins/kernel_v2/config/vagrant.rb +9 -0
- data/plugins/kernel_v2/config/vm.rb +314 -0
- data/plugins/kernel_v2/config/vm_provisioner.rb +40 -0
- data/plugins/kernel_v2/config/vm_subvm.rb +30 -0
- data/plugins/kernel_v2/plugin.rb +44 -0
- data/plugins/providers/virtualbox/action.rb +308 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/boot.rb +12 -16
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/check_accessible.rb +5 -5
- data/plugins/providers/virtualbox/action/check_created.rb +21 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/check_guest_additions.rb +18 -11
- data/plugins/providers/virtualbox/action/check_running.rb +21 -0
- data/plugins/providers/virtualbox/action/check_virtualbox.rb +22 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/clean_machine_folder.rb +5 -5
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/clear_forwarded_ports.rb +4 -4
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/clear_network_interfaces.rb +4 -4
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/clear_shared_folders.rb +4 -5
- data/plugins/providers/virtualbox/action/created.rb +20 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/customize.rb +7 -7
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/destroy.rb +5 -5
- data/plugins/providers/virtualbox/action/destroy_confirm.rb +17 -0
- data/plugins/providers/virtualbox/action/destroy_unused_network_interfaces.rb +16 -0
- data/plugins/providers/virtualbox/action/discard_state.rb +20 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/export.rb +7 -7
- data/plugins/providers/virtualbox/action/forced_halt.rb +25 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/forward_ports.rb +29 -42
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/import.rb +15 -12
- data/plugins/providers/virtualbox/action/is_paused.rb +20 -0
- data/plugins/providers/virtualbox/action/is_running.rb +20 -0
- data/plugins/providers/virtualbox/action/is_saved.rb +20 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/match_mac_address.rb +5 -5
- data/plugins/providers/virtualbox/action/message_not_created.rb +16 -0
- data/plugins/providers/virtualbox/action/message_not_running.rb +16 -0
- data/plugins/providers/virtualbox/action/message_will_not_destroy.rb +17 -0
- data/plugins/providers/virtualbox/action/network.rb +366 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/package.rb +4 -7
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/package_vagrantfile.rb +5 -8
- data/plugins/providers/virtualbox/action/prepare_forwarded_port_collision_params.rb +35 -0
- data/plugins/providers/virtualbox/action/prepare_nfs_settings.rb +51 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/prune_nfs_exports.rb +5 -5
- data/plugins/providers/virtualbox/action/resume.rb +25 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/sane_defaults.rb +41 -32
- data/plugins/providers/virtualbox/action/set_name.rb +40 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/setup_package_files.rb +5 -8
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/share_folders.rb +24 -25
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/suspend.rb +5 -5
- data/plugins/providers/virtualbox/config.rb +82 -0
- data/plugins/providers/virtualbox/driver/base.rb +344 -0
- data/plugins/providers/virtualbox/driver/meta.rb +142 -0
- data/plugins/providers/virtualbox/driver/version_4_0.rb +485 -0
- data/plugins/providers/virtualbox/driver/version_4_1.rb +485 -0
- data/plugins/providers/virtualbox/driver/version_4_2.rb +475 -0
- data/plugins/providers/virtualbox/model/forwarded_port.rb +58 -0
- data/plugins/providers/virtualbox/plugin.rb +42 -0
- data/plugins/providers/virtualbox/provider.rb +92 -0
- data/plugins/providers/virtualbox/util/compile_forwarded_ports.rb +31 -0
- data/plugins/provisioners/chef/config/base.rb +65 -0
- data/plugins/provisioners/chef/config/chef_client.rb +39 -0
- data/plugins/provisioners/chef/config/chef_solo.rb +87 -0
- data/plugins/provisioners/chef/plugin.rb +33 -0
- data/plugins/provisioners/chef/provisioner/base.rb +91 -0
- data/plugins/provisioners/chef/provisioner/chef_client.rb +103 -0
- data/plugins/provisioners/chef/provisioner/chef_solo.rb +182 -0
- data/plugins/provisioners/puppet/config/puppet.rb +70 -0
- data/plugins/provisioners/puppet/config/puppet_server.rb +16 -0
- data/plugins/provisioners/puppet/plugin.rb +33 -0
- data/plugins/provisioners/puppet/provisioner/puppet.rb +110 -0
- data/plugins/provisioners/puppet/provisioner/puppet_server.rb +67 -0
- data/plugins/provisioners/shell/config.rb +46 -0
- data/plugins/provisioners/shell/plugin.rb +23 -0
- data/plugins/provisioners/shell/provisioner.rb +66 -0
- data/templates/commands/init/Vagrantfile.erb +33 -21
- data/templates/commands/ssh_config/config.erb +1 -0
- data/templates/config/messages.erb +14 -0
- data/templates/config/validation_failed.erb +3 -3
- data/templates/guests/arch/network_dhcp.erb +4 -7
- data/templates/guests/arch/network_static.erb +6 -7
- data/templates/guests/debian/network_dhcp.erb +5 -0
- data/templates/locales/en.yml +336 -100
- data/templates/rgloader.rb +9 -0
- data/test/acceptance/support/isolated_environment.rb +3 -2
- data/test/support/tempdir.rb +13 -4
- data/test/unit/base.rb +6 -0
- data/test/unit/support/dummy_provider.rb +16 -0
- data/test/unit/support/isolated_environment.rb +132 -0
- data/test/unit/support/shared/base_context.rb +74 -0
- data/test/unit/vagrant/action/builder_test.rb +88 -48
- data/test/unit/vagrant/action/builtin/call_test.rb +145 -0
- data/test/unit/vagrant/action/builtin/confirm_test.rb +36 -0
- data/test/unit/vagrant/action/builtin/env_set_test.rb +20 -0
- data/test/unit/vagrant/action/builtin/graceful_halt_test.rb +61 -0
- data/test/unit/vagrant/action/builtin/lock_test.rb +98 -0
- data/test/unit/vagrant/action/builtin/ssh_exec_test.rb +57 -0
- data/test/unit/vagrant/action/hook_test.rb +101 -0
- data/test/unit/vagrant/action/runner_test.rb +15 -9
- data/test/unit/vagrant/box_collection_test.rb +219 -38
- data/test/unit/vagrant/box_test.rb +94 -19
- data/test/unit/vagrant/cli_test.rb +27 -0
- data/test/unit/vagrant/config/loader_test.rb +154 -49
- data/test/unit/vagrant/config/v1/dummy_config_test.rb +24 -0
- data/test/unit/vagrant/config/v1/loader_test.rb +145 -0
- data/test/unit/vagrant/config/v1/root_test.rb +40 -0
- data/test/unit/vagrant/config/v2/dummy_config_test.rb +24 -0
- data/test/unit/vagrant/config/v2/loader_test.rb +151 -0
- data/test/unit/vagrant/config/v2/root_test.rb +97 -0
- data/test/unit/vagrant/config/v2/util_test.rb +21 -0
- data/test/unit/vagrant/config_test.rb +40 -1
- data/test/unit/vagrant/downloaders/base_test.rb +0 -4
- data/test/unit/vagrant/downloaders/file_test.rb +21 -9
- data/test/unit/vagrant/downloaders/http_test.rb +4 -0
- data/test/unit/vagrant/environment_test.rb +414 -63
- data/test/unit/vagrant/hosts_test.rb +10 -9
- data/test/unit/vagrant/machine_state_test.rb +26 -0
- data/test/unit/vagrant/machine_test.rb +418 -0
- data/test/unit/vagrant/{command/base_test.rb → plugin/v1/command_test.rb} +2 -9
- data/test/unit/vagrant/plugin/v1/communicator_test.rb +9 -0
- data/test/unit/vagrant/plugin/v1/config_test.rb +50 -0
- data/test/unit/vagrant/plugin/v1/host_test.rb +5 -0
- data/test/unit/vagrant/plugin/v1/manager_test.rb +114 -0
- data/test/unit/vagrant/plugin/v1/plugin_test.rb +267 -0
- data/test/unit/vagrant/plugin/v1/provider_test.rb +18 -0
- data/test/unit/vagrant/plugin/v2/command_test.rb +238 -0
- data/test/unit/vagrant/plugin/v2/communicator_test.rb +9 -0
- data/test/unit/vagrant/plugin/v2/components_test.rb +17 -0
- data/test/unit/vagrant/plugin/v2/config_test.rb +60 -0
- data/test/unit/vagrant/plugin/v2/host_test.rb +5 -0
- data/test/unit/vagrant/plugin/v2/manager_test.rb +157 -0
- data/test/unit/vagrant/plugin/v2/plugin_test.rb +287 -0
- data/test/unit/vagrant/plugin/v2/provider_test.rb +18 -0
- data/test/unit/vagrant/registry_test.rb +59 -5
- data/test/unit/vagrant/util/scoped_hash_override_test.rb +48 -0
- data/test/unit/vagrant/util/ssh_test.rb +30 -0
- data/test/unit/vagrant/util/string_block_editor_test.rb +98 -0
- data/test/unit/vagrant/util/which_test.rb +43 -0
- data/test/unit/vagrant_test.rb +42 -13
- data/vagrant.gemspec +6 -7
- data/vagrant.gemspecbak +6 -7
- metadata +273 -358
- data/lib/vagrant/action/box/destroy.rb +0 -25
- data/lib/vagrant/action/box/download.rb +0 -84
- data/lib/vagrant/action/box/package.rb +0 -19
- data/lib/vagrant/action/box/unpackage.rb +0 -61
- data/lib/vagrant/action/box/verify.rb +0 -23
- data/lib/vagrant/action/builtin.rb +0 -171
- data/lib/vagrant/action/env/set.rb +0 -21
- data/lib/vagrant/action/environment.rb +0 -12
- data/lib/vagrant/action/general/check_virtualbox.rb +0 -28
- data/lib/vagrant/action/general/validate.rb +0 -18
- data/lib/vagrant/action/vm/check_box.rb +0 -33
- data/lib/vagrant/action/vm/check_port_collisions.rb +0 -89
- data/lib/vagrant/action/vm/default_name.rb +0 -22
- data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +0 -20
- data/lib/vagrant/action/vm/discard_state.rb +0 -22
- data/lib/vagrant/action/vm/halt.rb +0 -32
- data/lib/vagrant/action/vm/host_name.rb +0 -21
- data/lib/vagrant/action/vm/network.rb +0 -403
- data/lib/vagrant/action/vm/nfs.rb +0 -196
- data/lib/vagrant/action/vm/provision.rb +0 -61
- data/lib/vagrant/action/vm/provisioner_cleanup.rb +0 -26
- data/lib/vagrant/action/vm/resume.rb +0 -20
- data/lib/vagrant/command.rb +0 -24
- data/lib/vagrant/command/base.rb +0 -167
- data/lib/vagrant/command/box.rb +0 -58
- data/lib/vagrant/command/box_add.rb +0 -37
- data/lib/vagrant/command/box_list.rb +0 -28
- data/lib/vagrant/command/box_remove.rb +0 -27
- data/lib/vagrant/command/box_repackage.rb +0 -27
- data/lib/vagrant/command/destroy.rb +0 -64
- data/lib/vagrant/command/gem.rb +0 -39
- data/lib/vagrant/command/halt.rb +0 -39
- data/lib/vagrant/command/package.rb +0 -75
- data/lib/vagrant/command/provision.rb +0 -40
- data/lib/vagrant/command/reload.rb +0 -39
- data/lib/vagrant/command/resume.rb +0 -33
- data/lib/vagrant/command/status.rb +0 -36
- data/lib/vagrant/command/suspend.rb +0 -33
- data/lib/vagrant/command/up.rb +0 -40
- data/lib/vagrant/communication.rb +0 -7
- data/lib/vagrant/communication/base.rb +0 -56
- data/lib/vagrant/config/base.rb +0 -82
- data/lib/vagrant/config/error_recorder.rb +0 -19
- data/lib/vagrant/config/nfs.rb +0 -8
- data/lib/vagrant/config/package.rb +0 -7
- data/lib/vagrant/config/ssh.rb +0 -27
- data/lib/vagrant/config/top.rb +0 -72
- data/lib/vagrant/config/vagrant.rb +0 -14
- data/lib/vagrant/config/vm.rb +0 -168
- data/lib/vagrant/config/vm/provisioner.rb +0 -52
- data/lib/vagrant/config/vm/sub_vm.rb +0 -17
- data/lib/vagrant/data_store.rb +0 -92
- data/lib/vagrant/driver.rb +0 -8
- data/lib/vagrant/driver/virtualbox.rb +0 -134
- data/lib/vagrant/driver/virtualbox_4_0.rb +0 -459
- data/lib/vagrant/driver/virtualbox_4_1.rb +0 -459
- data/lib/vagrant/driver/virtualbox_4_2.rb +0 -606
- data/lib/vagrant/driver/virtualbox_base.rb +0 -326
- data/lib/vagrant/guest.rb +0 -18
- data/lib/vagrant/guest/arch.rb +0 -56
- data/lib/vagrant/guest/base.rb +0 -99
- data/lib/vagrant/guest/freebsd.rb +0 -86
- data/lib/vagrant/guest/gentoo.rb +0 -46
- data/lib/vagrant/guest/linux/config.rb +0 -19
- data/lib/vagrant/guest/linux/error.rb +0 -9
- data/lib/vagrant/guest/openbsd.rb +0 -20
- data/lib/vagrant/guest/solaris.rb +0 -118
- data/lib/vagrant/guest/suse.rb +0 -17
- data/lib/vagrant/guest/ubuntu.rb +0 -23
- data/lib/vagrant/hosts/base.rb +0 -66
- data/lib/vagrant/provisioners.rb +0 -12
- data/lib/vagrant/provisioners/base.rb +0 -44
- data/lib/vagrant/provisioners/chef.rb +0 -168
- data/lib/vagrant/provisioners/chef_client.rb +0 -132
- data/lib/vagrant/provisioners/chef_solo.rb +0 -234
- data/lib/vagrant/provisioners/puppet.rb +0 -176
- data/lib/vagrant/provisioners/puppet_server.rb +0 -78
- data/lib/vagrant/provisioners/shell.rb +0 -103
- data/lib/vagrant/vm.rb +0 -195
- data/test/buildbot/README.md +0 -72
- data/test/buildbot/buildbot_config/__init__.py +0 -0
- data/test/buildbot/buildbot_config/config/__init__.py +0 -0
- data/test/buildbot/buildbot_config/config/loader.py +0 -24
- data/test/buildbot/buildbot_config/config/master.py +0 -24
- data/test/buildbot/buildbot_config/config/slave.py +0 -22
- data/test/buildbot/buildbot_config/master/__init__.py +0 -6
- data/test/buildbot/buildbot_config/master/builders.py +0 -78
- data/test/buildbot/buildbot_config/master/buildsteps.py +0 -100
- data/test/buildbot/buildbot_config/master/change_sources.py +0 -8
- data/test/buildbot/buildbot_config/master/schedulers.py +0 -32
- data/test/buildbot/buildbot_config/master/slaves.py +0 -60
- data/test/buildbot/buildbot_config/master/status.py +0 -52
- data/test/buildbot/master/Makefile.sample +0 -28
- data/test/buildbot/master/buildbot.tac +0 -36
- data/test/buildbot/master/master.cfg +0 -67
- data/test/buildbot/master/public_html/bg_gradient.jpg +0 -0
- data/test/buildbot/master/public_html/default.css +0 -545
- data/test/buildbot/master/public_html/favicon.ico +0 -0
- data/test/buildbot/master/public_html/robots.txt +0 -10
- data/test/buildbot/master/public_html/static/css/bootstrap-1.4.0.min.css +0 -356
- data/test/buildbot/master/public_html/static/css/prettify.css +0 -97
- data/test/buildbot/master/public_html/static/css/syntax.css +0 -60
- data/test/buildbot/master/public_html/static/css/vagrant.base.css +0 -205
- data/test/buildbot/master/public_html/static/images/base_box_mac.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/getting-started/success.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/icons/error.png +0 -0
- data/test/buildbot/master/public_html/static/images/vagrant_chilling.png +0 -0
- data/test/buildbot/master/public_html/static/images/vagrant_holding.png +0 -0
- data/test/buildbot/master/public_html/static/images/vagrant_looking.png +0 -0
- data/test/buildbot/master/public_html/static/images/windows/alter_path.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/edit_path.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/environment_variables_button.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/port_and_ppk_path.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/ppk_selection.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/putty_first_screen.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/save_result.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/vbox_manage_default_location.jpg +0 -0
- data/test/buildbot/master/public_html/static/js/bootstrap-tabs.js +0 -80
- data/test/buildbot/master/public_html/static/js/jquery-1.7.min.js +0 -4
- data/test/buildbot/master/templates/authfail.html +0 -9
- data/test/buildbot/master/templates/build.html +0 -205
- data/test/buildbot/master/templates/builder.html +0 -118
- data/test/buildbot/master/templates/builders.html +0 -33
- data/test/buildbot/master/templates/buildslave.html +0 -72
- data/test/buildbot/master/templates/buildslaves.html +0 -70
- data/test/buildbot/master/templates/change.html +0 -15
- data/test/buildbot/master/templates/layouts/base.html +0 -58
- data/test/buildbot/master/templates/macros/box.html +0 -37
- data/test/buildbot/master/templates/macros/build_line.html +0 -50
- data/test/buildbot/master/templates/macros/change.html +0 -81
- data/test/buildbot/master/templates/macros/forms.html +0 -300
- data/test/buildbot/master/templates/root.html +0 -42
- data/test/buildbot/master/templates/waterfall.html +0 -53
- data/test/buildbot/requirements.txt +0 -4
- data/test/buildbot/scripts/deploy.sh +0 -38
- data/test/buildbot/scripts/setup.sh +0 -107
- data/test/buildbot/slave/buildbot.tac +0 -43
- data/test/buildbot/slave/info/admin +0 -1
- data/test/buildbot/slave/info/host +0 -1
- data/test/buildbot/tests/__init__.py +0 -0
- data/test/buildbot/tests/master/__init__.py +0 -0
- data/test/buildbot/tests/master/test_slaves.py +0 -41
- data/test/buildbot/vendor/choices-0.4.0.tar.gz +0 -0
- data/test/unit/vagrant/action/environment_test.rb +0 -16
- data/test/unit/vagrant/config/base_test.rb +0 -48
- data/test/unit/vagrant/config/ssh_test.rb +0 -17
- data/test/unit/vagrant/config/top_test.rb +0 -69
- data/test/unit/vagrant/config/vm_test.rb +0 -71
- data/test/unit/vagrant/data_store_test.rb +0 -79
- data/test/unit_legacy/locales/en.yml +0 -8
- data/test/unit_legacy/test_helper.rb +0 -32
- data/test/unit_legacy/vagrant/action/box/destroy_test.rb +0 -18
- data/test/unit_legacy/vagrant/action/box/download_test.rb +0 -125
- data/test/unit_legacy/vagrant/action/box/package_test.rb +0 -25
- data/test/unit_legacy/vagrant/action/box/unpackage_test.rb +0 -84
- data/test/unit_legacy/vagrant/action/box/verify_test.rb +0 -30
- data/test/unit_legacy/vagrant/action/env/set_test.rb +0 -24
- data/test/unit_legacy/vagrant/action/general/package_test.rb +0 -268
- data/test/unit_legacy/vagrant/action/general/validate_test.rb +0 -31
- data/test/unit_legacy/vagrant/action/vm/boot_test.rb +0 -66
- data/test/unit_legacy/vagrant/action/vm/check_accessible_test.rb +0 -61
- data/test/unit_legacy/vagrant/action/vm/check_box_test.rb +0 -61
- data/test/unit_legacy/vagrant/action/vm/check_guest_additions_test.rb +0 -9
- data/test/unit_legacy/vagrant/action/vm/clean_machine_folder_test.rb +0 -84
- data/test/unit_legacy/vagrant/action/vm/clear_forwarded_ports_test.rb +0 -52
- data/test/unit_legacy/vagrant/action/vm/clear_nfs_exports_test.rb +0 -22
- data/test/unit_legacy/vagrant/action/vm/clear_shared_folders_test.rb +0 -40
- data/test/unit_legacy/vagrant/action/vm/customize_test.rb +0 -37
- data/test/unit_legacy/vagrant/action/vm/destroy_test.rb +0 -25
- data/test/unit_legacy/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +0 -49
- data/test/unit_legacy/vagrant/action/vm/discard_state_test.rb +0 -45
- data/test/unit_legacy/vagrant/action/vm/export_test.rb +0 -107
- data/test/unit_legacy/vagrant/action/vm/forward_ports_helpers_test.rb +0 -77
- data/test/unit_legacy/vagrant/action/vm/forward_ports_test.rb +0 -197
- data/test/unit_legacy/vagrant/action/vm/halt_test.rb +0 -79
- data/test/unit_legacy/vagrant/action/vm/host_name_test.rb +0 -36
- data/test/unit_legacy/vagrant/action/vm/import_test.rb +0 -66
- data/test/unit_legacy/vagrant/action/vm/match_mac_address_test.rb +0 -40
- data/test/unit_legacy/vagrant/action/vm/modify_test.rb +0 -38
- data/test/unit_legacy/vagrant/action/vm/network_test.rb +0 -286
- data/test/unit_legacy/vagrant/action/vm/nfs_helpers_test.rb +0 -26
- data/test/unit_legacy/vagrant/action/vm/nfs_test.rb +0 -260
- data/test/unit_legacy/vagrant/action/vm/package_test.rb +0 -25
- data/test/unit_legacy/vagrant/action/vm/package_vagrantfile_test.rb +0 -46
- data/test/unit_legacy/vagrant/action/vm/provision_test.rb +0 -65
- data/test/unit_legacy/vagrant/action/vm/provisioner_cleanup_test.rb +0 -56
- data/test/unit_legacy/vagrant/action/vm/resume_test.rb +0 -35
- data/test/unit_legacy/vagrant/action/vm/share_folders_test.rb +0 -144
- data/test/unit_legacy/vagrant/action/vm/suspend_test.rb +0 -35
- data/test/unit_legacy/vagrant/action_test.rb +0 -89
- data/test/unit_legacy/vagrant/box_collection_test.rb +0 -45
- data/test/unit_legacy/vagrant/box_test.rb +0 -74
- data/test/unit_legacy/vagrant/cli_test.rb +0 -35
- data/test/unit_legacy/vagrant/command/base_test.rb +0 -23
- data/test/unit_legacy/vagrant/command/group_base_test.rb +0 -15
- data/test/unit_legacy/vagrant/command/helpers_test.rb +0 -88
- data/test/unit_legacy/vagrant/command/init_test.rb +0 -10
- data/test/unit_legacy/vagrant/command/package_test.rb +0 -27
- data/test/unit_legacy/vagrant/config/base_test.rb +0 -52
- data/test/unit_legacy/vagrant/config/error_recorder_test.rb +0 -18
- data/test/unit_legacy/vagrant/config/ssh_test.rb +0 -12
- data/test/unit_legacy/vagrant/config/vagrant_test.rb +0 -35
- data/test/unit_legacy/vagrant/config/vm/provisioner_test.rb +0 -92
- data/test/unit_legacy/vagrant/config/vm_test.rb +0 -47
- data/test/unit_legacy/vagrant/config_test.rb +0 -148
- data/test/unit_legacy/vagrant/downloaders/http_test.rb +0 -93
- data/test/unit_legacy/vagrant/environment_test.rb +0 -539
- data/test/unit_legacy/vagrant/errors_test.rb +0 -42
- data/test/unit_legacy/vagrant/hosts/base_test.rb +0 -46
- data/test/unit_legacy/vagrant/hosts/bsd_test.rb +0 -53
- data/test/unit_legacy/vagrant/hosts/linux_test.rb +0 -54
- data/test/unit_legacy/vagrant/plugin_test.rb +0 -9
- data/test/unit_legacy/vagrant/provisioners/base_test.rb +0 -63
- data/test/unit_legacy/vagrant/provisioners/chef_client_test.rb +0 -190
- data/test/unit_legacy/vagrant/provisioners/chef_solo_test.rb +0 -115
- data/test/unit_legacy/vagrant/provisioners/chef_test.rb +0 -209
- data/test/unit_legacy/vagrant/provisioners/puppet_server_test.rb +0 -68
- data/test/unit_legacy/vagrant/provisioners/puppet_test.rb +0 -182
- data/test/unit_legacy/vagrant/provisioners/shell_test.rb +0 -79
- data/test/unit_legacy/vagrant/ssh/session_test.rb +0 -40
- data/test/unit_legacy/vagrant/ssh_test.rb +0 -304
- data/test/unit_legacy/vagrant/systems/base_test.rb +0 -18
- data/test/unit_legacy/vagrant/systems/linux_test.rb +0 -104
- data/test/unit_legacy/vagrant/util/busy_test.rb +0 -106
- data/test/unit_legacy/vagrant/util/counter_test.rb +0 -29
- data/test/unit_legacy/vagrant/util/platform_test.rb +0 -18
- data/test/unit_legacy/vagrant/util/stacked_proc_runner_test.rb +0 -43
- data/test/unit_legacy/vagrant/util/template_renderer_test.rb +0 -145
- data/test/unit_legacy/vagrant/vm_test.rb +0 -300
- data/vagrant-1.1.4.gem +0 -0
- data/vagrantup-0.1.0.gem +0 -0
- data/vagrantup-0.1.1.gem +0 -0
- data/vagrantup-0.1.2.gem +0 -0
- data/vagrantup-0.1.3.gem +0 -0
- data/vagrantup-0.1.4.gem +0 -0
- data/vagrantup-0.2.0.gem +0 -0
- data/vagrantup-0.3.0.gem +0 -0
- data/vagrantup-0.3.1.gem +0 -0
- data/vagrantup-0.3.2.gem +0 -0
- data/vagrantup-0.3.3.gem +0 -0
- data/vagrantup-0.3.4.gem +0 -0
- data/vagrantup-0.4.0.gem +0 -0
- data/vagrantup-0.4.1.gem +0 -0
- data/vagrantup-0.4.3.dev.gem +0 -0
- data/vagrantup-0.5.0.gem +0 -0
- data/vagrantup-0.5.1.gem +0 -0
- data/vagrantup-0.5.2.gem +0 -0
- data/vagrantup-0.5.3.gem +0 -0
- data/vagrantup-0.5.4.gem +0 -0
- data/vagrantup-0.6.0.gem +0 -0
- data/vagrantup-0.6.1.gem +0 -0
- data/vagrantup-0.6.2.gem +0 -0
- data/vagrantup-0.6.3.gem +0 -0
- data/vagrantup-0.6.4.gem +0 -0
- data/vagrantup-0.6.5.gem +0 -0
- data/vagrantup-0.6.6.gem +0 -0
- data/vagrantup-0.6.7.gem +0 -0
- data/vagrantup-0.6.8.gem +0 -0
- data/vagrantup-0.6.9.gem +0 -0
- data/vagrantup-0.7.0.gem +0 -0
- data/vagrantup-0.7.1.gem +0 -0
- data/vagrantup-0.7.2.gem +0 -0
- data/vagrantup-0.7.3.gem +0 -0
- data/vagrantup-0.7.4.gem +0 -0
- data/vagrantup-0.7.5.gem +0 -0
- data/vagrantup-0.7.6.gem +0 -0
- data/vagrantup-0.7.7.gem +0 -0
- data/vagrantup-0.7.8.gem +0 -0
- data/vagrantup-0.8.0.gem +0 -0
- data/vagrantup-0.8.1.gem +0 -0
- data/vagrantup-0.8.10.gem +0 -0
- data/vagrantup-0.8.2.gem +0 -0
- data/vagrantup-0.8.3.gem +0 -0
- data/vagrantup-0.8.4.gem +0 -0
- data/vagrantup-0.8.5.gem +0 -0
- data/vagrantup-0.8.6.gem +0 -0
- data/vagrantup-0.8.7.gem +0 -0
- data/vagrantup-0.8.8.gem +0 -0
- data/vagrantup-0.8.9.gem +0 -0
- data/vagrantup-0.9.0.gem +0 -0
- data/vagrantup-0.9.1.gem +0 -0
- data/vagrantup-0.9.2.gem +0 -0
- data/vagrantup-0.9.3.gem +0 -0
- data/vagrantup-0.9.4.gem +0 -0
- data/vagrantup-0.9.5.gem +0 -0
- data/vagrantup-0.9.6.gem +0 -0
- data/vagrantup-0.9.7.gem +0 -0
- data/vagrantup-0.9.99.1.gem +0 -0
- data/vagrantup-0.9.99.2.gem +0 -0
- data/vagrantup-1.0.0.gem +0 -0
- data/vagrantup-1.0.1.gem +0 -0
- data/vagrantup-1.0.2.gem +0 -0
- data/vagrantup-1.0.3.gem +0 -0
- data/vagrantup-1.0.4.gem +0 -0
- data/vagrantup-1.0.5.gem +0 -0
- data/vagrantup-1.0.6.gem +0 -0
- data/vagrantup-1.1.4.gem +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require "log4r"
|
|
2
|
+
|
|
3
|
+
module Vagrant
|
|
4
|
+
module Action
|
|
5
|
+
module Builtin
|
|
6
|
+
# This middleware class will attempt to perform a graceful shutdown
|
|
7
|
+
# of the machine using the guest implementation. This middleware is
|
|
8
|
+
# compatible with the {Call} middleware so you can branch based on
|
|
9
|
+
# the result, which is true if the halt succeeded and false otherwise.
|
|
10
|
+
class GracefulHalt
|
|
11
|
+
# Note: Any of the arguments can be arrays as well.
|
|
12
|
+
#
|
|
13
|
+
# @param [Symbol] target_state The target state ID that means that
|
|
14
|
+
# the machine was properly shut down.
|
|
15
|
+
# @param [Symbol] source_state The source state ID that the machine
|
|
16
|
+
# must be in to be shut down.
|
|
17
|
+
def initialize(app, env, target_state, source_state=nil)
|
|
18
|
+
@app = app
|
|
19
|
+
@logger = Log4r::Logger.new("vagrant::action::builtin::graceful_halt")
|
|
20
|
+
@source_state = source_state
|
|
21
|
+
@target_state = target_state
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def call(env)
|
|
25
|
+
graceful = true
|
|
26
|
+
graceful = !env[:force_halt] if env.has_key?(:force_halt)
|
|
27
|
+
|
|
28
|
+
# By default, we didn't succeed.
|
|
29
|
+
env[:result] = false
|
|
30
|
+
|
|
31
|
+
if graceful && @source_state
|
|
32
|
+
@logger.info("Verifying source state of machine: #{@source_state.inspect}")
|
|
33
|
+
|
|
34
|
+
# If we're not in the proper source state, then we don't
|
|
35
|
+
# attempt to halt the machine
|
|
36
|
+
current_state = env[:machine].state.id
|
|
37
|
+
if current_state != @source_state
|
|
38
|
+
@logger.info("Invalid source state, not halting: #{current_state}")
|
|
39
|
+
graceful = false
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Only attempt to perform graceful shutdown under certain cases
|
|
44
|
+
# checked above.
|
|
45
|
+
if graceful
|
|
46
|
+
env[:ui].info I18n.t("vagrant.actions.vm.halt.graceful")
|
|
47
|
+
env[:machine].guest.halt
|
|
48
|
+
|
|
49
|
+
@logger.debug("Waiting for target graceful halt state: #{@target_state}")
|
|
50
|
+
count = 0
|
|
51
|
+
while env[:machine].state.id != @target_state
|
|
52
|
+
count += 1
|
|
53
|
+
return if count >= env[:machine].config.vm.graceful_halt_retry_count
|
|
54
|
+
sleep env[:machine].config.vm.graceful_halt_retry_interval
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# The result of this matters on whether we reached our
|
|
58
|
+
# proper target state or not.
|
|
59
|
+
env[:result] = env[:machine].state.id == @target_state
|
|
60
|
+
|
|
61
|
+
if env[:result]
|
|
62
|
+
@logger.info("Gracefully halted.")
|
|
63
|
+
else
|
|
64
|
+
@logger.info("Graceful halt failed.")
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
@app.call(env)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
module Action
|
|
3
|
+
module Builtin
|
|
4
|
+
# This built-in middleware handles the `box_url` setting, downloading
|
|
5
|
+
# the box if necessary. You should place this early in your middleware
|
|
6
|
+
# sequence for a provider after configuration validation but before
|
|
7
|
+
# you attempt to use any box.
|
|
8
|
+
class HandleBoxUrl
|
|
9
|
+
def initialize(app, env)
|
|
10
|
+
@app = app
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def call(env)
|
|
14
|
+
if !env[:machine].box
|
|
15
|
+
# We can assume a box URL is set because the Vagrantfile
|
|
16
|
+
# validation should do this for us. If not, though, we do
|
|
17
|
+
# raise a terrible runtime error.
|
|
18
|
+
box_name = env[:machine].config.vm.box
|
|
19
|
+
box_url = env[:machine].config.vm.box_url
|
|
20
|
+
|
|
21
|
+
# Add the box then reload the box collection so that it becomes
|
|
22
|
+
# aware of it.
|
|
23
|
+
env[:ui].info I18n.t(
|
|
24
|
+
"vagrant.actions.vm.check_box.not_found",
|
|
25
|
+
:name => box_name,
|
|
26
|
+
:provider => env[:machine].provider_name)
|
|
27
|
+
env[:action_runner].run(Vagrant::Action.action_box_add, {
|
|
28
|
+
:box_name => box_name,
|
|
29
|
+
:box_provider => env[:machine].provider_name,
|
|
30
|
+
:box_url => box_url
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
# Reload the environment and set the VM to be the new loaded VM.
|
|
34
|
+
env[:machine] = env[:machine].env.machine(
|
|
35
|
+
env[:machine].name, env[:machine].provider_name, true)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
@app.call(env)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
require "set"
|
|
2
|
+
|
|
3
|
+
require "log4r"
|
|
4
|
+
|
|
5
|
+
require "vagrant/util/is_port_open"
|
|
6
|
+
|
|
7
|
+
module Vagrant
|
|
8
|
+
module Action
|
|
9
|
+
module Builtin
|
|
10
|
+
# This middleware class will detect and handle collisions with
|
|
11
|
+
# forwarded ports, whether that means raising an error or repairing
|
|
12
|
+
# them automatically.
|
|
13
|
+
#
|
|
14
|
+
# Parameters it takes from the environment hash:
|
|
15
|
+
#
|
|
16
|
+
# * `:port_collision_repair` - If true, it will attempt to repair
|
|
17
|
+
# port collisions. If false, it will raise an exception when
|
|
18
|
+
# there is a collision.
|
|
19
|
+
#
|
|
20
|
+
# * `:port_collision_extra_in_use` - An array of ports that are
|
|
21
|
+
# considered in use.
|
|
22
|
+
#
|
|
23
|
+
# * `:port_collision_remap` - A hash remapping certain host ports
|
|
24
|
+
# to other host ports.
|
|
25
|
+
#
|
|
26
|
+
class HandleForwardedPortCollisions
|
|
27
|
+
include Util::IsPortOpen
|
|
28
|
+
|
|
29
|
+
def initialize(app, env)
|
|
30
|
+
@app = app
|
|
31
|
+
@logger = Log4r::Logger.new("vagrant::action::builtin::handle_port_collisions")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def call(env)
|
|
35
|
+
@logger.debug("Detecting any forwarded port collisions...")
|
|
36
|
+
|
|
37
|
+
# Get the extra ports we consider in use
|
|
38
|
+
extra_in_use = env[:port_collision_extra_in_use] || []
|
|
39
|
+
|
|
40
|
+
# Get the remap
|
|
41
|
+
remap = env[:port_collision_remap] || {}
|
|
42
|
+
|
|
43
|
+
# Determine the handler we'll use if we have any port collisions
|
|
44
|
+
repair = !!env[:port_collision_repair]
|
|
45
|
+
|
|
46
|
+
# Determine a list of usable ports for repair
|
|
47
|
+
usable_ports = Set.new(env[:machine].config.vm.usable_port_range)
|
|
48
|
+
usable_ports.subtract(extra_in_use)
|
|
49
|
+
|
|
50
|
+
# Pass one, remove all defined host ports from usable ports
|
|
51
|
+
with_forwarded_ports(env) do |options|
|
|
52
|
+
usable_ports.delete(options[:host])
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Pass two, detect/handle any collisions
|
|
56
|
+
with_forwarded_ports(env) do |options|
|
|
57
|
+
guest_port = options[:guest]
|
|
58
|
+
host_port = options[:host]
|
|
59
|
+
|
|
60
|
+
if remap[host_port]
|
|
61
|
+
remap_port = remap[host_port]
|
|
62
|
+
@logger.debug("Remap port override: #{host_port} => #{remap_port}")
|
|
63
|
+
host_port = remap_port
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# If the port is open (listening for TCP connections)
|
|
67
|
+
if extra_in_use.include?(host_port) || is_port_open?("127.0.0.1", host_port)
|
|
68
|
+
if !repair
|
|
69
|
+
raise Errors::ForwardPortCollision,
|
|
70
|
+
:guest_port => guest_port.to_s,
|
|
71
|
+
:host_port => host_port.to_s
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
@logger.info("Attempting to repair FP collision: #{host_port}")
|
|
75
|
+
|
|
76
|
+
# If we have no usable ports then we can't repair
|
|
77
|
+
if usable_ports.empty?
|
|
78
|
+
raise Errors::ForwardPortAutolistEmpty,
|
|
79
|
+
:vm_name => env[:machine].name,
|
|
80
|
+
:guest_port => guest_port.to_s,
|
|
81
|
+
:host_port => host_port.to_s
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Attempt to repair the forwarded port
|
|
85
|
+
repaired_port = usable_ports.to_a.sort[0]
|
|
86
|
+
usable_ports.delete(repaired_port)
|
|
87
|
+
|
|
88
|
+
# Modify the args in place
|
|
89
|
+
options[:host] = repaired_port
|
|
90
|
+
|
|
91
|
+
@logger.info("Repaired FP collision: #{host_port} to #{repaired_port}")
|
|
92
|
+
|
|
93
|
+
# Notify the user
|
|
94
|
+
env[:ui].info(I18n.t("vagrant.actions.vm.forward_ports.fixed_collision",
|
|
95
|
+
:host_port => host_port.to_s,
|
|
96
|
+
:guest_port => guest_port.to_s,
|
|
97
|
+
:new_port => repaired_port.to_s))
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
@app.call(env)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
protected
|
|
105
|
+
|
|
106
|
+
def with_forwarded_ports(env)
|
|
107
|
+
env[:machine].config.vm.networks.each do |type, options|
|
|
108
|
+
# Ignore anything but forwarded ports
|
|
109
|
+
next if type != :forwarded_port
|
|
110
|
+
|
|
111
|
+
yield options
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require "log4r"
|
|
2
|
+
|
|
3
|
+
module Vagrant
|
|
4
|
+
module Action
|
|
5
|
+
module Builtin
|
|
6
|
+
# This class creates a multi-process lock using `flock`. The lock
|
|
7
|
+
# is active for the remainder of the middleware stack.
|
|
8
|
+
class Lock
|
|
9
|
+
def initialize(app, env, options=nil)
|
|
10
|
+
@app = app
|
|
11
|
+
@logger = Log4r::Logger.new("vagrant::action::builtin::lock")
|
|
12
|
+
@options ||= options || {}
|
|
13
|
+
raise ArgumentError, "Please specify a lock path" if !@options[:path]
|
|
14
|
+
raise ArgumentError, "Please specify an exception." if !@options[:exception]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def call(env)
|
|
18
|
+
lock_path = @options[:path]
|
|
19
|
+
lock_path = lock_path.call(env) if lock_path.is_a?(Proc)
|
|
20
|
+
|
|
21
|
+
env_key = "has_lock_#{lock_path}"
|
|
22
|
+
|
|
23
|
+
if !env[env_key]
|
|
24
|
+
# If we already have the key in our environment we assume the
|
|
25
|
+
# lock is held by our middleware stack already and we allow
|
|
26
|
+
# nesting.
|
|
27
|
+
File.open(lock_path, "w+") do |f|
|
|
28
|
+
# The file locking fails only if it returns "false." If it
|
|
29
|
+
# succeeds it returns a 0, so we must explicitly check for
|
|
30
|
+
# the proper error case.
|
|
31
|
+
@logger.info("Locking: #{lock_path}")
|
|
32
|
+
if f.flock(File::LOCK_EX | File::LOCK_NB) === false
|
|
33
|
+
exception = @options[:exception]
|
|
34
|
+
exception = exception.call(env) if exception.is_a?(Proc)
|
|
35
|
+
raise exception
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Set that we gained the lock and call deeper into the
|
|
39
|
+
# middleware, but make sure we UNSET the lock when we leave.
|
|
40
|
+
begin
|
|
41
|
+
env[env_key] = true
|
|
42
|
+
@app.call(env)
|
|
43
|
+
ensure
|
|
44
|
+
@logger.info("Unlocking: #{lock_path}")
|
|
45
|
+
env[env_key] = false
|
|
46
|
+
f.flock(File::LOCK_UN)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
else
|
|
50
|
+
# Just call up the middleware because we already hold the lock
|
|
51
|
+
@app.call(env)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
require 'digest/md5'
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
require 'pathname'
|
|
4
|
+
|
|
5
|
+
require "log4r"
|
|
6
|
+
|
|
7
|
+
module Vagrant
|
|
8
|
+
module Action
|
|
9
|
+
module Builtin
|
|
10
|
+
# This built-in middleware exports and mounts NFS shared folders.
|
|
11
|
+
#
|
|
12
|
+
# To use this middleware, two configuration parameters must be given
|
|
13
|
+
# via the environment hash:
|
|
14
|
+
#
|
|
15
|
+
# - `:nfs_host_ip` - The IP of where to mount the NFS folder from.
|
|
16
|
+
# - `:nfs_machine_ip` - The IP of the machine where the NFS folder
|
|
17
|
+
# will be mounted.
|
|
18
|
+
#
|
|
19
|
+
class NFS
|
|
20
|
+
def initialize(app, env)
|
|
21
|
+
@app = app
|
|
22
|
+
@logger = Log4r::Logger.new("vagrant::action::builtin::nfs")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def call(env)
|
|
26
|
+
# We forward things along first. We do everything on the tail
|
|
27
|
+
# end of the middleware call.
|
|
28
|
+
@app.call(env)
|
|
29
|
+
|
|
30
|
+
# Used by prepare_permission, so we need to save it
|
|
31
|
+
@env = env
|
|
32
|
+
|
|
33
|
+
folders = {}
|
|
34
|
+
env[:machine].config.vm.synced_folders.each do |id, opts|
|
|
35
|
+
# If this synced folder doesn't enable NFS, ignore it.
|
|
36
|
+
next if !opts[:nfs]
|
|
37
|
+
|
|
38
|
+
# Expand the host path, create it if we have to and
|
|
39
|
+
# store away the folder.
|
|
40
|
+
hostpath = Pathname.new(opts[:hostpath]).expand_path(env[:root_path])
|
|
41
|
+
|
|
42
|
+
if !hostpath.directory? && opts[:create]
|
|
43
|
+
# Host path doesn't exist, so let's create it.
|
|
44
|
+
@logger.debug("Host path doesn't exist, creating: #{hostpath}")
|
|
45
|
+
|
|
46
|
+
begin
|
|
47
|
+
FileUtils.mkpath(hostpath)
|
|
48
|
+
rescue Errno::EACCES
|
|
49
|
+
raise Vagrant::Errors::SharedFolderCreateFailed,
|
|
50
|
+
:path => hostpath.to_s
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Set the hostpath back on the options and save it
|
|
55
|
+
opts[:hostpath] = hostpath.to_s
|
|
56
|
+
folders[id] = opts
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
if !folders.empty?
|
|
60
|
+
raise Errors::NFSNoHostIP if !env[:nfs_host_ip]
|
|
61
|
+
raise Errors::NFSNoGuestIP if !env[:nfs_machine_ip]
|
|
62
|
+
|
|
63
|
+
# Prepare the folder, this means setting up various options
|
|
64
|
+
# and such on the folder itself.
|
|
65
|
+
folders.each { |id, opts| prepare_folder(opts) }
|
|
66
|
+
|
|
67
|
+
# Export the folders
|
|
68
|
+
env[:ui].info I18n.t("vagrant.actions.vm.nfs.exporting")
|
|
69
|
+
env[:host].nfs_export(env[:machine].id, env[:nfs_machine_ip], folders)
|
|
70
|
+
|
|
71
|
+
# Mount
|
|
72
|
+
env[:ui].info I18n.t("vagrant.actions.vm.nfs.mounting")
|
|
73
|
+
|
|
74
|
+
# Only mount folders that have a guest path specified.
|
|
75
|
+
mount_folders = {}
|
|
76
|
+
folders.each do |id, opts|
|
|
77
|
+
mount_folders[id] = opts.dup if opts[:guestpath]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Mount them!
|
|
81
|
+
env[:machine].guest.mount_nfs(env[:nfs_host_ip], mount_folders)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
protected
|
|
86
|
+
|
|
87
|
+
def prepare_folder(opts)
|
|
88
|
+
opts[:map_uid] = prepare_permission(:uid, opts)
|
|
89
|
+
opts[:map_gid] = prepare_permission(:gid, opts)
|
|
90
|
+
opts[:nfs_version] ||= 3
|
|
91
|
+
|
|
92
|
+
# The poor man's UUID. An MD5 hash here is sufficient since
|
|
93
|
+
# we need a 32 character "uuid" to represent the filesystem
|
|
94
|
+
# of an export. Hashing the host path is safe because two of
|
|
95
|
+
# the same host path will hash to the same fsid.
|
|
96
|
+
opts[:uuid] = Digest::MD5.hexdigest(opts[:hostpath])
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Prepares the UID/GID settings for a single folder.
|
|
100
|
+
def prepare_permission(perm, opts)
|
|
101
|
+
key = "map_#{perm}".to_sym
|
|
102
|
+
return nil if opts.has_key?(key) && opts[key].nil?
|
|
103
|
+
|
|
104
|
+
# The options on the hash get priority, then the default
|
|
105
|
+
# values
|
|
106
|
+
value = opts.has_key?(key) ? opts[key] : @env[:machine].config.nfs.send(key)
|
|
107
|
+
return value if value != :auto
|
|
108
|
+
|
|
109
|
+
# Get UID/GID from folder if we've made it this far
|
|
110
|
+
# (value == :auto)
|
|
111
|
+
stat = File.stat(opts[:hostpath])
|
|
112
|
+
return stat.send(perm)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require "log4r"
|
|
2
|
+
|
|
3
|
+
module Vagrant
|
|
4
|
+
module Action
|
|
5
|
+
module Builtin
|
|
6
|
+
# This class will run the configured provisioners against the
|
|
7
|
+
# machine.
|
|
8
|
+
#
|
|
9
|
+
# This action should be placed BEFORE the machine is booted so it
|
|
10
|
+
# can do some setup, and then run again (on the return path) against
|
|
11
|
+
# a running machine.
|
|
12
|
+
class Provision
|
|
13
|
+
def initialize(app, env)
|
|
14
|
+
@app = app
|
|
15
|
+
@logger = Log4r::Logger.new("vagrant::action::builtin::provision")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def call(env)
|
|
19
|
+
# Check if we're even provisioning things.
|
|
20
|
+
enabled = true
|
|
21
|
+
enabled = env[:provision_enabled] if env.has_key?(:provision_enabled)
|
|
22
|
+
|
|
23
|
+
# This keeps track of a mapping between provisioner and type
|
|
24
|
+
type_map = {}
|
|
25
|
+
|
|
26
|
+
# Get all the configured provisioners
|
|
27
|
+
provisioners = env[:machine].config.vm.provisioners.map do |provisioner|
|
|
28
|
+
# Instantiate the provisioner
|
|
29
|
+
klass = Vagrant.plugin("2").manager.provisioners[provisioner.name]
|
|
30
|
+
result = klass.new(env[:machine], provisioner.config)
|
|
31
|
+
|
|
32
|
+
# Store in the type map so that --provision-with works properly
|
|
33
|
+
type_map[result] = provisioner.name
|
|
34
|
+
|
|
35
|
+
# Return the result
|
|
36
|
+
result
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Ask the provisioners to modify the configuration if needed
|
|
40
|
+
provisioners.each do |p|
|
|
41
|
+
p.configure(env[:machine].config)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Continue, we need the VM to be booted.
|
|
45
|
+
@app.call(env)
|
|
46
|
+
|
|
47
|
+
# Actually provision if we enabled it
|
|
48
|
+
if enabled
|
|
49
|
+
provisioners.each do |p|
|
|
50
|
+
next if env[:provision_types] && \
|
|
51
|
+
!env[:provision_types].include?(type_map[p])
|
|
52
|
+
|
|
53
|
+
run_provisioner(env, p)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# This is pulled out into a seperate method so that users can
|
|
59
|
+
# subclass and implement custom behavior if they'd like around
|
|
60
|
+
# this step.
|
|
61
|
+
def run_provisioner(env, p)
|
|
62
|
+
env[:ui].info(I18n.t("vagrant.actions.vm.provision.beginning",
|
|
63
|
+
:provisioner => p.class))
|
|
64
|
+
|
|
65
|
+
p.provision
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|