vagrant 1.0.7 → 1.5.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 +7 -0
- data/.gitignore +14 -43
- data/Gemfile +2 -1
- data/LICENSE.txt +22 -0
- data/README.md +3 -90
- data/Rakefile +1 -18
- data/bin/vagrant +2 -58
- data/message.txt +17 -0
- data/vagrant.gemspec +20 -69
- metadata +43 -655
- data/.yardopts +0 -1
- data/CHANGELOG.md +0 -723
- data/LICENSE +0 -21
- data/config/default.rb +0 -30
- data/contrib/README.md +0 -12
- data/contrib/emacs/vagrant.el +0 -8
- data/contrib/vim/vagrantfile.vim +0 -9
- data/keys/README.md +0 -17
- data/keys/vagrant +0 -27
- data/keys/vagrant.pub +0 -1
- data/lib/vagrant.rb +0 -197
- data/lib/vagrant/action.rb +0 -63
- 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/builder.rb +0 -128
- 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/package.rb +0 -101
- data/lib/vagrant/action/general/validate.rb +0 -18
- data/lib/vagrant/action/runner.rb +0 -53
- data/lib/vagrant/action/vm/boot.rb +0 -53
- data/lib/vagrant/action/vm/check_accessible.rb +0 -23
- data/lib/vagrant/action/vm/check_box.rb +0 -33
- data/lib/vagrant/action/vm/check_guest_additions.rb +0 -38
- data/lib/vagrant/action/vm/check_port_collisions.rb +0 -89
- data/lib/vagrant/action/vm/clean_machine_folder.rb +0 -43
- data/lib/vagrant/action/vm/clear_forwarded_ports.rb +0 -18
- data/lib/vagrant/action/vm/clear_network_interfaces.rb +0 -31
- data/lib/vagrant/action/vm/clear_shared_folders.rb +0 -18
- data/lib/vagrant/action/vm/customize.rb +0 -36
- data/lib/vagrant/action/vm/default_name.rb +0 -22
- data/lib/vagrant/action/vm/destroy.rb +0 -19
- 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/export.rb +0 -57
- data/lib/vagrant/action/vm/forward_ports.rb +0 -92
- data/lib/vagrant/action/vm/halt.rb +0 -32
- data/lib/vagrant/action/vm/host_name.rb +0 -21
- data/lib/vagrant/action/vm/import.rb +0 -48
- data/lib/vagrant/action/vm/match_mac_address.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/package.rb +0 -23
- data/lib/vagrant/action/vm/package_vagrantfile.rb +0 -36
- data/lib/vagrant/action/vm/provision.rb +0 -61
- data/lib/vagrant/action/vm/provisioner_cleanup.rb +0 -26
- data/lib/vagrant/action/vm/prune_nfs_exports.rb +0 -20
- data/lib/vagrant/action/vm/resume.rb +0 -20
- data/lib/vagrant/action/vm/sane_defaults.rb +0 -78
- data/lib/vagrant/action/vm/setup_package_files.rb +0 -54
- data/lib/vagrant/action/vm/share_folders.rb +0 -114
- data/lib/vagrant/action/vm/suspend.rb +0 -20
- data/lib/vagrant/action/warden.rb +0 -92
- data/lib/vagrant/box.rb +0 -44
- data/lib/vagrant/box_collection.rb +0 -58
- data/lib/vagrant/cli.rb +0 -76
- 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/init.rb +0 -40
- 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/ssh.rb +0 -90
- data/lib/vagrant/command/ssh_config.rb +0 -51
- data/lib/vagrant/command/start_mixins.rb +0 -26
- 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/communication/ssh.rb +0 -230
- data/lib/vagrant/config.rb +0 -49
- data/lib/vagrant/config/base.rb +0 -82
- data/lib/vagrant/config/container.rb +0 -37
- data/lib/vagrant/config/error_recorder.rb +0 -19
- data/lib/vagrant/config/loader.rb +0 -127
- 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/downloaders.rb +0 -7
- data/lib/vagrant/downloaders/base.rb +0 -25
- data/lib/vagrant/downloaders/file.rb +0 -22
- data/lib/vagrant/downloaders/http.rb +0 -97
- 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/environment.rb +0 -522
- data/lib/vagrant/errors.rb +0 -445
- 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/debian.rb +0 -64
- data/lib/vagrant/guest/fedora.rb +0 -66
- data/lib/vagrant/guest/freebsd.rb +0 -86
- data/lib/vagrant/guest/gentoo.rb +0 -46
- data/lib/vagrant/guest/linux.rb +0 -118
- 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/redhat.rb +0 -67
- 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.rb +0 -37
- data/lib/vagrant/hosts/arch.rb +0 -55
- data/lib/vagrant/hosts/base.rb +0 -66
- data/lib/vagrant/hosts/bsd.rb +0 -97
- data/lib/vagrant/hosts/fedora.rb +0 -47
- data/lib/vagrant/hosts/freebsd.rb +0 -41
- data/lib/vagrant/hosts/gentoo.rb +0 -20
- data/lib/vagrant/hosts/linux.rb +0 -94
- data/lib/vagrant/hosts/opensuse.rb +0 -30
- data/lib/vagrant/hosts/windows.rb +0 -16
- data/lib/vagrant/plugin.rb +0 -81
- 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/registry.rb +0 -52
- data/lib/vagrant/ssh.rb +0 -126
- data/lib/vagrant/test_helpers.rb +0 -154
- data/lib/vagrant/ui.rb +0 -168
- data/lib/vagrant/util.rb +0 -12
- data/lib/vagrant/util/ansi_escape_code_remover.rb +0 -34
- data/lib/vagrant/util/busy.rb +0 -59
- data/lib/vagrant/util/counter.rb +0 -24
- data/lib/vagrant/util/file_checksum.rb +0 -38
- data/lib/vagrant/util/file_mode.rb +0 -12
- data/lib/vagrant/util/hash_with_indifferent_access.rb +0 -63
- data/lib/vagrant/util/is_port_open.rb +0 -38
- data/lib/vagrant/util/line_ending_helpers.rb +0 -14
- data/lib/vagrant/util/network_ip.rb +0 -28
- data/lib/vagrant/util/platform.rb +0 -68
- data/lib/vagrant/util/retryable.rb +0 -25
- data/lib/vagrant/util/safe_exec.rb +0 -36
- data/lib/vagrant/util/safe_puts.rb +0 -31
- data/lib/vagrant/util/stacked_proc_runner.rb +0 -35
- data/lib/vagrant/util/subprocess.rb +0 -247
- data/lib/vagrant/util/template_renderer.rb +0 -83
- data/lib/vagrant/version.rb +0 -6
- data/lib/vagrant/vm.rb +0 -195
- data/tasks/acceptance.rake +0 -113
- data/tasks/bundler.rake +0 -3
- data/tasks/test.rake +0 -20
- data/templates/commands/init/Vagrantfile.erb +0 -99
- data/templates/commands/ssh_config/config.erb +0 -15
- data/templates/config/validation_failed.erb +0 -7
- data/templates/guests/arch/network_dhcp.erb +0 -7
- data/templates/guests/arch/network_static.erb +0 -7
- data/templates/guests/debian/network_dhcp.erb +0 -6
- data/templates/guests/debian/network_static.erb +0 -7
- data/templates/guests/fedora/network_dhcp.erb +0 -6
- data/templates/guests/fedora/network_static.erb +0 -13
- data/templates/guests/freebsd/network_dhcp.erb +0 -3
- data/templates/guests/freebsd/network_static.erb +0 -3
- data/templates/guests/gentoo/network_dhcp.erb +0 -4
- data/templates/guests/gentoo/network_static.erb +0 -4
- data/templates/guests/redhat/network_dhcp.erb +0 -6
- data/templates/guests/redhat/network_static.erb +0 -7
- data/templates/locales/en.yml +0 -759
- data/templates/nfs/exports.erb +0 -5
- data/templates/nfs/exports_freebsd.erb +0 -5
- data/templates/nfs/exports_linux.erb +0 -5
- data/templates/package_Vagrantfile.erb +0 -11
- data/templates/provisioners/chef_client/client.erb +0 -32
- data/templates/provisioners/chef_solo/solo.erb +0 -25
- data/test/acceptance/base.rb +0 -48
- data/test/acceptance/box_test.rb +0 -99
- data/test/acceptance/destroy_test.rb +0 -37
- data/test/acceptance/halt_test.rb +0 -72
- data/test/acceptance/init_test.rb +0 -33
- data/test/acceptance/networking/host_only_test.rb +0 -37
- data/test/acceptance/networking/port_forward_test.rb +0 -125
- data/test/acceptance/package_test.rb +0 -46
- data/test/acceptance/provisioning/basic_test.rb +0 -61
- data/test/acceptance/provisioning/chef_solo_test.rb +0 -37
- data/test/acceptance/provisioning/shell_test.rb +0 -53
- data/test/acceptance/resume_test.rb +0 -17
- data/test/acceptance/shared_folders_test.rb +0 -84
- data/test/acceptance/skeletons/chef_solo_basic/README.md +0 -3
- data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +0 -5
- data/test/acceptance/skeletons/chef_solo_json/README.md +0 -3
- data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +0 -6
- data/test/acceptance/skeletons/provisioner_multi/README.md +0 -3
- data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +0 -5
- data/test/acceptance/ssh_test.rb +0 -46
- data/test/acceptance/support/config.rb +0 -42
- data/test/acceptance/support/isolated_environment.rb +0 -117
- data/test/acceptance/support/matchers/have_color.rb +0 -9
- data/test/acceptance/support/matchers/match_output.rb +0 -14
- data/test/acceptance/support/matchers/succeed.rb +0 -14
- data/test/acceptance/support/network_tests.rb +0 -29
- data/test/acceptance/support/output.rb +0 -95
- data/test/acceptance/support/shared/base_context.rb +0 -72
- data/test/acceptance/support/shared/command_examples.rb +0 -33
- data/test/acceptance/support/virtualbox.rb +0 -36
- data/test/acceptance/suspend_test.rb +0 -56
- data/test/acceptance/up_basic_test.rb +0 -33
- data/test/acceptance/up_with_box_url.rb +0 -40
- data/test/acceptance/vagrant_test.rb +0 -47
- data/test/acceptance/version_test.rb +0 -15
- 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/config/acceptance_boxes.yml +0 -7
- data/test/support/isolated_environment.rb +0 -46
- data/test/support/tempdir.rb +0 -34
- data/test/unit/base.rb +0 -21
- data/test/unit/support/isolated_environment.rb +0 -47
- data/test/unit/support/shared/base_context.rb +0 -30
- data/test/unit/vagrant/action/builder_test.rb +0 -156
- data/test/unit/vagrant/action/environment_test.rb +0 -16
- data/test/unit/vagrant/action/runner_test.rb +0 -65
- data/test/unit/vagrant/action/warden_test.rb +0 -92
- data/test/unit/vagrant/box_collection_test.rb +0 -56
- data/test/unit/vagrant/box_test.rb +0 -34
- data/test/unit/vagrant/command/base_test.rb +0 -150
- data/test/unit/vagrant/config/base_test.rb +0 -48
- data/test/unit/vagrant/config/loader_test.rb +0 -79
- 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/config_test.rb +0 -27
- data/test/unit/vagrant/data_store_test.rb +0 -79
- data/test/unit/vagrant/downloaders/base_test.rb +0 -18
- data/test/unit/vagrant/downloaders/file_test.rb +0 -75
- data/test/unit/vagrant/downloaders/http_test.rb +0 -19
- data/test/unit/vagrant/environment_test.rb +0 -220
- data/test/unit/vagrant/hosts_test.rb +0 -36
- data/test/unit/vagrant/registry_test.rb +0 -74
- data/test/unit/vagrant/util/ansi_escape_code_remover_test.rb +0 -16
- data/test/unit/vagrant/util/file_checksum_test.rb +0 -23
- data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +0 -38
- data/test/unit/vagrant/util/is_port_open_test.rb +0 -53
- data/test/unit/vagrant/util/line_endings_helper_test.rb +0 -16
- data/test/unit/vagrant/util/network_ip_test.rb +0 -17
- data/test/unit/vagrant/util/retryable_test.rb +0 -106
- data/test/unit/vagrant_test.rb +0 -27
- 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
@@ -1,21 +0,0 @@
|
|
1
|
-
module Vagrant
|
2
|
-
module Action
|
3
|
-
module VM
|
4
|
-
class MatchMACAddress
|
5
|
-
def initialize(app, env)
|
6
|
-
@app = app
|
7
|
-
end
|
8
|
-
|
9
|
-
def call(env)
|
10
|
-
raise Errors::VMBaseMacNotSpecified if !env[:vm].config.vm.base_mac
|
11
|
-
|
12
|
-
# Create the proc which we want to use to modify the virtual machine
|
13
|
-
env[:ui].info I18n.t("vagrant.actions.vm.match_mac.matching")
|
14
|
-
env[:vm].driver.set_mac_address(env[:vm].config.vm.base_mac)
|
15
|
-
|
16
|
-
@app.call(env)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,403 +0,0 @@
|
|
1
|
-
require 'set'
|
2
|
-
|
3
|
-
require 'log4r'
|
4
|
-
|
5
|
-
require 'vagrant/util/network_ip'
|
6
|
-
|
7
|
-
module Vagrant
|
8
|
-
module Action
|
9
|
-
module VM
|
10
|
-
# This action handles all `config.vm.network` configurations by
|
11
|
-
# setting up the VM properly and enabling the networks afterword.
|
12
|
-
class Network
|
13
|
-
# Utilities to deal with network addresses
|
14
|
-
include Util::NetworkIP
|
15
|
-
|
16
|
-
def initialize(app, env)
|
17
|
-
@logger = Log4r::Logger.new("vagrant::action::vm::network")
|
18
|
-
|
19
|
-
@app = app
|
20
|
-
end
|
21
|
-
|
22
|
-
def call(env)
|
23
|
-
@env = env
|
24
|
-
|
25
|
-
# First we have to get the array of adapters that we need
|
26
|
-
# to create on the virtual machine itself, as well as the
|
27
|
-
# driver-agnostic network configurations for each.
|
28
|
-
@logger.debug("Determining adapters and networks...")
|
29
|
-
adapters = []
|
30
|
-
networks = []
|
31
|
-
env[:vm].config.vm.networks.each do |type, args|
|
32
|
-
# Get the normalized configuration we'll use around
|
33
|
-
config = send("#{type}_config", args)
|
34
|
-
|
35
|
-
# Get the virtualbox adapter configuration
|
36
|
-
adapter = send("#{type}_adapter", config)
|
37
|
-
adapters << adapter
|
38
|
-
|
39
|
-
# Get the network configuration
|
40
|
-
network = send("#{type}_network_config", config)
|
41
|
-
network[:_auto_config] = true if config[:auto_config]
|
42
|
-
networks << network
|
43
|
-
end
|
44
|
-
|
45
|
-
if !adapters.empty?
|
46
|
-
# Automatically assign an adapter number to any adapters
|
47
|
-
# that aren't explicitly set.
|
48
|
-
@logger.debug("Assigning adapter locations...")
|
49
|
-
assign_adapter_locations(adapters)
|
50
|
-
|
51
|
-
# Verify that our adapters are good just prior to enabling them.
|
52
|
-
verify_adapters(adapters)
|
53
|
-
|
54
|
-
# Create all the network interfaces
|
55
|
-
@logger.info("Enabling adapters...")
|
56
|
-
env[:ui].info I18n.t("vagrant.actions.vm.network.preparing")
|
57
|
-
env[:vm].driver.enable_adapters(adapters)
|
58
|
-
end
|
59
|
-
|
60
|
-
# Continue the middleware chain. We're done with our VM
|
61
|
-
# setup until after it is booted.
|
62
|
-
@app.call(env)
|
63
|
-
|
64
|
-
if !adapters.empty? && !networks.empty?
|
65
|
-
# Determine the interface numbers for the guest.
|
66
|
-
assign_interface_numbers(networks, adapters)
|
67
|
-
|
68
|
-
# Configure all the network interfaces on the guest. We only
|
69
|
-
# want to configure the networks that have `auto_config` setup.
|
70
|
-
networks_to_configure = networks.select { |n| n[:_auto_config] }
|
71
|
-
env[:ui].info I18n.t("vagrant.actions.vm.network.configuring")
|
72
|
-
env[:vm].guest.configure_networks(networks_to_configure)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
# This method assigns the adapter to use for the adapter.
|
77
|
-
# e.g. it says that the first adapter is actually on the
|
78
|
-
# virtual machine's 2nd adapter location.
|
79
|
-
#
|
80
|
-
# It determines the adapter numbers by simply finding the
|
81
|
-
# "next available" in each case.
|
82
|
-
#
|
83
|
-
# The adapters are modified in place by adding an ":adapter"
|
84
|
-
# field to each.
|
85
|
-
def assign_adapter_locations(adapters)
|
86
|
-
available = Set.new(1..8)
|
87
|
-
|
88
|
-
# Determine which NICs are actually available.
|
89
|
-
interfaces = @env[:vm].driver.read_network_interfaces
|
90
|
-
interfaces.each do |number, nic|
|
91
|
-
# Remove the number from the available NICs if the
|
92
|
-
# NIC is in use.
|
93
|
-
available.delete(number) if nic[:type] != :none
|
94
|
-
end
|
95
|
-
|
96
|
-
# Based on the available set, assign in order to
|
97
|
-
# the adapters.
|
98
|
-
available = available.to_a.sort
|
99
|
-
@logger.debug("Available NICs: #{available.inspect}")
|
100
|
-
adapters.each do |adapter|
|
101
|
-
# Ignore the adapters that already have been assigned
|
102
|
-
if !adapter[:adapter]
|
103
|
-
# If we have no available adapters, then that is an exceptional
|
104
|
-
# event.
|
105
|
-
raise Errors::NetworkNoAdapters if available.empty?
|
106
|
-
|
107
|
-
# Otherwise, assign as the adapter the next available item
|
108
|
-
adapter[:adapter] = available.shift
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
# Verifies that the adapter configurations look good. This will
|
114
|
-
# raise an exception in the case that any errors occur.
|
115
|
-
def verify_adapters(adapters)
|
116
|
-
# Verify that there are no collisions in the adapters being used.
|
117
|
-
used = Set.new
|
118
|
-
adapters.each do |adapter|
|
119
|
-
raise Errors::NetworkAdapterCollision if used.include?(adapter[:adapter])
|
120
|
-
used.add(adapter[:adapter])
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
# Assigns the actual interface number of a network based on the
|
125
|
-
# enabled NICs on the virtual machine.
|
126
|
-
#
|
127
|
-
# This interface number is used by the guest to configure the
|
128
|
-
# NIC on the guest VM.
|
129
|
-
#
|
130
|
-
# The networks are modified in place by adding an ":interface"
|
131
|
-
# field to each.
|
132
|
-
def assign_interface_numbers(networks, adapters)
|
133
|
-
current = 0
|
134
|
-
adapter_to_interface = {}
|
135
|
-
|
136
|
-
# Make a first pass to assign interface numbers by adapter location
|
137
|
-
vm_adapters = @env[:vm].driver.read_network_interfaces
|
138
|
-
vm_adapters.sort.each do |number, adapter|
|
139
|
-
if adapter[:type] != :none
|
140
|
-
# Not used, so assign the interface number and increment
|
141
|
-
adapter_to_interface[number] = current
|
142
|
-
current += 1
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
# Make a pass through the adapters to assign the :interface
|
147
|
-
# key to each network configuration.
|
148
|
-
adapters.each_index do |i|
|
149
|
-
adapter = adapters[i]
|
150
|
-
network = networks[i]
|
151
|
-
|
152
|
-
# Figure out the interface number by simple lookup
|
153
|
-
network[:interface] = adapter_to_interface[adapter[:adapter]]
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
def hostonly_config(args)
|
158
|
-
ip = args[0]
|
159
|
-
options = args[1] || {}
|
160
|
-
|
161
|
-
# Determine if we're dealing with a static IP or a DHCP-served IP.
|
162
|
-
type = ip == :dhcp ? :dhcp : :static
|
163
|
-
|
164
|
-
# Default IP is in the 20-bit private network block for DHCP based networks
|
165
|
-
ip = "172.28.128.1" if type == :dhcp
|
166
|
-
|
167
|
-
options = {
|
168
|
-
:type => type,
|
169
|
-
:ip => ip,
|
170
|
-
:netmask => "255.255.255.0",
|
171
|
-
:adapter => nil,
|
172
|
-
:mac => nil,
|
173
|
-
:name => nil,
|
174
|
-
:auto_config => true
|
175
|
-
}.merge(options)
|
176
|
-
|
177
|
-
# Verify that this hostonly network wouldn't conflict with any
|
178
|
-
# bridged interfaces
|
179
|
-
verify_no_bridge_collision(options)
|
180
|
-
|
181
|
-
# Get the network address and IP parts which are used for many
|
182
|
-
# default calculations
|
183
|
-
netaddr = network_address(options[:ip], options[:netmask])
|
184
|
-
ip_parts = netaddr.split(".").map { |i| i.to_i }
|
185
|
-
|
186
|
-
# Calculate the adapter IP, which we assume is the IP ".1" at the
|
187
|
-
# end usually.
|
188
|
-
adapter_ip = ip_parts.dup
|
189
|
-
adapter_ip[3] += 1
|
190
|
-
options[:adapter_ip] ||= adapter_ip.join(".")
|
191
|
-
|
192
|
-
if type == :dhcp
|
193
|
-
# Calculate the DHCP server IP, which is the network address
|
194
|
-
# with the final octet + 2. So "172.28.0.0" turns into "172.28.0.2"
|
195
|
-
dhcp_ip = ip_parts.dup
|
196
|
-
dhcp_ip[3] += 2
|
197
|
-
options[:dhcp_ip] ||= dhcp_ip.join(".")
|
198
|
-
|
199
|
-
# Calculate the lower and upper bound for the DHCP server
|
200
|
-
dhcp_lower = ip_parts.dup
|
201
|
-
dhcp_lower[3] += 3
|
202
|
-
options[:dhcp_lower] ||= dhcp_lower.join(".")
|
203
|
-
|
204
|
-
dhcp_upper = ip_parts.dup
|
205
|
-
dhcp_upper[3] = 254
|
206
|
-
options[:dhcp_upper] ||= dhcp_upper.join(".")
|
207
|
-
end
|
208
|
-
|
209
|
-
# Return the hostonly network configuration
|
210
|
-
return options
|
211
|
-
end
|
212
|
-
|
213
|
-
def hostonly_adapter(config)
|
214
|
-
@logger.debug("Searching for matching network: #{config[:ip]}")
|
215
|
-
interface = find_matching_hostonly_network(config)
|
216
|
-
|
217
|
-
if !interface
|
218
|
-
@logger.debug("Network not found. Creating if we can.")
|
219
|
-
|
220
|
-
# It is an error case if a specific name was given but the network
|
221
|
-
# doesn't exist.
|
222
|
-
if config[:name]
|
223
|
-
raise Errors::NetworkNotFound, :name => config[:name]
|
224
|
-
end
|
225
|
-
|
226
|
-
# Otherwise, we create a new network and put the net network
|
227
|
-
# in the list of available networks so other network definitions
|
228
|
-
# can use it!
|
229
|
-
interface = create_hostonly_network(config)
|
230
|
-
@logger.debug("Created network: #{interface[:name]}")
|
231
|
-
end
|
232
|
-
|
233
|
-
if config[:type] == :dhcp
|
234
|
-
# Check that if there is a DHCP server attached on our interface,
|
235
|
-
# then it is identical. Otherwise, we can't set it.
|
236
|
-
if interface[:dhcp]
|
237
|
-
valid = interface[:dhcp][:ip] == config[:dhcp_ip] &&
|
238
|
-
interface[:dhcp][:lower] == config[:dhcp_lower] &&
|
239
|
-
interface[:dhcp][:upper] == config[:dhcp_upper]
|
240
|
-
|
241
|
-
raise Errors::NetworkDHCPAlreadyAttached if !valid
|
242
|
-
|
243
|
-
@logger.debug("DHCP server already properly configured")
|
244
|
-
else
|
245
|
-
# Configure the DHCP server for the network.
|
246
|
-
@logger.debug("Creating a DHCP server...")
|
247
|
-
@env[:vm].driver.create_dhcp_server(interface[:name], config)
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
return {
|
252
|
-
:adapter => config[:adapter],
|
253
|
-
:type => :hostonly,
|
254
|
-
:hostonly => interface[:name],
|
255
|
-
:mac_address => config[:mac],
|
256
|
-
:nic_type => config[:nic_type]
|
257
|
-
}
|
258
|
-
end
|
259
|
-
|
260
|
-
def hostonly_network_config(config)
|
261
|
-
return {
|
262
|
-
:type => config[:type],
|
263
|
-
:ip => config[:ip],
|
264
|
-
:netmask => config[:netmask]
|
265
|
-
}
|
266
|
-
end
|
267
|
-
|
268
|
-
# Creates a new hostonly network that matches the network requested
|
269
|
-
# by the given host-only network configuration.
|
270
|
-
def create_hostonly_network(config)
|
271
|
-
# Create the options that are going to be used to create our
|
272
|
-
# new network.
|
273
|
-
options = config.dup
|
274
|
-
options[:ip] = options[:adapter_ip]
|
275
|
-
|
276
|
-
@env[:vm].driver.create_host_only_network(options)
|
277
|
-
end
|
278
|
-
|
279
|
-
# Finds a host only network that matches our configuration on VirtualBox.
|
280
|
-
# This will return nil if a matching network does not exist.
|
281
|
-
def find_matching_hostonly_network(config)
|
282
|
-
this_netaddr = network_address(config[:ip], config[:netmask])
|
283
|
-
|
284
|
-
@env[:vm].driver.read_host_only_interfaces.each do |interface|
|
285
|
-
if config[:name] && config[:name] == interface[:name]
|
286
|
-
return interface
|
287
|
-
elsif this_netaddr == network_address(interface[:ip], interface[:netmask])
|
288
|
-
return interface
|
289
|
-
end
|
290
|
-
end
|
291
|
-
|
292
|
-
nil
|
293
|
-
end
|
294
|
-
|
295
|
-
# Verifies that a host-only network subnet would not collide with
|
296
|
-
# a bridged networking interface.
|
297
|
-
#
|
298
|
-
# If the subnets overlap in any way then the host only network
|
299
|
-
# will not work because the routing tables will force the traffic
|
300
|
-
# onto the real interface rather than the virtualbox interface.
|
301
|
-
def verify_no_bridge_collision(options)
|
302
|
-
this_netaddr = network_address(options[:ip], options[:netmask])
|
303
|
-
|
304
|
-
@env[:vm].driver.read_bridged_interfaces.each do |interface|
|
305
|
-
that_netaddr = network_address(interface[:ip], interface[:netmask])
|
306
|
-
raise Errors::NetworkCollision if this_netaddr == that_netaddr && interface[:status] != "Down"
|
307
|
-
end
|
308
|
-
end
|
309
|
-
|
310
|
-
def bridged_config(args)
|
311
|
-
options = args[0] || {}
|
312
|
-
options = {} if !options.is_a?(Hash)
|
313
|
-
|
314
|
-
return {
|
315
|
-
:adapter => nil,
|
316
|
-
:mac => nil,
|
317
|
-
:bridge => nil,
|
318
|
-
:auto_config => true
|
319
|
-
}.merge(options)
|
320
|
-
end
|
321
|
-
|
322
|
-
def bridged_adapter(config)
|
323
|
-
# Find the bridged interfaces that are available
|
324
|
-
bridgedifs = @env[:vm].driver.read_bridged_interfaces
|
325
|
-
bridgedifs.delete_if { |interface| interface[:status] == "Down" }
|
326
|
-
|
327
|
-
# The name of the chosen bridge interface will be assigned to this
|
328
|
-
# variable.
|
329
|
-
chosen_bridge = nil
|
330
|
-
|
331
|
-
if config[:bridge]
|
332
|
-
@logger.debug("Bridge was directly specified in config, searching for: #{config[:bridge]}")
|
333
|
-
|
334
|
-
# Search for a matching bridged interface
|
335
|
-
bridgedifs.each do |interface|
|
336
|
-
if interface[:name].downcase == config[:bridge].downcase
|
337
|
-
@logger.debug("Specific bridge found as configured in the Vagrantfile. Using it.")
|
338
|
-
chosen_bridge = interface[:name]
|
339
|
-
break
|
340
|
-
end
|
341
|
-
end
|
342
|
-
|
343
|
-
# If one wasn't found, then we notify the user here.
|
344
|
-
if !chosen_bridge
|
345
|
-
@env[:ui].info I18n.t("vagrant.actions.vm.bridged_networking.specific_not_found",
|
346
|
-
:bridge => config[:bridge])
|
347
|
-
end
|
348
|
-
end
|
349
|
-
|
350
|
-
# If we still don't have a bridge chosen (this means that one wasn't
|
351
|
-
# specified in the Vagrantfile, or the bridge specified in the Vagrantfile
|
352
|
-
# wasn't found), then we fall back to the normal means of searchign for a
|
353
|
-
# bridged network.
|
354
|
-
if !chosen_bridge
|
355
|
-
if bridgedifs.length == 1
|
356
|
-
# One bridgable interface? Just use it.
|
357
|
-
chosen_bridge = bridgedifs[0][:name]
|
358
|
-
@logger.debug("Only one bridged interface available. Using it by default.")
|
359
|
-
else
|
360
|
-
# More than one bridgable interface requires a user decision, so
|
361
|
-
# show options to choose from.
|
362
|
-
@env[:ui].info I18n.t("vagrant.actions.vm.bridged_networking.available",
|
363
|
-
:prefix => false)
|
364
|
-
bridgedifs.each_index do |index|
|
365
|
-
interface = bridgedifs[index]
|
366
|
-
@env[:ui].info("#{index + 1}) #{interface[:name]}", :prefix => false)
|
367
|
-
end
|
368
|
-
|
369
|
-
# The range of valid choices
|
370
|
-
valid = Range.new(1, bridgedifs.length)
|
371
|
-
|
372
|
-
# The choice that the user has chosen as the bridging interface
|
373
|
-
choice = nil
|
374
|
-
while !valid.include?(choice)
|
375
|
-
choice = @env[:ui].ask("What interface should the network bridge to? ")
|
376
|
-
choice = choice.to_i
|
377
|
-
end
|
378
|
-
|
379
|
-
chosen_bridge = bridgedifs[choice - 1][:name]
|
380
|
-
end
|
381
|
-
end
|
382
|
-
|
383
|
-
@logger.info("Bridging adapter #{config[:adapter]} to #{chosen_bridge}")
|
384
|
-
|
385
|
-
# Given the choice we can now define the adapter we're using
|
386
|
-
return {
|
387
|
-
:adapter => config[:adapter],
|
388
|
-
:type => :bridged,
|
389
|
-
:bridge => chosen_bridge,
|
390
|
-
:mac_address => config[:mac],
|
391
|
-
:nic_type => config[:nic_type],
|
392
|
-
}
|
393
|
-
end
|
394
|
-
|
395
|
-
def bridged_network_config(config)
|
396
|
-
return {
|
397
|
-
:type => :dhcp
|
398
|
-
}
|
399
|
-
end
|
400
|
-
end
|
401
|
-
end
|
402
|
-
end
|
403
|
-
end
|
@@ -1,196 +0,0 @@
|
|
1
|
-
require 'digest/md5'
|
2
|
-
require 'fileutils'
|
3
|
-
require 'pathname'
|
4
|
-
|
5
|
-
require 'log4r'
|
6
|
-
|
7
|
-
module Vagrant
|
8
|
-
module Action
|
9
|
-
module VM
|
10
|
-
# Enables NFS based shared folders. `nfsd` must already be installed
|
11
|
-
# on the host machine, and NFS client must already be installed on
|
12
|
-
# the guest machine.
|
13
|
-
#
|
14
|
-
# This is a two part process:
|
15
|
-
#
|
16
|
-
# 1. Adds an entry to `/etc/exports` on the host machine using
|
17
|
-
# the host class to export the proper folder to the proper
|
18
|
-
# machine.
|
19
|
-
# 2. After boot, runs `mount` on the guest to mount the shared
|
20
|
-
# folder.
|
21
|
-
#
|
22
|
-
class NFS
|
23
|
-
def initialize(app,env)
|
24
|
-
@logger = Log4r::Logger.new("vagrant::action::vm::nfs")
|
25
|
-
@app = app
|
26
|
-
@env = env
|
27
|
-
|
28
|
-
verify_settings if nfs_enabled?
|
29
|
-
end
|
30
|
-
|
31
|
-
def call(env)
|
32
|
-
@env = env
|
33
|
-
|
34
|
-
extract_folders
|
35
|
-
|
36
|
-
if !folders.empty?
|
37
|
-
prepare_folders
|
38
|
-
export_folders
|
39
|
-
end
|
40
|
-
|
41
|
-
@app.call(env)
|
42
|
-
|
43
|
-
mount_folders if !folders.empty?
|
44
|
-
end
|
45
|
-
|
46
|
-
# Returns the folders which are to be synced via NFS.
|
47
|
-
def folders
|
48
|
-
@folders ||= {}
|
49
|
-
end
|
50
|
-
|
51
|
-
# Removes the NFS enabled shared folders from the configuration,
|
52
|
-
# so they will no longer be mounted by the actual shared folder
|
53
|
-
# task.
|
54
|
-
def extract_folders
|
55
|
-
# Load the NFS enabled shared folders
|
56
|
-
@folders = {}
|
57
|
-
@env[:vm].config.vm.shared_folders.each do |key, opts|
|
58
|
-
if opts[:nfs]
|
59
|
-
# Duplicate the options, set the hostpath, and set disabled on the original
|
60
|
-
# options so the ShareFolders middleware doesn't try to mount it.
|
61
|
-
folder = opts.dup
|
62
|
-
hostpath = Pathname.new(opts[:hostpath]).expand_path(@env[:root_path])
|
63
|
-
|
64
|
-
if !hostpath.directory? && opts[:create]
|
65
|
-
# Host path doesn't exist, so let's create it.
|
66
|
-
@logger.debug("Host path doesn't exist, creating: #{hostpath}")
|
67
|
-
|
68
|
-
begin
|
69
|
-
FileUtils.mkpath(hostpath)
|
70
|
-
rescue Errno::EACCES
|
71
|
-
raise Errors::SharedFolderCreateFailed, :path => hostpath.to_s
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
# Set the hostpath now that it exists.
|
76
|
-
folder[:hostpath] = hostpath.to_s
|
77
|
-
|
78
|
-
# Assign the folder to our instance variable for later use
|
79
|
-
@folders[key] = folder
|
80
|
-
|
81
|
-
# Disable the folder so that regular shared folders don't try to
|
82
|
-
# mount it.
|
83
|
-
opts[:disabled] = true
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
# Prepares the settings for the NFS folders, such as setting the
|
89
|
-
# options on the NFS folders.
|
90
|
-
def prepare_folders
|
91
|
-
@folders = @folders.inject({}) do |acc, data|
|
92
|
-
key, opts = data
|
93
|
-
opts[:map_uid] = prepare_permission(:uid, opts)
|
94
|
-
opts[:map_gid] = prepare_permission(:gid, opts)
|
95
|
-
opts[:nfs_version] ||= 3
|
96
|
-
|
97
|
-
# The poor man's UUID. An MD5 hash here is sufficient since
|
98
|
-
# we need a 32 character "uuid" to represent the filesystem
|
99
|
-
# of an export. Hashing the host path is safe because two of
|
100
|
-
# the same host path will hash to the same fsid.
|
101
|
-
opts[:uuid] = Digest::MD5.hexdigest(opts[:hostpath])
|
102
|
-
|
103
|
-
acc[key] = opts
|
104
|
-
acc
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
# Prepares the UID/GID settings for a single folder.
|
109
|
-
def prepare_permission(perm, opts)
|
110
|
-
key = "map_#{perm}".to_sym
|
111
|
-
return nil if opts.has_key?(key) && opts[key].nil?
|
112
|
-
|
113
|
-
# The options on the hash get priority, then the default
|
114
|
-
# values
|
115
|
-
value = opts.has_key?(key) ? opts[key] : @env[:vm].config.nfs.send(key)
|
116
|
-
return value if value != :auto
|
117
|
-
|
118
|
-
# Get UID/GID from folder if we've made it this far
|
119
|
-
# (value == :auto)
|
120
|
-
stat = File.stat(opts[:hostpath])
|
121
|
-
return stat.send(perm)
|
122
|
-
end
|
123
|
-
|
124
|
-
# Uses the host class to export the folders via NFS. This typically
|
125
|
-
# involves adding a line to `/etc/exports` for this VM, but it is
|
126
|
-
# up to the host class to define the specific behavior.
|
127
|
-
def export_folders
|
128
|
-
@env[:ui].info I18n.t("vagrant.actions.vm.nfs.exporting")
|
129
|
-
@env[:host].nfs_export(@env[:vm].uuid, guest_ip, folders)
|
130
|
-
end
|
131
|
-
|
132
|
-
# Uses the system class to mount the NFS folders.
|
133
|
-
def mount_folders
|
134
|
-
@env[:ui].info I18n.t("vagrant.actions.vm.nfs.mounting")
|
135
|
-
|
136
|
-
# Only mount the folders which have a guest path specified
|
137
|
-
mount_folders = {}
|
138
|
-
folders.each do |name, opts|
|
139
|
-
if opts[:guestpath]
|
140
|
-
mount_folders[name] = opts.dup
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
@env[:vm].guest.mount_nfs(host_ip, mount_folders)
|
145
|
-
end
|
146
|
-
|
147
|
-
# Returns the IP address of the first host only network adapter
|
148
|
-
#
|
149
|
-
# @return [String]
|
150
|
-
def host_ip
|
151
|
-
@env[:vm].driver.read_network_interfaces.each do |adapter, opts|
|
152
|
-
if opts[:type] == :hostonly
|
153
|
-
@env[:vm].driver.read_host_only_interfaces.each do |interface|
|
154
|
-
if interface[:name] == opts[:hostonly]
|
155
|
-
return interface[:ip]
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
nil
|
162
|
-
end
|
163
|
-
|
164
|
-
# Returns the IP address of the guest by looking at the first
|
165
|
-
# enabled host only network.
|
166
|
-
#
|
167
|
-
# @return [String]
|
168
|
-
def guest_ip
|
169
|
-
@env[:vm].config.vm.networks.each do |type, args|
|
170
|
-
if type == :hostonly && args[0].is_a?(String)
|
171
|
-
return args[0]
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
nil
|
176
|
-
end
|
177
|
-
|
178
|
-
# Checks if there are any NFS enabled shared folders.
|
179
|
-
def nfs_enabled?
|
180
|
-
@env[:vm].config.vm.shared_folders.each do |key, opts|
|
181
|
-
return true if opts[:nfs]
|
182
|
-
end
|
183
|
-
|
184
|
-
false
|
185
|
-
end
|
186
|
-
|
187
|
-
# Verifies that the host is set and supports NFS.
|
188
|
-
def verify_settings
|
189
|
-
raise Errors::NFSHostRequired if @env[:host].nil?
|
190
|
-
raise Errors::NFSNotSupported if !@env[:host].nfs?
|
191
|
-
raise Errors::NFSNoHostNetwork if !guest_ip
|
192
|
-
end
|
193
|
-
end
|
194
|
-
end
|
195
|
-
end
|
196
|
-
end
|