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,56 @@
|
|
1
|
+
require 'set'
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
require 'vagrant/util/template_renderer'
|
5
|
+
|
6
|
+
module Vagrant
|
7
|
+
module Guest
|
8
|
+
class Arch < Linux
|
9
|
+
# Make the TemplateRenderer top-level
|
10
|
+
include Vagrant::Util
|
11
|
+
|
12
|
+
def change_host_name(name)
|
13
|
+
# Only do this if the hostname is not already set
|
14
|
+
if !vm.channel.test("sudo hostname | grep '#{name}'")
|
15
|
+
vm.channel.sudo("sed -i 's/\\(HOSTNAME=\\).*/\\1#{name}/' /etc/rc.conf")
|
16
|
+
vm.channel.sudo("hostname #{name}")
|
17
|
+
vm.channel.sudo("sed -i 's@^\\(127[.]0[.]0[.]1[[:space:]]\\+\\)@\\1#{name} @' /etc/hosts")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def configure_networks(networks)
|
22
|
+
# Remove previous Vagrant-managed network interfaces
|
23
|
+
vm.channel.sudo("sed -e '/^#VAGRANT-BEGIN/,/^#VAGRANT-END/ d' /etc/rc.conf > /tmp/vagrant-network-interfaces")
|
24
|
+
vm.channel.sudo("cat /tmp/vagrant-network-interfaces > /etc/rc.conf")
|
25
|
+
|
26
|
+
# Configure the network interfaces
|
27
|
+
interfaces = Set.new
|
28
|
+
entries = []
|
29
|
+
networks.each do |network|
|
30
|
+
interfaces.add(network[:interface])
|
31
|
+
entry = TemplateRenderer.render("guests/arch/network_#{network[:type]}",
|
32
|
+
:options => network)
|
33
|
+
|
34
|
+
entries << entry
|
35
|
+
end
|
36
|
+
|
37
|
+
# Perform the careful dance necessary to reconfigure
|
38
|
+
# the network interfaces
|
39
|
+
temp = Tempfile.new("vagrant")
|
40
|
+
temp.binmode
|
41
|
+
temp.write(entries.join("\n"))
|
42
|
+
temp.close
|
43
|
+
|
44
|
+
vm.channel.upload(temp.path, "/tmp/vagrant-network-entry")
|
45
|
+
|
46
|
+
# Reconfigure the network interfaces
|
47
|
+
vm.channel.sudo("cat /tmp/vagrant-network-entry >> /etc/rc.conf")
|
48
|
+
vm.channel.sudo("/etc/rc.d/network restart")
|
49
|
+
|
50
|
+
interfaces.each do |interface|
|
51
|
+
vm.channel.sudo("dhcpcd -k eth#{interface} && dhcpcd eth#{interface} && sleep 3")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Guest
|
3
|
+
# The base class for a "system." A system represents an installed
|
4
|
+
# operating system on a given box. There are some portions of
|
5
|
+
# Vagrant which are fairly OS-specific (such as mounting shared
|
6
|
+
# folders) and while the number is few, this abstraction allows
|
7
|
+
# more obscure operating systems to be installed without having
|
8
|
+
# to directly modify Vagrant internals.
|
9
|
+
#
|
10
|
+
# Subclasses of the system base class are expected to implement
|
11
|
+
# all the methods. These methods are described in the comments
|
12
|
+
# above their definition.
|
13
|
+
#
|
14
|
+
# **This is by no means a complete specification. The methods
|
15
|
+
# required by systems can and will change at any time. Any
|
16
|
+
# changes will be noted on release notes.**
|
17
|
+
class Base
|
18
|
+
class BaseError < Errors::VagrantError
|
19
|
+
error_namespace("vagrant.guest.base")
|
20
|
+
end
|
21
|
+
|
22
|
+
include Vagrant::Util
|
23
|
+
|
24
|
+
# The VM which this system is tied to.
|
25
|
+
attr_reader :vm
|
26
|
+
|
27
|
+
# Initializes the system. Any subclasses MUST make sure this
|
28
|
+
# method is called on the parent. Therefore, if a subclass overrides
|
29
|
+
# `initialize`, then you must call `super`.
|
30
|
+
def initialize(vm)
|
31
|
+
@vm = vm
|
32
|
+
end
|
33
|
+
|
34
|
+
# This method is automatically called when the system is available (when
|
35
|
+
# Vagrant can successfully SSH into the machine) to give the system a chance
|
36
|
+
# to determine the distro and return a distro-specific system.
|
37
|
+
#
|
38
|
+
# **Warning:** If a return value which subclasses from {Base} is
|
39
|
+
# returned, Vagrant will use it as the new system instance for the
|
40
|
+
# class.
|
41
|
+
def distro_dispatch; end
|
42
|
+
|
43
|
+
# Halt the machine. This method should gracefully shut down the
|
44
|
+
# operating system. This method will cause `vagrant halt` and associated
|
45
|
+
# commands to _block_, meaning that if the machine doesn't halt
|
46
|
+
# in a reasonable amount of time, this method should just return.
|
47
|
+
#
|
48
|
+
# If when this method returns, the machine's state isn't "powered_off,"
|
49
|
+
# Vagrant will proceed to forcefully shut the machine down.
|
50
|
+
def halt
|
51
|
+
raise BaseError, :_key => :unsupported_halt
|
52
|
+
end
|
53
|
+
|
54
|
+
# Mounts a shared folder.
|
55
|
+
#
|
56
|
+
# This method should create, mount, and properly set permissions
|
57
|
+
# on the shared folder. This method should also properly
|
58
|
+
# adhere to any configuration values such as `shared_folder_uid`
|
59
|
+
# on `config.vm`.
|
60
|
+
#
|
61
|
+
# @param [String] name The name of the shared folder.
|
62
|
+
# @param [String] guestpath The path on the machine which the user
|
63
|
+
# wants the folder mounted.
|
64
|
+
# @param [Hash] options Additional options for the shared folder
|
65
|
+
# which can be honored.
|
66
|
+
def mount_shared_folder(name, guestpath, options)
|
67
|
+
raise BaseError, :_key => :unsupported_shared_folder
|
68
|
+
end
|
69
|
+
|
70
|
+
# Mounts a shared folder via NFS. This assumes that the exports
|
71
|
+
# via the host are already done.
|
72
|
+
def mount_nfs(ip, folders)
|
73
|
+
raise BaseError, :_key => :unsupported_nfs
|
74
|
+
end
|
75
|
+
|
76
|
+
# Configures the given list of networks on the virtual machine.
|
77
|
+
#
|
78
|
+
# The networks parameter will be an array of hashes where the hashes
|
79
|
+
# represent the configuration of a network interface. The structure
|
80
|
+
# of the hash will be roughly the following:
|
81
|
+
#
|
82
|
+
# {
|
83
|
+
# :type => :static,
|
84
|
+
# :ip => "192.168.33.10",
|
85
|
+
# :netmask => "255.255.255.0",
|
86
|
+
# :interface => 1
|
87
|
+
# }
|
88
|
+
#
|
89
|
+
def configure_networks(networks)
|
90
|
+
raise BaseError, :_key => :unsupported_configure_networks
|
91
|
+
end
|
92
|
+
|
93
|
+
# Called to change the hostname of the virtual machine.
|
94
|
+
def change_host_name(name)
|
95
|
+
raise BaseError, :_key => :unsupported_host_name
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'set'
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
require 'vagrant/util/template_renderer'
|
5
|
+
|
6
|
+
module Vagrant
|
7
|
+
module Guest
|
8
|
+
class Debian < Linux
|
9
|
+
# Make the TemplateRenderer top-level
|
10
|
+
include Vagrant::Util
|
11
|
+
|
12
|
+
def configure_networks(networks)
|
13
|
+
# First, remove any previous network modifications
|
14
|
+
# from the interface file.
|
15
|
+
vm.channel.sudo("sed -e '/^#VAGRANT-BEGIN/,/^#VAGRANT-END/ d' /etc/network/interfaces > /tmp/vagrant-network-interfaces")
|
16
|
+
vm.channel.sudo("su -c 'cat /tmp/vagrant-network-interfaces > /etc/network/interfaces'")
|
17
|
+
|
18
|
+
# Accumulate the configurations to add to the interfaces file as
|
19
|
+
# well as what interfaces we're actually configuring since we use that
|
20
|
+
# later.
|
21
|
+
interfaces = Set.new
|
22
|
+
entries = []
|
23
|
+
networks.each do |network|
|
24
|
+
interfaces.add(network[:interface])
|
25
|
+
entry = TemplateRenderer.render("guests/debian/network_#{network[:type]}",
|
26
|
+
:options => network)
|
27
|
+
|
28
|
+
entries << entry
|
29
|
+
end
|
30
|
+
|
31
|
+
# Perform the careful dance necessary to reconfigure
|
32
|
+
# the network interfaces
|
33
|
+
temp = Tempfile.new("vagrant")
|
34
|
+
temp.binmode
|
35
|
+
temp.write(entries.join("\n"))
|
36
|
+
temp.close
|
37
|
+
|
38
|
+
vm.channel.upload(temp.path, "/tmp/vagrant-network-entry")
|
39
|
+
|
40
|
+
# Bring down all the interfaces we're reconfiguring. By bringing down
|
41
|
+
# each specifically, we avoid reconfiguring eth0 (the NAT interface) so
|
42
|
+
# SSH never dies.
|
43
|
+
interfaces.each do |interface|
|
44
|
+
vm.channel.sudo("/sbin/ifdown eth#{interface} 2> /dev/null")
|
45
|
+
end
|
46
|
+
|
47
|
+
vm.channel.sudo("cat /tmp/vagrant-network-entry >> /etc/network/interfaces")
|
48
|
+
|
49
|
+
# Bring back up each network interface, reconfigured
|
50
|
+
interfaces.each do |interface|
|
51
|
+
vm.channel.sudo("/sbin/ifup eth#{interface}")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def change_host_name(name)
|
56
|
+
if !vm.channel.test("hostname --fqdn | grep '^#{name}$' || hostname --short | grep '^#{name}$'")
|
57
|
+
vm.channel.sudo("sed -r -i 's/^(127[.]0[.]1[.]1[[:space:]]+).*$/\\1#{name} #{name.split('.')[0]}/' /etc/hosts")
|
58
|
+
vm.channel.sudo("sed -i 's/.*$/#{name.split('.')[0]}/' /etc/hostname")
|
59
|
+
vm.channel.sudo("hostname -F /etc/hostname")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'set'
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
require 'vagrant/util/template_renderer'
|
5
|
+
|
6
|
+
module Vagrant
|
7
|
+
module Guest
|
8
|
+
class Fedora < 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 well
|
14
|
+
# as what interfaces we're actually configuring since we use that later.
|
15
|
+
interfaces = Set.new
|
16
|
+
networks.each do |network|
|
17
|
+
interfaces.add(network[:interface])
|
18
|
+
|
19
|
+
# Remove any previous vagrant configuration in this network
|
20
|
+
# interface's configuration files.
|
21
|
+
vm.channel.sudo("touch #{network_scripts_dir}/ifcfg-p7p#{network[:interface]}")
|
22
|
+
vm.channel.sudo("sed -e '/^#VAGRANT-BEGIN/,/^#VAGRANT-END/ d' #{network_scripts_dir}/ifcfg-p7p#{network[:interface]} > /tmp/vagrant-ifcfg-p7p#{network[:interface]}")
|
23
|
+
vm.channel.sudo("cat /tmp/vagrant-ifcfg-p7p#{network[:interface]} > #{network_scripts_dir}/ifcfg-p7p#{network[:interface]}")
|
24
|
+
|
25
|
+
# Render and upload the network entry file to a deterministic
|
26
|
+
# temporary location.
|
27
|
+
entry = TemplateRenderer.render("guests/fedora/network_#{network[:type]}",
|
28
|
+
:options => network)
|
29
|
+
|
30
|
+
temp = Tempfile.new("vagrant")
|
31
|
+
temp.binmode
|
32
|
+
temp.write(entry)
|
33
|
+
temp.close
|
34
|
+
|
35
|
+
vm.channel.upload(temp.path, "/tmp/vagrant-network-entry_#{network[:interface]}")
|
36
|
+
end
|
37
|
+
|
38
|
+
# Bring down all the interfaces we're reconfiguring. By bringing down
|
39
|
+
# each specifically, we avoid reconfiguring p7p (the NAT interface) so
|
40
|
+
# SSH never dies.
|
41
|
+
interfaces.each do |interface|
|
42
|
+
vm.channel.sudo("/sbin/ifdown p7p#{interface} 2> /dev/null", :error_check => false)
|
43
|
+
vm.channel.sudo("cat /tmp/vagrant-network-entry_#{interface} >> #{network_scripts_dir}/ifcfg-p7p#{interface}")
|
44
|
+
vm.channel.sudo("/sbin/ifup p7p#{interface} 2> /dev/null")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# The path to the directory with the network configuration scripts.
|
49
|
+
# This is pulled out into its own directory since there are other
|
50
|
+
# operating systems (SuSE) which behave similarly but with a different
|
51
|
+
# path to the network scripts.
|
52
|
+
def network_scripts_dir
|
53
|
+
'/etc/sysconfig/network-scripts'
|
54
|
+
end
|
55
|
+
|
56
|
+
def change_host_name(name)
|
57
|
+
# Only do this if the hostname is not already set
|
58
|
+
if !vm.channel.test("sudo hostname | grep '#{name}'")
|
59
|
+
vm.channel.sudo("sed -i 's/\\(HOSTNAME=\\).*/\\1#{name}/' /etc/sysconfig/network")
|
60
|
+
vm.channel.sudo("hostname #{name}")
|
61
|
+
vm.channel.sudo("sed -i 's@^\\(127[.]0[.]0[.]1[[:space:]]\\+\\)@\\1#{name} #{name.split('.')[0]} @' /etc/hosts")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'vagrant/util/template_renderer'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Guest
|
5
|
+
# A general Vagrant system implementation for "freebsd".
|
6
|
+
#
|
7
|
+
# Contributed by Kenneth Vestergaard <kvs@binarysolutions.dk>
|
8
|
+
class FreeBSD < Base
|
9
|
+
# A custom config class which will be made accessible via `config.freebsd`
|
10
|
+
# This is not necessary for all system implementers, of course. However,
|
11
|
+
# generally, Vagrant tries to make almost every aspect of its execution
|
12
|
+
# configurable, and this assists that goal.
|
13
|
+
class FreeBSDConfig < Vagrant::Config::Base
|
14
|
+
attr_accessor :halt_timeout
|
15
|
+
attr_accessor :halt_check_interval
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
@halt_timeout = 30
|
19
|
+
@halt_check_interval = 1
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Here for whenever it may be used.
|
24
|
+
class FreeBSDError < Errors::VagrantError
|
25
|
+
error_namespace("vagrant.guest.freebsd")
|
26
|
+
end
|
27
|
+
|
28
|
+
def halt
|
29
|
+
vm.channel.sudo("shutdown -p now")
|
30
|
+
|
31
|
+
# Wait until the VM's state is actually powered off. If this doesn't
|
32
|
+
# occur within a reasonable amount of time (15 seconds by default),
|
33
|
+
# then simply return and allow Vagrant to kill the machine.
|
34
|
+
count = 0
|
35
|
+
while vm.state != :poweroff
|
36
|
+
count += 1
|
37
|
+
|
38
|
+
return if count >= vm.config.freebsd.halt_timeout
|
39
|
+
sleep vm.config.freebsd.halt_check_interval
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# TODO: vboxsf is currently unsupported in FreeBSD, if you are able to
|
44
|
+
# help out with this project, please contact vbox@FreeBSD.org
|
45
|
+
#
|
46
|
+
# See: http://wiki.freebsd.org/VirtualBox/ToDo
|
47
|
+
# def mount_shared_folder(ssh, name, guestpath)
|
48
|
+
# ssh.exec!("sudo mkdir -p #{guestpath}")
|
49
|
+
# # Using a custom mount method here; could use improvement.
|
50
|
+
# ssh.exec!("sudo mount -t vboxfs v-root #{guestpath}")
|
51
|
+
# ssh.exec!("sudo chown #{vm.config.ssh.username} #{guestpath}")
|
52
|
+
# end
|
53
|
+
|
54
|
+
def mount_nfs(ip, folders)
|
55
|
+
folders.each do |name, opts|
|
56
|
+
vm.channel.sudo("mkdir -p #{opts[:guestpath]}")
|
57
|
+
vm.channel.sudo("mount #{ip}:#{opts[:hostpath]} #{opts[:guestpath]}")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def configure_networks(networks)
|
62
|
+
# Remove any previous network additions to the configuration file.
|
63
|
+
vm.channel.sudo("sed -i '' -e '/^#VAGRANT-BEGIN/,/^#VAGRANT-END/ d' /etc/rc.conf")
|
64
|
+
|
65
|
+
networks.each do |network|
|
66
|
+
entry = TemplateRenderer.render("guests/freebsd/network_#{network[:type]}",
|
67
|
+
:options => network)
|
68
|
+
vm.channel.upload(StringIO.new(entry), "/tmp/vagrant-network-entry")
|
69
|
+
vm.channel.sudo("su -m root -c 'cat /tmp/vagrant-network-entry >> /etc/rc.conf'")
|
70
|
+
if network[:type].to_sym == :static
|
71
|
+
vm.channel.sudo("ifconfig em#{network[:interface]} inet #{network[:ip]} netmask #{network[:netmask]}")
|
72
|
+
elsif network[:type].to_sym == :dhcp
|
73
|
+
vm.channel.sudo("dhclient em#{network[:interface]}")
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def change_host_name(name)
|
79
|
+
if !vm.channel.test("hostname -f | grep '^#{name}$' || hostname -s | grep '^#{name}$'")
|
80
|
+
vm.channel.sudo("sed -i '' 's/^hostname=.*$/hostname=#{name}/' /etc/rc.conf")
|
81
|
+
vm.channel.sudo("hostname #{name}")
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
|
3
|
+
require 'vagrant/util/template_renderer'
|
4
|
+
|
5
|
+
module Vagrant
|
6
|
+
module Guest
|
7
|
+
class Gentoo < Linux
|
8
|
+
# Make the TemplateRenderer top-level
|
9
|
+
include Vagrant::Util
|
10
|
+
|
11
|
+
def configure_networks(networks)
|
12
|
+
# Remove any previous host only network additions to the interface file
|
13
|
+
vm.channel.sudo("sed -e '/^#VAGRANT-BEGIN/,/^#VAGRANT-END/ d' /etc/conf.d/net > /tmp/vagrant-network-interfaces")
|
14
|
+
vm.channel.sudo("cat /tmp/vagrant-network-interfaces > /etc/conf.d/net")
|
15
|
+
|
16
|
+
# Configure each network interface
|
17
|
+
networks.each do |network|
|
18
|
+
entry = TemplateRenderer.render("guests/gentoo/network_#{network[:type]}",
|
19
|
+
:options => network)
|
20
|
+
|
21
|
+
# Upload the entry to a temporary location
|
22
|
+
temp = Tempfile.new("vagrant")
|
23
|
+
temp.binmode
|
24
|
+
temp.write(entry)
|
25
|
+
temp.close
|
26
|
+
|
27
|
+
vm.channel.upload(temp.path, "/tmp/vagrant-network-entry")
|
28
|
+
|
29
|
+
# Configure the interface
|
30
|
+
vm.channel.sudo("ln -fs /etc/init.d/net.lo /etc/init.d/net.eth#{network[:interface]}")
|
31
|
+
vm.channel.sudo("/etc/init.d/net.eth#{network[:interface]} stop 2> /dev/null")
|
32
|
+
vm.channel.sudo("cat /tmp/vagrant-network-entry >> /etc/conf.d/net")
|
33
|
+
vm.channel.sudo("/etc/init.d/net.eth#{network[:interface]} start")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def change_host_name(name)
|
38
|
+
if !vm.channel.test("sudo hostname --fqdn | grep '#{name}'")
|
39
|
+
vm.channel.sudo("echo 'hostname=#{name.split('.')[0]}' > /etc/conf.d/hostname")
|
40
|
+
vm.channel.sudo("sed -i 's@^\\(127[.]0[.]1[.]1[[:space:]]\\+\\)@\\1#{name} #{name.split('.')[0]} @' /etc/hosts")
|
41
|
+
vm.channel.sudo("hostname #{name.split('.')[0]}")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'log4r'
|
2
|
+
|
3
|
+
require 'vagrant/guest/linux/error'
|
4
|
+
require 'vagrant/guest/linux/config'
|
5
|
+
|
6
|
+
module Vagrant
|
7
|
+
module Guest
|
8
|
+
class Linux < Base
|
9
|
+
def initialize(*args)
|
10
|
+
super
|
11
|
+
|
12
|
+
@logger = Log4r::Logger.new("vagrant::guest::linux")
|
13
|
+
end
|
14
|
+
|
15
|
+
def distro_dispatch
|
16
|
+
if @vm.channel.test("cat /etc/debian_version")
|
17
|
+
return :debian if @vm.channel.test("cat /proc/version | grep 'Debian'")
|
18
|
+
return :ubuntu if @vm.channel.test("cat /proc/version | grep 'Ubuntu'")
|
19
|
+
end
|
20
|
+
|
21
|
+
return :gentoo if @vm.channel.test("cat /etc/gentoo-release")
|
22
|
+
return :fedora if @vm.channel.test("grep 'Fedora release 16' /etc/redhat-release")
|
23
|
+
return :redhat if @vm.channel.test("cat /etc/redhat-release")
|
24
|
+
return :suse if @vm.channel.test("cat /etc/SuSE-release")
|
25
|
+
return :arch if @vm.channel.test("cat /etc/arch-release")
|
26
|
+
|
27
|
+
# Can't detect the distro, assume vanilla linux
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
|
31
|
+
def halt
|
32
|
+
@vm.channel.sudo("shutdown -h now")
|
33
|
+
|
34
|
+
# Wait until the VM's state is actually powered off. If this doesn't
|
35
|
+
# occur within a reasonable amount of time (15 seconds by default),
|
36
|
+
# then simply return and allow Vagrant to kill the machine.
|
37
|
+
count = 0
|
38
|
+
while @vm.state != :poweroff
|
39
|
+
count += 1
|
40
|
+
|
41
|
+
return if count >= @vm.config.linux.halt_timeout
|
42
|
+
sleep @vm.config.linux.halt_check_interval
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def mount_shared_folder(name, guestpath, options)
|
47
|
+
real_guestpath = expanded_guest_path(guestpath)
|
48
|
+
@logger.debug("Shell expanded guest path: #{real_guestpath}")
|
49
|
+
|
50
|
+
@vm.channel.sudo("mkdir -p #{real_guestpath}")
|
51
|
+
mount_folder(name, real_guestpath, options)
|
52
|
+
@vm.channel.sudo("chown `id -u #{options[:owner]}`:`id -g #{options[:group]}` #{real_guestpath}")
|
53
|
+
end
|
54
|
+
|
55
|
+
def mount_nfs(ip, folders)
|
56
|
+
# TODO: Maybe check for nfs support on the guest, since its often
|
57
|
+
# not installed by default
|
58
|
+
folders.each do |name, opts|
|
59
|
+
# Expand the guestpath, so we can handle things like "~/vagrant"
|
60
|
+
real_guestpath = expanded_guest_path(opts[:guestpath])
|
61
|
+
|
62
|
+
# Do the actual creating and mounting
|
63
|
+
@vm.channel.sudo("mkdir -p #{real_guestpath}")
|
64
|
+
@vm.channel.sudo("mount -o vers=#{opts[:nfs_version]} #{ip}:'#{opts[:hostpath]}' #{real_guestpath}",
|
65
|
+
:error_class => LinuxError,
|
66
|
+
:error_key => :mount_nfs_fail)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
protected
|
71
|
+
|
72
|
+
# Determine the real guest path. Since we use a `sudo` shell everywhere
|
73
|
+
# else, things like '~' don't expand properly in shared folders. We have
|
74
|
+
# to `echo` here to get that path.
|
75
|
+
#
|
76
|
+
# @param [String] guestpath The unexpanded guest path.
|
77
|
+
# @return [String] The expanded guestpath
|
78
|
+
def expanded_guest_path(guestpath)
|
79
|
+
real_guestpath = nil
|
80
|
+
@vm.channel.execute("printf #{guestpath}") do |type, data|
|
81
|
+
if type == :stdout
|
82
|
+
real_guestpath ||= ""
|
83
|
+
real_guestpath += data
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
if !real_guestpath
|
88
|
+
# Really strange error case if this happens. Let's throw an error,
|
89
|
+
# tell the user to check the echo output.
|
90
|
+
raise LinuxError, :_key => :guestpath_expand_fail
|
91
|
+
end
|
92
|
+
|
93
|
+
# Chomp the string so that any trailing newlines are killed
|
94
|
+
return real_guestpath.chomp
|
95
|
+
end
|
96
|
+
|
97
|
+
def mount_folder(name, guestpath, options)
|
98
|
+
# Determine the permission string to attach to the mount command
|
99
|
+
mount_options = "-o uid=`id -u #{options[:owner]}`,gid=`id -g #{options[:group]}`"
|
100
|
+
mount_options += ",#{options[:extra]}" if options[:extra]
|
101
|
+
|
102
|
+
attempts = 0
|
103
|
+
while true
|
104
|
+
success = true
|
105
|
+
@vm.channel.sudo("mount -t vboxsf #{mount_options} #{name} #{guestpath}") do |type, data|
|
106
|
+
success = false if type == :stderr && data =~ /No such device/i
|
107
|
+
end
|
108
|
+
|
109
|
+
break if success
|
110
|
+
|
111
|
+
attempts += 1
|
112
|
+
raise LinuxError, :mount_fail if attempts >= 10
|
113
|
+
sleep 5
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|