vagrant-fixed-ssh 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +46 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +723 -0
- data/Gemfile +3 -0
- data/LICENSE +22 -0
- data/README.md +121 -0
- data/Rakefile +18 -0
- data/bin/vagrant +60 -0
- data/config/default.rb +30 -0
- data/contrib/README.md +12 -0
- data/contrib/emacs/vagrant.el +8 -0
- data/contrib/vim/vagrantfile.vim +9 -0
- data/keys/README.md +17 -0
- data/keys/vagrant +27 -0
- data/keys/vagrant.pub +1 -0
- data/lib/vagrant.rb +197 -0
- data/lib/vagrant/action.rb +63 -0
- data/lib/vagrant/action/box/destroy.rb +25 -0
- data/lib/vagrant/action/box/download.rb +84 -0
- data/lib/vagrant/action/box/package.rb +19 -0
- data/lib/vagrant/action/box/unpackage.rb +61 -0
- data/lib/vagrant/action/box/verify.rb +23 -0
- data/lib/vagrant/action/builder.rb +128 -0
- data/lib/vagrant/action/builtin.rb +171 -0
- data/lib/vagrant/action/env/set.rb +21 -0
- data/lib/vagrant/action/environment.rb +12 -0
- data/lib/vagrant/action/general/check_virtualbox.rb +28 -0
- data/lib/vagrant/action/general/package.rb +101 -0
- data/lib/vagrant/action/general/validate.rb +18 -0
- data/lib/vagrant/action/runner.rb +53 -0
- data/lib/vagrant/action/vm/boot.rb +53 -0
- data/lib/vagrant/action/vm/check_accessible.rb +23 -0
- data/lib/vagrant/action/vm/check_box.rb +33 -0
- data/lib/vagrant/action/vm/check_guest_additions.rb +38 -0
- data/lib/vagrant/action/vm/check_port_collisions.rb +89 -0
- data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
- data/lib/vagrant/action/vm/clear_forwarded_ports.rb +18 -0
- data/lib/vagrant/action/vm/clear_network_interfaces.rb +31 -0
- data/lib/vagrant/action/vm/clear_shared_folders.rb +18 -0
- data/lib/vagrant/action/vm/customize.rb +36 -0
- data/lib/vagrant/action/vm/default_name.rb +22 -0
- data/lib/vagrant/action/vm/destroy.rb +19 -0
- data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +20 -0
- data/lib/vagrant/action/vm/discard_state.rb +22 -0
- data/lib/vagrant/action/vm/export.rb +57 -0
- data/lib/vagrant/action/vm/forward_ports.rb +92 -0
- data/lib/vagrant/action/vm/halt.rb +32 -0
- data/lib/vagrant/action/vm/host_name.rb +21 -0
- data/lib/vagrant/action/vm/import.rb +48 -0
- data/lib/vagrant/action/vm/match_mac_address.rb +21 -0
- data/lib/vagrant/action/vm/network.rb +403 -0
- data/lib/vagrant/action/vm/nfs.rb +196 -0
- data/lib/vagrant/action/vm/package.rb +23 -0
- data/lib/vagrant/action/vm/package_vagrantfile.rb +36 -0
- data/lib/vagrant/action/vm/provision.rb +61 -0
- data/lib/vagrant/action/vm/provisioner_cleanup.rb +26 -0
- data/lib/vagrant/action/vm/prune_nfs_exports.rb +20 -0
- data/lib/vagrant/action/vm/resume.rb +20 -0
- data/lib/vagrant/action/vm/sane_defaults.rb +78 -0
- data/lib/vagrant/action/vm/setup_package_files.rb +54 -0
- data/lib/vagrant/action/vm/share_folders.rb +114 -0
- data/lib/vagrant/action/vm/suspend.rb +20 -0
- data/lib/vagrant/action/warden.rb +92 -0
- data/lib/vagrant/box.rb +44 -0
- data/lib/vagrant/box_collection.rb +58 -0
- data/lib/vagrant/cli.rb +76 -0
- data/lib/vagrant/command.rb +24 -0
- data/lib/vagrant/command/base.rb +167 -0
- data/lib/vagrant/command/box.rb +58 -0
- data/lib/vagrant/command/box_add.rb +37 -0
- data/lib/vagrant/command/box_list.rb +28 -0
- data/lib/vagrant/command/box_remove.rb +27 -0
- data/lib/vagrant/command/box_repackage.rb +27 -0
- data/lib/vagrant/command/destroy.rb +64 -0
- data/lib/vagrant/command/gem.rb +39 -0
- data/lib/vagrant/command/halt.rb +39 -0
- data/lib/vagrant/command/init.rb +40 -0
- data/lib/vagrant/command/package.rb +75 -0
- data/lib/vagrant/command/provision.rb +40 -0
- data/lib/vagrant/command/reload.rb +39 -0
- data/lib/vagrant/command/resume.rb +33 -0
- data/lib/vagrant/command/ssh.rb +90 -0
- data/lib/vagrant/command/ssh_config.rb +51 -0
- data/lib/vagrant/command/start_mixins.rb +26 -0
- data/lib/vagrant/command/status.rb +36 -0
- data/lib/vagrant/command/suspend.rb +33 -0
- data/lib/vagrant/command/up.rb +40 -0
- data/lib/vagrant/communication.rb +7 -0
- data/lib/vagrant/communication/base.rb +56 -0
- data/lib/vagrant/communication/ssh.rb +230 -0
- data/lib/vagrant/config.rb +49 -0
- data/lib/vagrant/config/base.rb +82 -0
- data/lib/vagrant/config/container.rb +37 -0
- data/lib/vagrant/config/error_recorder.rb +19 -0
- data/lib/vagrant/config/loader.rb +127 -0
- data/lib/vagrant/config/nfs.rb +8 -0
- data/lib/vagrant/config/package.rb +7 -0
- data/lib/vagrant/config/ssh.rb +27 -0
- data/lib/vagrant/config/top.rb +72 -0
- data/lib/vagrant/config/vagrant.rb +14 -0
- data/lib/vagrant/config/vm.rb +168 -0
- data/lib/vagrant/config/vm/provisioner.rb +52 -0
- data/lib/vagrant/config/vm/sub_vm.rb +17 -0
- data/lib/vagrant/data_store.rb +92 -0
- data/lib/vagrant/downloaders.rb +7 -0
- data/lib/vagrant/downloaders/base.rb +25 -0
- data/lib/vagrant/downloaders/file.rb +22 -0
- data/lib/vagrant/downloaders/http.rb +97 -0
- data/lib/vagrant/driver.rb +8 -0
- data/lib/vagrant/driver/virtualbox.rb +134 -0
- data/lib/vagrant/driver/virtualbox_4_0.rb +459 -0
- data/lib/vagrant/driver/virtualbox_4_1.rb +459 -0
- data/lib/vagrant/driver/virtualbox_4_2.rb +606 -0
- data/lib/vagrant/driver/virtualbox_base.rb +326 -0
- data/lib/vagrant/environment.rb +522 -0
- data/lib/vagrant/errors.rb +445 -0
- data/lib/vagrant/guest.rb +18 -0
- data/lib/vagrant/guest/arch.rb +56 -0
- data/lib/vagrant/guest/base.rb +99 -0
- data/lib/vagrant/guest/debian.rb +64 -0
- data/lib/vagrant/guest/fedora.rb +66 -0
- data/lib/vagrant/guest/freebsd.rb +86 -0
- data/lib/vagrant/guest/gentoo.rb +46 -0
- data/lib/vagrant/guest/linux.rb +118 -0
- data/lib/vagrant/guest/linux/config.rb +19 -0
- data/lib/vagrant/guest/linux/error.rb +9 -0
- data/lib/vagrant/guest/openbsd.rb +20 -0
- data/lib/vagrant/guest/redhat.rb +67 -0
- data/lib/vagrant/guest/solaris.rb +118 -0
- data/lib/vagrant/guest/suse.rb +17 -0
- data/lib/vagrant/guest/ubuntu.rb +23 -0
- data/lib/vagrant/hosts.rb +37 -0
- data/lib/vagrant/hosts/arch.rb +55 -0
- data/lib/vagrant/hosts/base.rb +66 -0
- data/lib/vagrant/hosts/bsd.rb +97 -0
- data/lib/vagrant/hosts/fedora.rb +47 -0
- data/lib/vagrant/hosts/freebsd.rb +41 -0
- data/lib/vagrant/hosts/gentoo.rb +20 -0
- data/lib/vagrant/hosts/linux.rb +94 -0
- data/lib/vagrant/hosts/opensuse.rb +30 -0
- data/lib/vagrant/hosts/windows.rb +16 -0
- data/lib/vagrant/plugin.rb +81 -0
- data/lib/vagrant/provisioners.rb +12 -0
- data/lib/vagrant/provisioners/base.rb +44 -0
- data/lib/vagrant/provisioners/chef.rb +168 -0
- data/lib/vagrant/provisioners/chef_client.rb +132 -0
- data/lib/vagrant/provisioners/chef_solo.rb +234 -0
- data/lib/vagrant/provisioners/puppet.rb +176 -0
- data/lib/vagrant/provisioners/puppet_server.rb +78 -0
- data/lib/vagrant/provisioners/shell.rb +103 -0
- data/lib/vagrant/registry.rb +52 -0
- data/lib/vagrant/ssh.rb +126 -0
- data/lib/vagrant/test_helpers.rb +154 -0
- data/lib/vagrant/ui.rb +168 -0
- data/lib/vagrant/util.rb +12 -0
- data/lib/vagrant/util/ansi_escape_code_remover.rb +34 -0
- data/lib/vagrant/util/busy.rb +59 -0
- data/lib/vagrant/util/counter.rb +24 -0
- data/lib/vagrant/util/file_checksum.rb +38 -0
- data/lib/vagrant/util/file_mode.rb +12 -0
- data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
- data/lib/vagrant/util/is_port_open.rb +38 -0
- data/lib/vagrant/util/line_ending_helpers.rb +14 -0
- data/lib/vagrant/util/network_ip.rb +28 -0
- data/lib/vagrant/util/platform.rb +68 -0
- data/lib/vagrant/util/retryable.rb +25 -0
- data/lib/vagrant/util/safe_exec.rb +36 -0
- data/lib/vagrant/util/safe_puts.rb +31 -0
- data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
- data/lib/vagrant/util/subprocess.rb +247 -0
- data/lib/vagrant/util/template_renderer.rb +83 -0
- data/lib/vagrant/version.rb +6 -0
- data/lib/vagrant/vm.rb +195 -0
- data/tasks/acceptance.rake +113 -0
- data/tasks/bundler.rake +3 -0
- data/tasks/test.rake +20 -0
- data/templates/commands/init/Vagrantfile.erb +99 -0
- data/templates/commands/ssh_config/config.erb +15 -0
- data/templates/config/validation_failed.erb +7 -0
- data/templates/guests/arch/network_dhcp.erb +7 -0
- data/templates/guests/arch/network_static.erb +7 -0
- data/templates/guests/debian/network_dhcp.erb +6 -0
- data/templates/guests/debian/network_static.erb +7 -0
- data/templates/guests/fedora/network_dhcp.erb +6 -0
- data/templates/guests/fedora/network_static.erb +13 -0
- data/templates/guests/freebsd/network_dhcp.erb +3 -0
- data/templates/guests/freebsd/network_static.erb +3 -0
- data/templates/guests/gentoo/network_dhcp.erb +4 -0
- data/templates/guests/gentoo/network_static.erb +4 -0
- data/templates/guests/redhat/network_dhcp.erb +6 -0
- data/templates/guests/redhat/network_static.erb +7 -0
- data/templates/locales/en.yml +759 -0
- data/templates/nfs/exports.erb +5 -0
- data/templates/nfs/exports_freebsd.erb +5 -0
- data/templates/nfs/exports_linux.erb +5 -0
- data/templates/package_Vagrantfile.erb +11 -0
- data/templates/provisioners/chef_client/client.erb +32 -0
- data/templates/provisioners/chef_solo/solo.erb +25 -0
- data/test/acceptance/base.rb +48 -0
- data/test/acceptance/box_test.rb +99 -0
- data/test/acceptance/destroy_test.rb +37 -0
- data/test/acceptance/halt_test.rb +72 -0
- data/test/acceptance/init_test.rb +33 -0
- data/test/acceptance/networking/host_only_test.rb +37 -0
- data/test/acceptance/networking/port_forward_test.rb +125 -0
- data/test/acceptance/package_test.rb +46 -0
- data/test/acceptance/provisioning/basic_test.rb +61 -0
- data/test/acceptance/provisioning/chef_solo_test.rb +37 -0
- data/test/acceptance/provisioning/shell_test.rb +53 -0
- data/test/acceptance/resume_test.rb +17 -0
- data/test/acceptance/shared_folders_test.rb +84 -0
- data/test/acceptance/skeletons/chef_solo_basic/README.md +3 -0
- data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +5 -0
- data/test/acceptance/skeletons/chef_solo_json/README.md +3 -0
- data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +6 -0
- data/test/acceptance/skeletons/provisioner_multi/README.md +3 -0
- data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +5 -0
- data/test/acceptance/ssh_test.rb +46 -0
- data/test/acceptance/support/config.rb +42 -0
- data/test/acceptance/support/isolated_environment.rb +117 -0
- data/test/acceptance/support/matchers/have_color.rb +9 -0
- data/test/acceptance/support/matchers/match_output.rb +14 -0
- data/test/acceptance/support/matchers/succeed.rb +14 -0
- data/test/acceptance/support/network_tests.rb +29 -0
- data/test/acceptance/support/output.rb +95 -0
- data/test/acceptance/support/shared/base_context.rb +72 -0
- data/test/acceptance/support/shared/command_examples.rb +33 -0
- data/test/acceptance/support/virtualbox.rb +36 -0
- data/test/acceptance/suspend_test.rb +56 -0
- data/test/acceptance/up_basic_test.rb +33 -0
- data/test/acceptance/up_with_box_url.rb +40 -0
- data/test/acceptance/vagrant_test.rb +47 -0
- data/test/acceptance/version_test.rb +15 -0
- data/test/buildbot/README.md +72 -0
- 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 +24 -0
- data/test/buildbot/buildbot_config/config/master.py +24 -0
- data/test/buildbot/buildbot_config/config/slave.py +22 -0
- data/test/buildbot/buildbot_config/master/__init__.py +6 -0
- data/test/buildbot/buildbot_config/master/builders.py +78 -0
- data/test/buildbot/buildbot_config/master/buildsteps.py +100 -0
- data/test/buildbot/buildbot_config/master/change_sources.py +8 -0
- data/test/buildbot/buildbot_config/master/schedulers.py +32 -0
- data/test/buildbot/buildbot_config/master/slaves.py +60 -0
- data/test/buildbot/buildbot_config/master/status.py +52 -0
- data/test/buildbot/master/Makefile.sample +28 -0
- data/test/buildbot/master/buildbot.tac +36 -0
- data/test/buildbot/master/master.cfg +67 -0
- data/test/buildbot/master/public_html/bg_gradient.jpg +0 -0
- data/test/buildbot/master/public_html/default.css +545 -0
- data/test/buildbot/master/public_html/favicon.ico +0 -0
- data/test/buildbot/master/public_html/robots.txt +10 -0
- data/test/buildbot/master/public_html/static/css/bootstrap-1.4.0.min.css +356 -0
- data/test/buildbot/master/public_html/static/css/prettify.css +97 -0
- data/test/buildbot/master/public_html/static/css/syntax.css +60 -0
- data/test/buildbot/master/public_html/static/css/vagrant.base.css +205 -0
- 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 +80 -0
- data/test/buildbot/master/public_html/static/js/jquery-1.7.min.js +4 -0
- data/test/buildbot/master/templates/authfail.html +9 -0
- data/test/buildbot/master/templates/build.html +205 -0
- data/test/buildbot/master/templates/builder.html +118 -0
- data/test/buildbot/master/templates/builders.html +33 -0
- data/test/buildbot/master/templates/buildslave.html +72 -0
- data/test/buildbot/master/templates/buildslaves.html +70 -0
- data/test/buildbot/master/templates/change.html +15 -0
- data/test/buildbot/master/templates/layouts/base.html +58 -0
- data/test/buildbot/master/templates/macros/box.html +37 -0
- data/test/buildbot/master/templates/macros/build_line.html +50 -0
- data/test/buildbot/master/templates/macros/change.html +81 -0
- data/test/buildbot/master/templates/macros/forms.html +300 -0
- data/test/buildbot/master/templates/root.html +42 -0
- data/test/buildbot/master/templates/waterfall.html +53 -0
- data/test/buildbot/requirements.txt +4 -0
- data/test/buildbot/scripts/deploy.sh +38 -0
- data/test/buildbot/scripts/setup.sh +107 -0
- data/test/buildbot/slave/buildbot.tac +43 -0
- data/test/buildbot/slave/info/admin +1 -0
- data/test/buildbot/slave/info/host +1 -0
- 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 +41 -0
- data/test/buildbot/vendor/choices-0.4.0.tar.gz +0 -0
- data/test/config/acceptance_boxes.yml +7 -0
- data/test/support/isolated_environment.rb +46 -0
- data/test/support/tempdir.rb +34 -0
- data/test/unit/base.rb +21 -0
- data/test/unit/support/isolated_environment.rb +47 -0
- data/test/unit/support/shared/base_context.rb +30 -0
- data/test/unit/vagrant/action/builder_test.rb +156 -0
- data/test/unit/vagrant/action/environment_test.rb +16 -0
- data/test/unit/vagrant/action/runner_test.rb +65 -0
- data/test/unit/vagrant/action/warden_test.rb +92 -0
- data/test/unit/vagrant/box_collection_test.rb +56 -0
- data/test/unit/vagrant/box_test.rb +34 -0
- data/test/unit/vagrant/command/base_test.rb +150 -0
- data/test/unit/vagrant/config/base_test.rb +48 -0
- data/test/unit/vagrant/config/loader_test.rb +79 -0
- data/test/unit/vagrant/config/ssh_test.rb +17 -0
- data/test/unit/vagrant/config/top_test.rb +69 -0
- data/test/unit/vagrant/config/vm_test.rb +71 -0
- data/test/unit/vagrant/config_test.rb +27 -0
- data/test/unit/vagrant/data_store_test.rb +79 -0
- data/test/unit/vagrant/downloaders/base_test.rb +18 -0
- data/test/unit/vagrant/downloaders/file_test.rb +75 -0
- data/test/unit/vagrant/downloaders/http_test.rb +19 -0
- data/test/unit/vagrant/environment_test.rb +220 -0
- data/test/unit/vagrant/hosts_test.rb +36 -0
- data/test/unit/vagrant/registry_test.rb +74 -0
- data/test/unit/vagrant/util/ansi_escape_code_remover_test.rb +16 -0
- data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
- data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +38 -0
- data/test/unit/vagrant/util/is_port_open_test.rb +53 -0
- data/test/unit/vagrant/util/line_endings_helper_test.rb +16 -0
- data/test/unit/vagrant/util/network_ip_test.rb +17 -0
- data/test/unit/vagrant/util/retryable_test.rb +106 -0
- data/test/unit/vagrant_test.rb +27 -0
- data/test/unit_legacy/locales/en.yml +8 -0
- data/test/unit_legacy/test_helper.rb +32 -0
- data/test/unit_legacy/vagrant/action/box/destroy_test.rb +18 -0
- data/test/unit_legacy/vagrant/action/box/download_test.rb +125 -0
- data/test/unit_legacy/vagrant/action/box/package_test.rb +25 -0
- data/test/unit_legacy/vagrant/action/box/unpackage_test.rb +84 -0
- data/test/unit_legacy/vagrant/action/box/verify_test.rb +30 -0
- data/test/unit_legacy/vagrant/action/env/set_test.rb +24 -0
- data/test/unit_legacy/vagrant/action/general/package_test.rb +268 -0
- data/test/unit_legacy/vagrant/action/general/validate_test.rb +31 -0
- data/test/unit_legacy/vagrant/action/vm/boot_test.rb +66 -0
- data/test/unit_legacy/vagrant/action/vm/check_accessible_test.rb +61 -0
- data/test/unit_legacy/vagrant/action/vm/check_box_test.rb +61 -0
- data/test/unit_legacy/vagrant/action/vm/check_guest_additions_test.rb +9 -0
- data/test/unit_legacy/vagrant/action/vm/clean_machine_folder_test.rb +84 -0
- data/test/unit_legacy/vagrant/action/vm/clear_forwarded_ports_test.rb +52 -0
- data/test/unit_legacy/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
- data/test/unit_legacy/vagrant/action/vm/clear_shared_folders_test.rb +40 -0
- data/test/unit_legacy/vagrant/action/vm/customize_test.rb +37 -0
- data/test/unit_legacy/vagrant/action/vm/destroy_test.rb +25 -0
- data/test/unit_legacy/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +49 -0
- data/test/unit_legacy/vagrant/action/vm/discard_state_test.rb +45 -0
- data/test/unit_legacy/vagrant/action/vm/export_test.rb +107 -0
- data/test/unit_legacy/vagrant/action/vm/forward_ports_helpers_test.rb +77 -0
- data/test/unit_legacy/vagrant/action/vm/forward_ports_test.rb +197 -0
- data/test/unit_legacy/vagrant/action/vm/halt_test.rb +79 -0
- data/test/unit_legacy/vagrant/action/vm/host_name_test.rb +36 -0
- data/test/unit_legacy/vagrant/action/vm/import_test.rb +66 -0
- data/test/unit_legacy/vagrant/action/vm/match_mac_address_test.rb +40 -0
- data/test/unit_legacy/vagrant/action/vm/modify_test.rb +38 -0
- data/test/unit_legacy/vagrant/action/vm/network_test.rb +286 -0
- data/test/unit_legacy/vagrant/action/vm/nfs_helpers_test.rb +26 -0
- data/test/unit_legacy/vagrant/action/vm/nfs_test.rb +260 -0
- data/test/unit_legacy/vagrant/action/vm/package_test.rb +25 -0
- data/test/unit_legacy/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
- data/test/unit_legacy/vagrant/action/vm/provision_test.rb +65 -0
- data/test/unit_legacy/vagrant/action/vm/provisioner_cleanup_test.rb +56 -0
- data/test/unit_legacy/vagrant/action/vm/resume_test.rb +35 -0
- data/test/unit_legacy/vagrant/action/vm/share_folders_test.rb +144 -0
- data/test/unit_legacy/vagrant/action/vm/suspend_test.rb +35 -0
- data/test/unit_legacy/vagrant/action_test.rb +89 -0
- data/test/unit_legacy/vagrant/box_collection_test.rb +45 -0
- data/test/unit_legacy/vagrant/box_test.rb +74 -0
- data/test/unit_legacy/vagrant/cli_test.rb +35 -0
- data/test/unit_legacy/vagrant/command/base_test.rb +23 -0
- data/test/unit_legacy/vagrant/command/group_base_test.rb +15 -0
- data/test/unit_legacy/vagrant/command/helpers_test.rb +88 -0
- data/test/unit_legacy/vagrant/command/init_test.rb +10 -0
- data/test/unit_legacy/vagrant/command/package_test.rb +27 -0
- data/test/unit_legacy/vagrant/config/base_test.rb +52 -0
- data/test/unit_legacy/vagrant/config/error_recorder_test.rb +18 -0
- data/test/unit_legacy/vagrant/config/ssh_test.rb +12 -0
- data/test/unit_legacy/vagrant/config/vagrant_test.rb +35 -0
- data/test/unit_legacy/vagrant/config/vm/provisioner_test.rb +92 -0
- data/test/unit_legacy/vagrant/config/vm_test.rb +47 -0
- data/test/unit_legacy/vagrant/config_test.rb +148 -0
- data/test/unit_legacy/vagrant/downloaders/http_test.rb +93 -0
- data/test/unit_legacy/vagrant/environment_test.rb +539 -0
- data/test/unit_legacy/vagrant/errors_test.rb +42 -0
- data/test/unit_legacy/vagrant/hosts/base_test.rb +46 -0
- data/test/unit_legacy/vagrant/hosts/bsd_test.rb +53 -0
- data/test/unit_legacy/vagrant/hosts/linux_test.rb +54 -0
- data/test/unit_legacy/vagrant/plugin_test.rb +9 -0
- data/test/unit_legacy/vagrant/provisioners/base_test.rb +63 -0
- data/test/unit_legacy/vagrant/provisioners/chef_client_test.rb +190 -0
- data/test/unit_legacy/vagrant/provisioners/chef_solo_test.rb +115 -0
- data/test/unit_legacy/vagrant/provisioners/chef_test.rb +209 -0
- data/test/unit_legacy/vagrant/provisioners/puppet_server_test.rb +68 -0
- data/test/unit_legacy/vagrant/provisioners/puppet_test.rb +182 -0
- data/test/unit_legacy/vagrant/provisioners/shell_test.rb +79 -0
- data/test/unit_legacy/vagrant/ssh/session_test.rb +40 -0
- data/test/unit_legacy/vagrant/ssh_test.rb +304 -0
- data/test/unit_legacy/vagrant/systems/base_test.rb +18 -0
- data/test/unit_legacy/vagrant/systems/linux_test.rb +104 -0
- data/test/unit_legacy/vagrant/util/busy_test.rb +106 -0
- data/test/unit_legacy/vagrant/util/counter_test.rb +29 -0
- data/test/unit_legacy/vagrant/util/platform_test.rb +18 -0
- data/test/unit_legacy/vagrant/util/stacked_proc_runner_test.rb +43 -0
- data/test/unit_legacy/vagrant/util/template_renderer_test.rb +145 -0
- data/test/unit_legacy/vagrant/vm_test.rb +300 -0
- data/vagrant-fixed-ssh.gemspec +70 -0
- metadata +712 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Guest
|
3
|
+
class Linux < Vagrant::Guest::Base
|
4
|
+
# A custom config class which will be made accessible via `config.linux`
|
5
|
+
# This is not necessary for all system implementers, of course. However,
|
6
|
+
# generally, Vagrant tries to make almost every aspect of its execution
|
7
|
+
# configurable, and this assists that goal.
|
8
|
+
class LinuxConfig < Vagrant::Config::Base
|
9
|
+
attr_accessor :halt_timeout
|
10
|
+
attr_accessor :halt_check_interval
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@halt_timeout = 30
|
14
|
+
@halt_check_interval = 1
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Guest
|
3
|
+
class OpenBSD < Base
|
4
|
+
def halt
|
5
|
+
vm.channel.sudo("shutdown -p -h now")
|
6
|
+
|
7
|
+
# Wait until the VM's state is actually powered off. If this doesn't
|
8
|
+
# occur within a reasonable amount of time then simply return which
|
9
|
+
# will cause Vagrant to force kill the machine.
|
10
|
+
count = 0
|
11
|
+
while vm.state != :poweroff
|
12
|
+
count += 1
|
13
|
+
|
14
|
+
return if count >= 30
|
15
|
+
sleep 1
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'set'
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
require 'vagrant/util/template_renderer'
|
5
|
+
|
6
|
+
module Vagrant
|
7
|
+
module Guest
|
8
|
+
class Redhat < Linux
|
9
|
+
# Make the TemplateRenderer top-level
|
10
|
+
include Vagrant::Util
|
11
|
+
|
12
|
+
def configure_networks(networks)
|
13
|
+
# Accumulate the configurations to add to the interfaces file as
|
14
|
+
# well as what interfaces we're actually configuring since we use that
|
15
|
+
# later.
|
16
|
+
interfaces = Set.new
|
17
|
+
networks.each do |network|
|
18
|
+
interfaces.add(network[:interface])
|
19
|
+
|
20
|
+
# Remove any previous vagrant configuration in this network interface's
|
21
|
+
# configuration files.
|
22
|
+
vm.channel.sudo("touch #{network_scripts_dir}/ifcfg-eth#{network[:interface]}")
|
23
|
+
vm.channel.sudo("sed -e '/^#VAGRANT-BEGIN/,/^#VAGRANT-END/ d' #{network_scripts_dir}/ifcfg-eth#{network[:interface]} > /tmp/vagrant-ifcfg-eth#{network[:interface]}")
|
24
|
+
vm.channel.sudo("cat /tmp/vagrant-ifcfg-eth#{network[:interface]} > #{network_scripts_dir}/ifcfg-eth#{network[:interface]}")
|
25
|
+
|
26
|
+
# Render and upload the network entry file to a deterministic
|
27
|
+
# temporary location.
|
28
|
+
entry = TemplateRenderer.render("guests/redhat/network_#{network[:type]}",
|
29
|
+
:options => network)
|
30
|
+
|
31
|
+
temp = Tempfile.new("vagrant")
|
32
|
+
temp.binmode
|
33
|
+
temp.write(entry)
|
34
|
+
temp.close
|
35
|
+
|
36
|
+
vm.channel.upload(temp.path, "/tmp/vagrant-network-entry_#{network[:interface]}")
|
37
|
+
end
|
38
|
+
|
39
|
+
# Bring down all the interfaces we're reconfiguring. By bringing down
|
40
|
+
# each specifically, we avoid reconfiguring eth0 (the NAT interface) so
|
41
|
+
# SSH never dies.
|
42
|
+
interfaces.each do |interface|
|
43
|
+
vm.channel.sudo("/sbin/ifdown eth#{interface} 2> /dev/null", :error_check => false)
|
44
|
+
vm.channel.sudo("cat /tmp/vagrant-network-entry_#{interface} >> #{network_scripts_dir}/ifcfg-eth#{interface}")
|
45
|
+
vm.channel.sudo("/sbin/ifup eth#{interface} 2> /dev/null")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# The path to the directory with the network configuration scripts.
|
50
|
+
# This is pulled out into its own directory since there are other
|
51
|
+
# operating systems (SuSE) which behave similarly but with a different
|
52
|
+
# path to the network scripts.
|
53
|
+
def network_scripts_dir
|
54
|
+
'/etc/sysconfig/network-scripts'
|
55
|
+
end
|
56
|
+
|
57
|
+
def change_host_name(name)
|
58
|
+
# Only do this if the hostname is not already set
|
59
|
+
if !vm.channel.test("sudo hostname | grep '#{name}'")
|
60
|
+
vm.channel.sudo("sed -i 's/\\(HOSTNAME=\\).*/\\1#{name}/' /etc/sysconfig/network")
|
61
|
+
vm.channel.sudo("hostname #{name}")
|
62
|
+
vm.channel.sudo("sed -i 's@^\\(127[.]0[.]0[.]1[[:space:]]\\+\\)@\\1#{name} #{name.split('.')[0]} @' /etc/hosts")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Guest
|
3
|
+
# A general Vagrant system implementation for "solaris".
|
4
|
+
#
|
5
|
+
# Contributed by Blake Irvin <b.irvin@modcloth.com>
|
6
|
+
class Solaris < Base
|
7
|
+
# A custom config class which will be made accessible via `config.solaris`
|
8
|
+
# This is not necessary for all system implementers, of course. However,
|
9
|
+
# generally, Vagrant tries to make almost every aspect of its execution
|
10
|
+
# configurable, and this assists that goal.
|
11
|
+
class SolarisConfig < Vagrant::Config::Base
|
12
|
+
attr_accessor :halt_timeout
|
13
|
+
attr_accessor :halt_check_interval
|
14
|
+
# This sets the command to use to execute items as a superuser. sudo is default
|
15
|
+
attr_accessor :suexec_cmd
|
16
|
+
attr_accessor :device
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@halt_timeout = 30
|
20
|
+
@halt_check_interval = 1
|
21
|
+
@suexec_cmd = 'sudo'
|
22
|
+
@device = "e1000g"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Here for whenever it may be used.
|
27
|
+
class SolarisError < Errors::VagrantError
|
28
|
+
error_namespace("vagrant.guest.solaris")
|
29
|
+
end
|
30
|
+
|
31
|
+
def configure_networks(networks)
|
32
|
+
networks.each do |network|
|
33
|
+
device = "#{vm.config.solaris.device}#{network[:interface]}"
|
34
|
+
su_cmd = vm.config.solaris.suexec_cmd
|
35
|
+
ifconfig_cmd = "#{su_cmd} /sbin/ifconfig #{device}"
|
36
|
+
|
37
|
+
vm.channel.execute("#{ifconfig_cmd} plumb")
|
38
|
+
|
39
|
+
if network[:type].to_sym == :static
|
40
|
+
vm.channel.execute("#{ifconfig_cmd} inet #{network[:ip]} netmask #{network[:netmask]}")
|
41
|
+
vm.channel.execute("#{ifconfig_cmd} up")
|
42
|
+
vm.channel.execute("#{su_cmd} sh -c \"echo '#{network[:ip]}' > /etc/hostname.#{device}\"")
|
43
|
+
elsif network[:type].to_sym == :dhcp
|
44
|
+
vm.channel.execute("#{ifconfig_cmd} dhcp start")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def change_host_name(name)
|
50
|
+
su_cmd = vm.config.solaris.suexec_cmd
|
51
|
+
|
52
|
+
# Only do this if the hostname is not already set
|
53
|
+
if !vm.channel.test("#{su_cmd} hostname | grep '#{name}'")
|
54
|
+
vm.channel.execute("#{su_cmd} sh -c \"echo '#{name}' > /etc/nodename\"")
|
55
|
+
vm.channel.execute("#{su_cmd} uname -S #{name}")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# There should be an exception raised if the line
|
60
|
+
#
|
61
|
+
# vagrant::::profiles=Primary Administrator
|
62
|
+
#
|
63
|
+
# does not exist in /etc/user_attr. TODO
|
64
|
+
def halt
|
65
|
+
# Wait until the VM's state is actually powered off. If this doesn't
|
66
|
+
# occur within a reasonable amount of time (15 seconds by default),
|
67
|
+
# then simply return and allow Vagrant to kill the machine.
|
68
|
+
count = 0
|
69
|
+
last_error = nil
|
70
|
+
while vm.state != :poweroff
|
71
|
+
begin
|
72
|
+
vm.channel.execute("#{vm.config.solaris.suexec_cmd} /usr/sbin/poweroff")
|
73
|
+
rescue IOError => e
|
74
|
+
# Save the last error; if it's not shutdown in a reasonable amount
|
75
|
+
# of attempts we will re-raise the error so it's not hidden for
|
76
|
+
# all time
|
77
|
+
last_error = e
|
78
|
+
end
|
79
|
+
|
80
|
+
count += 1
|
81
|
+
if count >= vm.config.solaris.halt_timeout
|
82
|
+
# Check for last error and re-raise it
|
83
|
+
if last_error != nil
|
84
|
+
raise last_error
|
85
|
+
else
|
86
|
+
# Otherwise, just return
|
87
|
+
return
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# Still opportunities remaining; sleep and loop
|
92
|
+
sleep vm.config.solaris.halt_check_interval
|
93
|
+
end # while
|
94
|
+
end
|
95
|
+
|
96
|
+
def mount_shared_folder(name, guestpath, options)
|
97
|
+
# These are just far easier to use than the full options syntax
|
98
|
+
owner = options[:owner]
|
99
|
+
group = options[:group]
|
100
|
+
|
101
|
+
# Create the shared folder
|
102
|
+
vm.channel.execute("#{vm.config.solaris.suexec_cmd} mkdir -p #{guestpath}")
|
103
|
+
|
104
|
+
# We have to use this `id` command instead of `/usr/bin/id` since this
|
105
|
+
# one accepts the "-u" and "-g" flags.
|
106
|
+
id_cmd = "/usr/xpg4/bin/id"
|
107
|
+
|
108
|
+
# Mount the folder with the proper owner/group
|
109
|
+
mount_options = "-o uid=`#{id_cmd} -u #{owner}`,gid=`#{id_cmd} -g #{group}`"
|
110
|
+
mount_options += ",#{options[:extra]}" if options[:extra]
|
111
|
+
vm.channel.execute("#{vm.config.solaris.suexec_cmd} /sbin/mount -F vboxfs #{mount_options} #{name} #{guestpath}")
|
112
|
+
|
113
|
+
# chown the folder to the proper owner/group
|
114
|
+
vm.channel.execute("#{vm.config.solaris.suexec_cmd} chown `#{id_cmd} -u #{owner}`:`#{id_cmd} -g #{group}` #{guestpath}")
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Guest
|
3
|
+
class Suse < Redhat
|
4
|
+
def network_scripts_dir
|
5
|
+
'/etc/sysconfig/network/'
|
6
|
+
end
|
7
|
+
def change_host_name(name)
|
8
|
+
# Only do this if the hostname is not already set
|
9
|
+
if !vm.channel.test("sudo hostname | grep '#{name}'")
|
10
|
+
vm.channel.sudo("echo #{name} > /etc/HOSTNAME")
|
11
|
+
vm.channel.sudo("hostname #{name}")
|
12
|
+
vm.channel.sudo("sed -i 's@^\\(127[.]0[.]0[.]1[[:space:]]\\+\\)@\\1#{name} #{name.split('.')[0]} @' /etc/hosts")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'vagrant/guest/debian'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Guest
|
5
|
+
class Ubuntu < Debian
|
6
|
+
def mount_shared_folder(name, guestpath, options)
|
7
|
+
# Mount it like normal
|
8
|
+
super
|
9
|
+
|
10
|
+
# Emit an upstart event if upstart is available
|
11
|
+
vm.channel.sudo("[ -x /sbin/initctl ] && /sbin/initctl emit vagrant-mounted MOUNTPOINT=#{guestpath}")
|
12
|
+
end
|
13
|
+
|
14
|
+
def change_host_name(name)
|
15
|
+
if !vm.channel.test("sudo hostname | grep '^#{name}$'")
|
16
|
+
vm.channel.sudo("sed -i 's/.*$/#{name}/' /etc/hostname")
|
17
|
+
vm.channel.sudo("sed -i 's@^\\(127[.]0[.]1[.]1[[:space:]]\\+\\)@\\1#{name} #{name.split('.')[0]} @' /etc/hosts")
|
18
|
+
vm.channel.sudo("service hostname start")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'log4r'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Hosts
|
5
|
+
autoload :Base, 'vagrant/hosts/base'
|
6
|
+
autoload :Arch, 'vagrant/hosts/arch'
|
7
|
+
autoload :BSD, 'vagrant/hosts/bsd'
|
8
|
+
autoload :FreeBSD, 'vagrant/hosts/freebsd'
|
9
|
+
autoload :Fedora, 'vagrant/hosts/fedora'
|
10
|
+
autoload :OpenSUSE, 'vagrant/hosts/opensuse'
|
11
|
+
autoload :Gentoo, 'vagrant/hosts/gentoo'
|
12
|
+
autoload :Linux, 'vagrant/hosts/linux'
|
13
|
+
autoload :Windows, 'vagrant/hosts/windows'
|
14
|
+
|
15
|
+
# This method detects the correct host based on the `match?` methods
|
16
|
+
# implemented in the registered hosts.
|
17
|
+
def self.detect(registry)
|
18
|
+
logger = Log4r::Logger.new("vagrant::hosts")
|
19
|
+
|
20
|
+
# Sort the hosts by their precedence
|
21
|
+
host_klasses = registry.to_hash.values
|
22
|
+
host_klasses = host_klasses.sort_by { |a| a.precedence }.reverse
|
23
|
+
logger.debug("Host path search classes: #{host_klasses.inspect}")
|
24
|
+
|
25
|
+
# Test for matches and return the host class that matches
|
26
|
+
host_klasses.each do |klass|
|
27
|
+
if klass.match?
|
28
|
+
logger.info("Host class: #{klass}")
|
29
|
+
return klass
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# No matches found...
|
34
|
+
return nil
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Hosts
|
3
|
+
class Arch < Linux
|
4
|
+
def self.match?
|
5
|
+
File.exist?("/etc/os-release") && File.read("/etc/os-release") =~ /arch linux/i
|
6
|
+
end
|
7
|
+
|
8
|
+
# Normal, mid-range precedence.
|
9
|
+
def self.precedence
|
10
|
+
5
|
11
|
+
end
|
12
|
+
|
13
|
+
def nfs_export(id, ip, folders)
|
14
|
+
output = TemplateRenderer.render('nfs/exports_linux',
|
15
|
+
:uuid => id,
|
16
|
+
:ip => ip,
|
17
|
+
:folders => folders)
|
18
|
+
|
19
|
+
@ui.info I18n.t("vagrant.hosts.arch.nfs_export.prepare")
|
20
|
+
sleep 0.5
|
21
|
+
|
22
|
+
nfs_cleanup(id)
|
23
|
+
|
24
|
+
output.split("\n").each do |line|
|
25
|
+
# This should only ask for administrative permission once, even
|
26
|
+
# though its executed in multiple subshells.
|
27
|
+
system(%Q[sudo su root -c "echo '#{line}' >> /etc/exports"])
|
28
|
+
end
|
29
|
+
|
30
|
+
if systemd?
|
31
|
+
# Call start to be nice. This will be a no-op if things are
|
32
|
+
# already running. Then use exportfs to pick up the changes we
|
33
|
+
# just made.
|
34
|
+
system("sudo systemctl start nfsd.service rpc-idmapd.service rpc-mountd.service rpcbind.service")
|
35
|
+
system("sudo exportfs -r")
|
36
|
+
else
|
37
|
+
# The restarting of services when we might not need to can be
|
38
|
+
# considered evil, but this will be obviated by systemd soon
|
39
|
+
# enough anyway.
|
40
|
+
system("sudo /etc/rc.d/rpcbind restart")
|
41
|
+
system("sudo /etc/rc.d/nfs-common restart")
|
42
|
+
system("sudo /etc/rc.d/nfs-server restart")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
protected
|
47
|
+
|
48
|
+
# This tests to see if systemd is used on the system. This is used
|
49
|
+
# in newer versions of Arch, and requires a change in behavior.
|
50
|
+
def systemd?
|
51
|
+
Kernel.system("which systemctl &>/dev/null")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Hosts
|
3
|
+
# Interface for classes which house behavior that is specific
|
4
|
+
# to the host OS that is running Vagrant.
|
5
|
+
#
|
6
|
+
# By default, Vagrant will attempt to choose the best option
|
7
|
+
# for your machine, but the host may also be explicitly set
|
8
|
+
# via the `config.vagrant.host` parameter.
|
9
|
+
class Base
|
10
|
+
# This returns true/false depending on if the current running system
|
11
|
+
# matches the host class.
|
12
|
+
#
|
13
|
+
# @return [Boolean]
|
14
|
+
def self.match?
|
15
|
+
nil
|
16
|
+
end
|
17
|
+
|
18
|
+
# The precedence of the host when checking for matches. This is to
|
19
|
+
# allow certain host such as generic OS's ("Linux", "BSD", etc.)
|
20
|
+
# to be specified last.
|
21
|
+
#
|
22
|
+
# The hosts with the higher numbers will be checked first.
|
23
|
+
#
|
24
|
+
# If you're implementing a basic host, you can probably ignore this.
|
25
|
+
def self.precedence
|
26
|
+
5
|
27
|
+
end
|
28
|
+
|
29
|
+
# Initializes a new host class.
|
30
|
+
#
|
31
|
+
# The only required parameter is a UI object so that the host
|
32
|
+
# objects have some way to communicate with the outside world.
|
33
|
+
#
|
34
|
+
# @param [UI] ui UI for the hosts to output to.
|
35
|
+
def initialize(ui)
|
36
|
+
@ui = ui
|
37
|
+
end
|
38
|
+
|
39
|
+
# Returns true of false denoting whether or not this host supports
|
40
|
+
# NFS shared folder setup. This method ideally should verify that
|
41
|
+
# NFS is installed.
|
42
|
+
#
|
43
|
+
# @return [Boolean]
|
44
|
+
def nfs?
|
45
|
+
false
|
46
|
+
end
|
47
|
+
|
48
|
+
# Exports the given hash of folders via NFS.
|
49
|
+
#
|
50
|
+
# @param [String] id A unique ID that is guaranteed to be unique to
|
51
|
+
# match these sets of folders.
|
52
|
+
# @param [String] ip IP of the guest machine.
|
53
|
+
# @param [Hash] folders Shared folders to sync.
|
54
|
+
def nfs_export(id, ip, folders)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Prunes any NFS exports made by Vagrant which aren't in the set
|
58
|
+
# of valid ids given.
|
59
|
+
#
|
60
|
+
# @param [Array<String>] valid_ids Valid IDs that should not be
|
61
|
+
# pruned.
|
62
|
+
def nfs_prune(valid_ids)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'log4r'
|
2
|
+
|
3
|
+
require 'vagrant/util/platform'
|
4
|
+
|
5
|
+
module Vagrant
|
6
|
+
module Hosts
|
7
|
+
# Represents a BSD host, such as FreeBSD and Darwin (Mac OS X).
|
8
|
+
class BSD < Base
|
9
|
+
include Util
|
10
|
+
include Util::Retryable
|
11
|
+
|
12
|
+
def self.match?
|
13
|
+
Util::Platform.darwin? || Util::Platform.bsd?
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.precedence
|
17
|
+
# Set a lower precedence because this is a generic OS. We
|
18
|
+
# want specific distros to match first.
|
19
|
+
2
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(*args)
|
23
|
+
super
|
24
|
+
|
25
|
+
@logger = Log4r::Logger.new("vagrant::hosts::bsd")
|
26
|
+
@nfs_restart_command = "sudo nfsd restart"
|
27
|
+
@nfs_exports_template = "nfs/exports"
|
28
|
+
end
|
29
|
+
|
30
|
+
def nfs?
|
31
|
+
retryable(:tries => 10, :on => TypeError) do
|
32
|
+
system("which nfsd > /dev/null 2>&1")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def nfs_export(id, ip, folders)
|
37
|
+
output = TemplateRenderer.render(@nfs_exports_template,
|
38
|
+
:uuid => id,
|
39
|
+
:ip => ip,
|
40
|
+
:folders => folders)
|
41
|
+
|
42
|
+
# The sleep ensures that the output is truly flushed before any `sudo`
|
43
|
+
# commands are issued.
|
44
|
+
@ui.info I18n.t("vagrant.hosts.bsd.nfs_export")
|
45
|
+
sleep 0.5
|
46
|
+
|
47
|
+
# First, clean up the old entry
|
48
|
+
nfs_cleanup(id)
|
49
|
+
|
50
|
+
# Output the rendered template into the exports
|
51
|
+
output.split("\n").each do |line|
|
52
|
+
line = line.gsub('"', '\"')
|
53
|
+
system(%Q[sudo su root -c "echo '#{line}' >> /etc/exports"])
|
54
|
+
end
|
55
|
+
|
56
|
+
# We run restart here instead of "update" just in case nfsd
|
57
|
+
# is not starting
|
58
|
+
system(@nfs_restart_command)
|
59
|
+
end
|
60
|
+
|
61
|
+
def nfs_prune(valid_ids)
|
62
|
+
return if !File.exist?("/etc/exports")
|
63
|
+
|
64
|
+
@logger.info("Pruning invalid NFS entries...")
|
65
|
+
|
66
|
+
output = false
|
67
|
+
|
68
|
+
File.read("/etc/exports").lines.each do |line|
|
69
|
+
if line =~ /^# VAGRANT-BEGIN: (.+?)$/
|
70
|
+
if valid_ids.include?($1.to_s)
|
71
|
+
@logger.debug("Valid ID: #{$1.to_s}")
|
72
|
+
else
|
73
|
+
if !output
|
74
|
+
# We want to warn the user but we only want to output once
|
75
|
+
@ui.info I18n.t("vagrant.hosts.bsd.nfs_prune")
|
76
|
+
output = true
|
77
|
+
end
|
78
|
+
|
79
|
+
@logger.info("Invalid ID, pruning: #{$1.to_s}")
|
80
|
+
nfs_cleanup($1.to_s)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
protected
|
87
|
+
|
88
|
+
def nfs_cleanup(id)
|
89
|
+
return if !File.exist?("/etc/exports")
|
90
|
+
|
91
|
+
# Use sed to just strip out the block of code which was inserted
|
92
|
+
# by Vagrant, and restart NFS.
|
93
|
+
system("sudo sed -e '/^# VAGRANT-BEGIN: #{id}/,/^# VAGRANT-END: #{id}/ d' -ibak /etc/exports")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|