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,14 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Util
|
3
|
+
module LineEndingHelpers
|
4
|
+
# Converts line endings to unix-style line endings in the
|
5
|
+
# given string.
|
6
|
+
#
|
7
|
+
# @param [String] string Original string
|
8
|
+
# @return [String] The fixed string
|
9
|
+
def dos_to_unix(string)
|
10
|
+
string.gsub("\r\n", "\n")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Util
|
3
|
+
module NetworkIP
|
4
|
+
# Returns the network address of the given IP and subnet.
|
5
|
+
#
|
6
|
+
# @return [String]
|
7
|
+
def network_address(ip, subnet)
|
8
|
+
ip = ip_parts(ip)
|
9
|
+
netmask = ip_parts(subnet)
|
10
|
+
|
11
|
+
# Bitwise-AND each octet to get the network address
|
12
|
+
# in octets and join each part with a period to get
|
13
|
+
# the resulting network address.
|
14
|
+
ip.map { |part| part & netmask.shift }.join(".")
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
# Splits an IP into the four octets and returns each as an
|
20
|
+
# integer in an array.
|
21
|
+
#
|
22
|
+
# @return [Array<Integer>]
|
23
|
+
def ip_parts(ip)
|
24
|
+
ip.split(".").map { |i| i.to_i }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
module Vagrant
|
5
|
+
module Util
|
6
|
+
# This class just contains some platform checking code.
|
7
|
+
class Platform
|
8
|
+
class << self
|
9
|
+
def tiger?
|
10
|
+
platform.include?("darwin8")
|
11
|
+
end
|
12
|
+
|
13
|
+
def leopard?
|
14
|
+
platform.include?("darwin9")
|
15
|
+
end
|
16
|
+
|
17
|
+
[:darwin, :bsd, :freebsd, :linux, :solaris].each do |type|
|
18
|
+
define_method("#{type}?") do
|
19
|
+
platform.include?(type.to_s)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def windows?
|
24
|
+
%W[mingw mswin].each do |text|
|
25
|
+
return true if platform.include?(text)
|
26
|
+
end
|
27
|
+
|
28
|
+
false
|
29
|
+
end
|
30
|
+
|
31
|
+
# Returns boolean noting whether this is a 64-bit CPU. This
|
32
|
+
# is not 100% accurate and there could easily be false negatives.
|
33
|
+
#
|
34
|
+
# @return [Boolean]
|
35
|
+
def bit64?
|
36
|
+
["x86_64", "amd64"].include?(RbConfig::CONFIG["host_cpu"])
|
37
|
+
end
|
38
|
+
|
39
|
+
# Returns boolean noting whether this is a 32-bit CPU. This
|
40
|
+
# can easily throw false positives since it relies on {#bit64?}.
|
41
|
+
#
|
42
|
+
# @return [Boolean]
|
43
|
+
def bit32?
|
44
|
+
!bit64?
|
45
|
+
end
|
46
|
+
|
47
|
+
# Returns a boolean noting whether the terminal supports color.
|
48
|
+
# output.
|
49
|
+
def terminal_supports_colors?
|
50
|
+
if windows?
|
51
|
+
return ENV.has_key?("ANSICON")
|
52
|
+
end
|
53
|
+
|
54
|
+
true
|
55
|
+
end
|
56
|
+
|
57
|
+
def tar_file_options
|
58
|
+
# create, write only, fail if the file exists, binary if windows
|
59
|
+
File::WRONLY | File::EXCL | File::CREAT | (windows? ? File::BINARY : 0)
|
60
|
+
end
|
61
|
+
|
62
|
+
def platform
|
63
|
+
RbConfig::CONFIG["host_os"].downcase
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Util
|
3
|
+
module Retryable
|
4
|
+
# Retries a given block a specified number of times in the
|
5
|
+
# event the specified exception is raised. If the retries
|
6
|
+
# run out, the final exception is raised.
|
7
|
+
#
|
8
|
+
# This code is adapted slightly from the following blog post:
|
9
|
+
# http://blog.codefront.net/2008/01/14/retrying-code-blocks-in-ruby-on-exceptions-whatever/
|
10
|
+
def retryable(opts=nil)
|
11
|
+
opts = { :tries => 1, :on => Exception }.merge(opts || {})
|
12
|
+
|
13
|
+
begin
|
14
|
+
return yield
|
15
|
+
rescue *opts[:on]
|
16
|
+
if (opts[:tries] -= 1) > 0
|
17
|
+
sleep opts[:sleep].to_f if opts[:sleep]
|
18
|
+
retry
|
19
|
+
end
|
20
|
+
raise
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Util
|
3
|
+
# This module provies a `safe_exec` method which is a drop-in
|
4
|
+
# replacement for `Kernel.exec` which addresses a specific issue
|
5
|
+
# which manifests on OS X 10.5 (GH-51) and perhaps other operating systems.
|
6
|
+
# This issue causes `exec` to fail if there is more than one system
|
7
|
+
# thread. In that case, `safe_exec` automatically falls back to
|
8
|
+
# forking.
|
9
|
+
module SafeExec
|
10
|
+
def safe_exec(command, *args)
|
11
|
+
# Create a list of things to rescue from. Since this is OS
|
12
|
+
# specific, we need to do some defined? checks here to make
|
13
|
+
# sure they exist.
|
14
|
+
rescue_from = []
|
15
|
+
rescue_from << Errno::EOPNOTSUPP if defined?(Errno::EOPNOTSUPP)
|
16
|
+
rescue_from << Errno::E045 if defined?(Errno::E045)
|
17
|
+
rescue_from << SystemCallError
|
18
|
+
|
19
|
+
fork_instead = false
|
20
|
+
begin
|
21
|
+
pid = nil
|
22
|
+
pid = fork if fork_instead
|
23
|
+
Kernel.exec(command, *args) if pid.nil?
|
24
|
+
Process.wait(pid) if pid
|
25
|
+
rescue *rescue_from
|
26
|
+
# We retried already, raise the issue and be done
|
27
|
+
raise if fork_instead
|
28
|
+
|
29
|
+
# The error manifested itself, retry with a fork.
|
30
|
+
fork_instead = true
|
31
|
+
retry
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Util
|
3
|
+
# This module provides a `safe_puts` method which outputs to
|
4
|
+
# the given IO object, and rescues any broken pipe errors and
|
5
|
+
# ignores them. This is useful in cases where you're outputting
|
6
|
+
# to stdout, for example, and the stdout is closed, but you want to
|
7
|
+
# keep running.
|
8
|
+
module SafePuts
|
9
|
+
# Uses `puts` on the given IO object and safely ignores any
|
10
|
+
# Errno::EPIPE.
|
11
|
+
#
|
12
|
+
# @param [String] message Message to output.
|
13
|
+
# @param [Hash] opts Options hash.
|
14
|
+
def safe_puts(message=nil, opts=nil)
|
15
|
+
message ||= ""
|
16
|
+
opts = {
|
17
|
+
:io => $stdout,
|
18
|
+
:printer => :puts
|
19
|
+
}.merge(opts || {})
|
20
|
+
|
21
|
+
begin
|
22
|
+
opts[:io].send(opts[:printer], message)
|
23
|
+
rescue Errno::EPIPE
|
24
|
+
# This is what makes this a `safe` puts.
|
25
|
+
return
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Util
|
3
|
+
# Represents the "stacked proc runner" behavior which is used a
|
4
|
+
# couple places within Vagrant. This allows procs to "stack" on
|
5
|
+
# each other, then all execute in a single action. An example of
|
6
|
+
# its uses can be seen in the {Config} class.
|
7
|
+
module StackedProcRunner
|
8
|
+
# Returns the proc stack. This should always be called as the
|
9
|
+
# accessor of the stack. The instance variable itself should _never_
|
10
|
+
# be used.
|
11
|
+
#
|
12
|
+
# @return [Array<Proc>]
|
13
|
+
def proc_stack
|
14
|
+
@_proc_stack ||= []
|
15
|
+
end
|
16
|
+
|
17
|
+
# Adds (pushes) a proc to the stack. The actual proc added here is
|
18
|
+
# not executed, but merely stored.
|
19
|
+
#
|
20
|
+
# @param [Proc] block
|
21
|
+
def push_proc(&block)
|
22
|
+
proc_stack << block
|
23
|
+
end
|
24
|
+
|
25
|
+
# Executes all the procs on the stack, passing in the given arguments.
|
26
|
+
# The stack is not cleared afterwords. It is up to the user of this
|
27
|
+
# mixin to clear the stack by calling `proc_stack.clear`.
|
28
|
+
def run_procs!(*args)
|
29
|
+
proc_stack.each do |proc|
|
30
|
+
proc.call(*args)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,247 @@
|
|
1
|
+
require 'childprocess'
|
2
|
+
require 'log4r'
|
3
|
+
|
4
|
+
require 'vagrant/util/platform'
|
5
|
+
|
6
|
+
module Vagrant
|
7
|
+
module Util
|
8
|
+
# Execute a command in a subprocess, gathering the results and
|
9
|
+
# exit status.
|
10
|
+
#
|
11
|
+
# This class also allows you to read the data as it is outputted
|
12
|
+
# from the subprocess in real time, by simply passing a block to
|
13
|
+
# the execute method.
|
14
|
+
class Subprocess
|
15
|
+
# The chunk size for reading from subprocess IO.
|
16
|
+
READ_CHUNK_SIZE = 4096
|
17
|
+
|
18
|
+
# Convenience method for executing a method.
|
19
|
+
def self.execute(*command, &block)
|
20
|
+
new(*command).execute(&block)
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize(*command)
|
24
|
+
@options = command.last.is_a?(Hash) ? command.pop : {}
|
25
|
+
@command = command
|
26
|
+
@logger = Log4r::Logger.new("vagrant::util::subprocess")
|
27
|
+
end
|
28
|
+
|
29
|
+
def execute
|
30
|
+
# Get the timeout, if we have one
|
31
|
+
timeout = @options[:timeout]
|
32
|
+
workdir = @options[:workdir] || Dir.pwd
|
33
|
+
|
34
|
+
# Build the ChildProcess
|
35
|
+
@logger.info("Starting process: #{@command.inspect}")
|
36
|
+
process = ChildProcess.build(*@command)
|
37
|
+
|
38
|
+
# Create the pipes so we can read the output in real time as
|
39
|
+
# we execute the command.
|
40
|
+
stdout, stdout_writer = IO.pipe
|
41
|
+
stderr, stderr_writer = IO.pipe
|
42
|
+
process.io.stdout = stdout_writer
|
43
|
+
process.io.stderr = stderr_writer
|
44
|
+
process.duplex = true
|
45
|
+
|
46
|
+
# Set the environment on the process if we must
|
47
|
+
if @options[:env]
|
48
|
+
@options[:env].each do |k, v|
|
49
|
+
process.environment[k] = v
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Start the process
|
54
|
+
begin
|
55
|
+
Dir.chdir(workdir) do
|
56
|
+
process.start
|
57
|
+
end
|
58
|
+
rescue ChildProcess::LaunchError
|
59
|
+
# Raise our own version of the error so that users of the class
|
60
|
+
# don't need to be aware of ChildProcess
|
61
|
+
raise LaunchError
|
62
|
+
end
|
63
|
+
|
64
|
+
# Make sure the stdin does not buffer
|
65
|
+
process.io.stdin.sync = true
|
66
|
+
|
67
|
+
if RUBY_PLATFORM != "java"
|
68
|
+
# On Java, we have to close after. See down the method...
|
69
|
+
# Otherwise, we close the writers right here, since we're
|
70
|
+
# not on the writing side.
|
71
|
+
stdout_writer.close
|
72
|
+
stderr_writer.close
|
73
|
+
end
|
74
|
+
|
75
|
+
# Create a dictionary to store all the output we see.
|
76
|
+
io_data = { :stdout => "", :stderr => "" }
|
77
|
+
|
78
|
+
# Record the start time for timeout purposes
|
79
|
+
start_time = Time.now.to_i
|
80
|
+
|
81
|
+
@logger.debug("Selecting on IO")
|
82
|
+
while true
|
83
|
+
results = IO.select([stdout, stderr], [process.io.stdin], nil, timeout || 5)
|
84
|
+
readers, writers = results
|
85
|
+
|
86
|
+
# Check if we have exceeded our timeout
|
87
|
+
raise TimeoutExceeded, process.pid if timeout && (Time.now.to_i - start_time) > timeout
|
88
|
+
|
89
|
+
# Check the readers to see if they're ready
|
90
|
+
if !readers.empty?
|
91
|
+
readers.each do |r|
|
92
|
+
# Read from the IO object
|
93
|
+
data = read_io(r)
|
94
|
+
|
95
|
+
# We don't need to do anything if the data is empty
|
96
|
+
next if data.empty?
|
97
|
+
|
98
|
+
io_name = r == stdout ? :stdout : :stderr
|
99
|
+
@logger.debug("#{io_name}: #{data}")
|
100
|
+
|
101
|
+
io_data[io_name] += data
|
102
|
+
yield io_name, data if block_given?
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# Break out if the process exited. We have to do this before
|
107
|
+
# attempting to write to stdin otherwise we'll get a broken pipe
|
108
|
+
# error.
|
109
|
+
break if process.exited?
|
110
|
+
|
111
|
+
# Check the writers to see if they're ready, and notify any listeners
|
112
|
+
if !writers.empty?
|
113
|
+
yield :stdin, process.io.stdin if block_given?
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
# Wait for the process to end.
|
118
|
+
begin
|
119
|
+
remaining = (timeout || 32000) - (Time.now.to_i - start_time)
|
120
|
+
remaining = 0 if remaining < 0
|
121
|
+
@logger.debug("Waiting for process to exit. Remaining to timeout: #{remaining}")
|
122
|
+
|
123
|
+
process.poll_for_exit(remaining)
|
124
|
+
rescue ChildProcess::TimeoutError
|
125
|
+
raise TimeoutExceeded, process.pid
|
126
|
+
end
|
127
|
+
|
128
|
+
@logger.debug("Exit status: #{process.exit_code}")
|
129
|
+
|
130
|
+
# Read the final output data, since it is possible we missed a small
|
131
|
+
# amount of text between the time we last read data and when the
|
132
|
+
# process exited.
|
133
|
+
[stdout, stderr].each do |io|
|
134
|
+
# Read the extra data, ignoring if there isn't any
|
135
|
+
extra_data = read_io(io)
|
136
|
+
next if extra_data == ""
|
137
|
+
|
138
|
+
# Log it out and accumulate
|
139
|
+
@logger.debug(extra_data)
|
140
|
+
io_name = io == stdout ? :stdout : :stderr
|
141
|
+
io_data[io_name] += extra_data
|
142
|
+
|
143
|
+
# Yield to any listeners any remaining data
|
144
|
+
yield io_name, extra_data if block_given?
|
145
|
+
end
|
146
|
+
|
147
|
+
if RUBY_PLATFORM == "java"
|
148
|
+
# On JRuby, we need to close the writers after the process,
|
149
|
+
# for some reason. See GH-711.
|
150
|
+
stdout_writer.close
|
151
|
+
stderr_writer.close
|
152
|
+
end
|
153
|
+
|
154
|
+
# Return an exit status container
|
155
|
+
return Result.new(process.exit_code, io_data[:stdout], io_data[:stderr])
|
156
|
+
end
|
157
|
+
|
158
|
+
protected
|
159
|
+
|
160
|
+
# Reads data from an IO object while it can, returning the data it reads.
|
161
|
+
# When it encounters a case when it can't read anymore, it returns the
|
162
|
+
# data.
|
163
|
+
#
|
164
|
+
# @return [String]
|
165
|
+
def read_io(io)
|
166
|
+
data = ""
|
167
|
+
|
168
|
+
while true
|
169
|
+
begin
|
170
|
+
if Platform.windows?
|
171
|
+
# Windows doesn't support non-blocking reads on
|
172
|
+
# file descriptors or pipes so we have to get
|
173
|
+
# a bit more creative.
|
174
|
+
|
175
|
+
# Check if data is actually ready on this IO device.
|
176
|
+
# We have to do this since `readpartial` will actually block
|
177
|
+
# until data is available, which can cause blocking forever
|
178
|
+
# in some cases.
|
179
|
+
results = IO.select([io], nil, nil, 1)
|
180
|
+
break if !results || results[0].empty?
|
181
|
+
|
182
|
+
# Read!
|
183
|
+
data << io.readpartial(READ_CHUNK_SIZE)
|
184
|
+
else
|
185
|
+
# Do a simple non-blocking read on the IO object
|
186
|
+
data << io.read_nonblock(READ_CHUNK_SIZE)
|
187
|
+
end
|
188
|
+
rescue Exception => e
|
189
|
+
# The catch-all rescue here is to support multiple Ruby versions,
|
190
|
+
# since we use some Ruby 1.9 specific exceptions.
|
191
|
+
|
192
|
+
breakable = false
|
193
|
+
if e.is_a?(EOFError)
|
194
|
+
# An `EOFError` means this IO object is done!
|
195
|
+
breakable = true
|
196
|
+
elsif defined?(IO::WaitReadable) && e.is_a?(IO::WaitReadable)
|
197
|
+
# IO::WaitReadable is only available on Ruby 1.9+
|
198
|
+
|
199
|
+
# An IO::WaitReadable means there may be more IO but this
|
200
|
+
# IO object is not ready to be read from yet. No problem,
|
201
|
+
# we read as much as we can, so we break.
|
202
|
+
breakable = true
|
203
|
+
elsif e.is_a?(Errno::EAGAIN)
|
204
|
+
# Otherwise, we just look for the EAGAIN error which should be
|
205
|
+
# all that IO::WaitReadable does in Ruby 1.9.
|
206
|
+
breakable = true
|
207
|
+
end
|
208
|
+
|
209
|
+
# Break out if we're supposed to. Otherwise re-raise the error
|
210
|
+
# because it is a real problem.
|
211
|
+
break if breakable
|
212
|
+
raise
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
data
|
217
|
+
end
|
218
|
+
|
219
|
+
# An error which raises when a process fails to start
|
220
|
+
class LaunchError < StandardError; end
|
221
|
+
|
222
|
+
# An error which occurs when the process doesn't end within
|
223
|
+
# the given timeout.
|
224
|
+
class TimeoutExceeded < StandardError
|
225
|
+
attr_reader :pid
|
226
|
+
|
227
|
+
def initialize(pid)
|
228
|
+
super()
|
229
|
+
@pid = pid
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
# Container class to store the results of executing a subprocess.
|
234
|
+
class Result
|
235
|
+
attr_reader :exit_code
|
236
|
+
attr_reader :stdout
|
237
|
+
attr_reader :stderr
|
238
|
+
|
239
|
+
def initialize(exit_code, stdout, stderr)
|
240
|
+
@exit_code = exit_code
|
241
|
+
@stdout = stdout
|
242
|
+
@stderr = stderr
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|