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,46 @@
|
|
1
|
+
require File.expand_path("../base", __FILE__)
|
2
|
+
require "acceptance/support/shared/command_examples"
|
3
|
+
|
4
|
+
describe "vagrant package" do
|
5
|
+
include_context "acceptance"
|
6
|
+
|
7
|
+
# This creates an initial environment that is ready for a "vagrant up"
|
8
|
+
def initialize_valid_environment
|
9
|
+
require_box("default")
|
10
|
+
|
11
|
+
assert_execute("vagrant", "box", "add", "base", box_path("default"))
|
12
|
+
assert_execute("vagrant", "init")
|
13
|
+
end
|
14
|
+
|
15
|
+
it "can package a running virtual machine" do
|
16
|
+
initialize_valid_environment
|
17
|
+
|
18
|
+
assert_execute("vagrant", "up")
|
19
|
+
assert_execute("vagrant", "package")
|
20
|
+
environment.workdir.join("package.box").should be_file
|
21
|
+
end
|
22
|
+
|
23
|
+
it "can package a `base` VM directly from VirtualBox" do
|
24
|
+
initialize_valid_environment
|
25
|
+
|
26
|
+
# Use a custom Vagrantfile that sets the VM name to `foo`
|
27
|
+
environment.workdir.join("Vagrantfile").open("w+") do |f|
|
28
|
+
f.write(<<-vf)
|
29
|
+
Vagrant::Config.run do |config|
|
30
|
+
config.vm.box = "base"
|
31
|
+
config.vm.customize ["modifyvm", :id, "--name", "foo"]
|
32
|
+
end
|
33
|
+
vf
|
34
|
+
end
|
35
|
+
|
36
|
+
# Bring up the VM
|
37
|
+
assert_execute("vagrant", "up")
|
38
|
+
|
39
|
+
# Remove the Vagrantfile so it doesn't use that
|
40
|
+
environment.workdir.join("Vagrantfile").unlink
|
41
|
+
|
42
|
+
# Now package the base VM
|
43
|
+
assert_execute("vagrant", "package", "--base", "foo")
|
44
|
+
environment.workdir.join("package.box").should be_file
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require File.expand_path("../../base", __FILE__)
|
2
|
+
|
3
|
+
describe "vagrant provisioning basics" do
|
4
|
+
include_context "acceptance"
|
5
|
+
|
6
|
+
it "doesn't provision with `--no-provision` set" do
|
7
|
+
require_box("default")
|
8
|
+
|
9
|
+
assert_execute("vagrant", "box", "add", "base", box_path("default"))
|
10
|
+
|
11
|
+
environment.workdir.join("Vagrantfile").open("w+") do |f|
|
12
|
+
f.write(<<-vf)
|
13
|
+
Vagrant::Config.run do |config|
|
14
|
+
config.vm.box = "base"
|
15
|
+
config.vm.provision :shell, :inline => "echo success > /vagrant/results"
|
16
|
+
end
|
17
|
+
vf
|
18
|
+
end
|
19
|
+
|
20
|
+
# Bring the VM up without enabling provisioning
|
21
|
+
assert_execute("vagrant", "up", "--no-provision")
|
22
|
+
|
23
|
+
# Verify the file that the script creates does NOT exist
|
24
|
+
result_file = environment.workdir.join("results")
|
25
|
+
result_file.exist?.should_not be
|
26
|
+
end
|
27
|
+
|
28
|
+
it "can provision with multiple provisioners" do
|
29
|
+
# Skeleton for multiple provisioners
|
30
|
+
environment.skeleton!("provisioner_multi")
|
31
|
+
|
32
|
+
# Setup the basic environment
|
33
|
+
require_box("default")
|
34
|
+
assert_execute("vagrant", "box", "add", "base", box_path("default"))
|
35
|
+
|
36
|
+
# Bring up the VM
|
37
|
+
assert_execute("vagrant", "up")
|
38
|
+
|
39
|
+
# Verify the file the shell provisioner made is there, but not the
|
40
|
+
# Chef one.
|
41
|
+
environment.workdir.join("shell").exist?.should be
|
42
|
+
environment.workdir.join("chef_solo").exist?.should be
|
43
|
+
end
|
44
|
+
|
45
|
+
it "only uses the provisioners specified with `--provision-with`" do
|
46
|
+
# Skeleton for multiple provisioners
|
47
|
+
environment.skeleton!("provisioner_multi")
|
48
|
+
|
49
|
+
# Setup the basic environment
|
50
|
+
require_box("default")
|
51
|
+
assert_execute("vagrant", "box", "add", "base", box_path("default"))
|
52
|
+
|
53
|
+
# Bring up the VM, only using the shell provisioner
|
54
|
+
assert_execute("vagrant", "up", "--provision-with", "shell")
|
55
|
+
|
56
|
+
# Verify the file the shell provisioner made is there, but not the
|
57
|
+
# Chef one.
|
58
|
+
environment.workdir.join("shell").exist?.should be
|
59
|
+
environment.workdir.join("chef_solo").exist?.should_not be
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.expand_path("../../base", __FILE__)
|
2
|
+
|
3
|
+
describe "vagrant provisioning with chef solo" do
|
4
|
+
include_context "acceptance"
|
5
|
+
|
6
|
+
it "runs basic cookbooks" do
|
7
|
+
# Create the chef solo basic skeleton
|
8
|
+
environment.skeleton!("chef_solo_basic")
|
9
|
+
|
10
|
+
# Setup the basic environment
|
11
|
+
require_box("default")
|
12
|
+
assert_execute("vagrant", "box", "add", "base", box_path("default"))
|
13
|
+
|
14
|
+
# Bring up the VM
|
15
|
+
assert_execute("vagrant", "up")
|
16
|
+
|
17
|
+
# Check for the file it should have created
|
18
|
+
results = assert_execute("vagrant", "ssh", "-c", "cat /tmp/chef_solo_basic")
|
19
|
+
results.stdout.should == "success"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "merges JSON into the attributes" do
|
23
|
+
# Copy the skeleton
|
24
|
+
environment.skeleton!("chef_solo_json")
|
25
|
+
|
26
|
+
# Setup the basic environment
|
27
|
+
require_box("default")
|
28
|
+
assert_execute("vagrant", "box", "add", "base", box_path("default"))
|
29
|
+
|
30
|
+
# Bring up the VM
|
31
|
+
assert_execute("vagrant", "up")
|
32
|
+
|
33
|
+
# Check for the file it should have created
|
34
|
+
results = assert_execute("vagrant", "ssh", "-c", "cat /tmp/chef_solo_basic")
|
35
|
+
results.stdout.should == "json_data"
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require File.expand_path("../../base", __FILE__)
|
2
|
+
|
3
|
+
describe "vagrant provisioning with shell" do
|
4
|
+
include_context "acceptance"
|
5
|
+
|
6
|
+
it "runs a script on boot" do
|
7
|
+
require_box("default")
|
8
|
+
|
9
|
+
assert_execute("vagrant", "box", "add", "base", box_path("default"))
|
10
|
+
|
11
|
+
environment.workdir.join("Vagrantfile").open("w+") do |f|
|
12
|
+
f.write(<<-vf)
|
13
|
+
Vagrant::Config.run do |config|
|
14
|
+
config.vm.box = "base"
|
15
|
+
config.vm.provision :shell, :path => "script.sh"
|
16
|
+
end
|
17
|
+
vf
|
18
|
+
end
|
19
|
+
|
20
|
+
environment.workdir.join("script.sh").open("w+") do |f|
|
21
|
+
f.write(<<-vf)
|
22
|
+
echo success > /vagrant/results
|
23
|
+
vf
|
24
|
+
end
|
25
|
+
|
26
|
+
assert_execute("vagrant", "up")
|
27
|
+
|
28
|
+
result_file = environment.workdir.join("results")
|
29
|
+
result_file.exist?.should be
|
30
|
+
result_file.read.should == "success\n"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "runs an inline script" do
|
34
|
+
require_box("default")
|
35
|
+
|
36
|
+
assert_execute("vagrant", "box", "add", "base", box_path("default"))
|
37
|
+
|
38
|
+
environment.workdir.join("Vagrantfile").open("w+") do |f|
|
39
|
+
f.write(<<-vf)
|
40
|
+
Vagrant::Config.run do |config|
|
41
|
+
config.vm.box = "base"
|
42
|
+
config.vm.provision :shell, :inline => "echo success > /vagrant/results"
|
43
|
+
end
|
44
|
+
vf
|
45
|
+
end
|
46
|
+
|
47
|
+
assert_execute("vagrant", "up")
|
48
|
+
|
49
|
+
result_file = environment.workdir.join("results")
|
50
|
+
result_file.exist?.should be
|
51
|
+
result_file.read.should == "success\n"
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.expand_path("../base", __FILE__)
|
2
|
+
require "acceptance/support/shared/command_examples"
|
3
|
+
|
4
|
+
describe "vagrant resume" do
|
5
|
+
include_context "acceptance"
|
6
|
+
it_behaves_like "a command that requires a Vagrantfile", ["vagrant", "resume"]
|
7
|
+
|
8
|
+
it "succeeds and ignores if the VM is not created" do
|
9
|
+
require_box("default")
|
10
|
+
|
11
|
+
assert_execute("vagrant", "box", "add", "base", box_path("default"))
|
12
|
+
assert_execute("vagrant", "init")
|
13
|
+
|
14
|
+
result = assert_execute("vagrant", "resume")
|
15
|
+
result.stdout.should match_output(:vm_not_created_warning)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require File.expand_path("../base", __FILE__)
|
2
|
+
require "acceptance/support/shared/command_examples"
|
3
|
+
|
4
|
+
describe "vagrant shared folders" do
|
5
|
+
include_context "acceptance"
|
6
|
+
|
7
|
+
# This creates an initial environment that is ready for a "vagrant up"
|
8
|
+
def initialize_valid_environment
|
9
|
+
require_box("default")
|
10
|
+
|
11
|
+
assert_execute("vagrant", "box", "add", "base", box_path("default"))
|
12
|
+
assert_execute("vagrant", "init")
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have a '/vagrant' shared folder" do
|
16
|
+
initialize_valid_environment
|
17
|
+
|
18
|
+
# This is the file that will be created from the VM,
|
19
|
+
# but should then exist on the host machine
|
20
|
+
foofile = environment.workdir.join("foo")
|
21
|
+
|
22
|
+
assert_execute("vagrant", "up")
|
23
|
+
foofile.exist?.should_not be,
|
24
|
+
"'foo' should not exist yet."
|
25
|
+
|
26
|
+
assert_execute("vagrant", "ssh", "-c", "touch /vagrant/foo")
|
27
|
+
foofile.exist?.should be, "'foo' should exist since it was touched in the shared folder"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should create a shared folder if the :create flag is set" do
|
31
|
+
initialize_valid_environment
|
32
|
+
|
33
|
+
# Setup the custom Vagrantfile
|
34
|
+
environment.workdir.join("Vagrantfile").open("w+") do |f|
|
35
|
+
f.write(<<-VF)
|
36
|
+
Vagrant::Config.run do |config|
|
37
|
+
config.vm.box = "base"
|
38
|
+
config.vm.share_folder "v-root", "/vagrant", "./data", :create => true
|
39
|
+
end
|
40
|
+
VF
|
41
|
+
end
|
42
|
+
|
43
|
+
data_dir = environment.workdir.join("data")
|
44
|
+
|
45
|
+
# Verify the directory doesn't exist prior, for sanity
|
46
|
+
data_dir.exist?.should_not be
|
47
|
+
|
48
|
+
# Bring up the VM
|
49
|
+
assert_execute("vagrant", "up")
|
50
|
+
|
51
|
+
# Verify the directory exists
|
52
|
+
data_dir.should be_directory
|
53
|
+
|
54
|
+
# Touch a file and verify it is shared
|
55
|
+
assert_execute("vagrant", "ssh", "-c", "touch /vagrant/foo")
|
56
|
+
data_dir.join("foo").exist?.should be
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should properly shell expand relative directories on the guest" do
|
60
|
+
initialize_valid_environment
|
61
|
+
|
62
|
+
# Setup the custom Vagrantfile
|
63
|
+
environment.workdir.join("Vagrantfile").open("w+") do |f|
|
64
|
+
f.write(<<-VF)
|
65
|
+
Vagrant::Config.run do |config|
|
66
|
+
config.vm.box = "base"
|
67
|
+
config.vm.share_folder "v-root", "~/data", "."
|
68
|
+
end
|
69
|
+
VF
|
70
|
+
end
|
71
|
+
|
72
|
+
# Sanity
|
73
|
+
foo_file = environment.workdir.join("foo")
|
74
|
+
foo_file.exist?.should_not be
|
75
|
+
|
76
|
+
# Bring up the VM
|
77
|
+
assert_execute("vagrant", "up")
|
78
|
+
|
79
|
+
# Touch a file in the shared folder we expect and verify
|
80
|
+
# it is shared.
|
81
|
+
assert_execute("vagrant", "ssh", "-c", "touch ~/data/foo")
|
82
|
+
foo_file.exist?.should be
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require File.expand_path("../base", __FILE__)
|
2
|
+
require "acceptance/support/shared/command_examples"
|
3
|
+
|
4
|
+
describe "vagrant ssh" do
|
5
|
+
include_context "acceptance"
|
6
|
+
it_behaves_like "a command that requires a Vagrantfile", ["vagrant", "ssh"]
|
7
|
+
it_behaves_like "a command that requires a virtual machine", ["vagrant", "ssh"]
|
8
|
+
|
9
|
+
it "is able to SSH into a running virtual machine" do
|
10
|
+
require_box("default")
|
11
|
+
|
12
|
+
assert_execute("vagrant", "box", "add", "base", box_path("default"))
|
13
|
+
assert_execute("vagrant", "init")
|
14
|
+
assert_execute("vagrant", "up")
|
15
|
+
|
16
|
+
outputted = false
|
17
|
+
result = assert_execute("vagrant", "ssh") do |io_type, data|
|
18
|
+
if io_type == :stdin and !outputted
|
19
|
+
data.puts("echo hello")
|
20
|
+
data.puts("exit")
|
21
|
+
outputted = true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
result.stdout.chomp.should eql("hello"), "Vagrant should bring up a VM to be able to SSH into."
|
26
|
+
end
|
27
|
+
|
28
|
+
it "is able to execute a single command via the command line" do
|
29
|
+
require_box("default")
|
30
|
+
|
31
|
+
assert_execute("vagrant", "box", "add", "base", box_path("default"))
|
32
|
+
assert_execute("vagrant", "init")
|
33
|
+
assert_execute("vagrant", "up")
|
34
|
+
|
35
|
+
result = execute("vagrant", "ssh", "-c", "echo foo")
|
36
|
+
result.exit_code.should == 0
|
37
|
+
result.stdout.should == "foo\n"
|
38
|
+
|
39
|
+
result = execute("vagrant", "ssh", "-c", "foooooooooo")
|
40
|
+
result.exit_code.should == 127
|
41
|
+
result.stderr.should =~ /foooooooooo: command not found/
|
42
|
+
end
|
43
|
+
|
44
|
+
# TODO:
|
45
|
+
# SSH should fail if the VM is not running
|
46
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "yaml"
|
2
|
+
|
3
|
+
require "log4r"
|
4
|
+
|
5
|
+
module Acceptance
|
6
|
+
# This represents a configuration object for acceptance tests.
|
7
|
+
class Config
|
8
|
+
attr_reader :vagrant_path
|
9
|
+
attr_reader :vagrant_version
|
10
|
+
attr_reader :env
|
11
|
+
attr_reader :box_directory
|
12
|
+
|
13
|
+
def initialize(path)
|
14
|
+
@logger = Log4r::Logger.new("test::acceptance::config")
|
15
|
+
@logger.info("Loading configuration from: #{path}")
|
16
|
+
options = YAML.load_file(path)
|
17
|
+
@logger.info("Loaded: #{options.inspect}")
|
18
|
+
|
19
|
+
@vagrant_path = options["vagrant_path"]
|
20
|
+
@vagrant_version = options["vagrant_version"]
|
21
|
+
@env = options["env"]
|
22
|
+
@box_directory = options["box_directory"]
|
23
|
+
|
24
|
+
# Verify the configuration object.
|
25
|
+
validate
|
26
|
+
end
|
27
|
+
|
28
|
+
# This method verifies the configuration and makes sure that
|
29
|
+
# all the configuration is available and appears good. This
|
30
|
+
# method will raise an ArgumentError in the case that anything
|
31
|
+
# is wrong.
|
32
|
+
def validate
|
33
|
+
if !@vagrant_path || !File.file?(@vagrant_path)
|
34
|
+
raise ArgumentError, "'vagrant_path' must point to the `vagrant` executable"
|
35
|
+
elsif !@vagrant_version
|
36
|
+
raise ArgumentError, "`vagrant_version' must be set to the version of the `vagrant` executable"
|
37
|
+
elsif !@box_directory || !File.directory?(@box_directory)
|
38
|
+
raise ArgumentError, "`box_directory` must be set to a folder containing boxes for the tests."
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require "fileutils"
|
2
|
+
require "pathname"
|
3
|
+
|
4
|
+
require "log4r"
|
5
|
+
require "childprocess"
|
6
|
+
|
7
|
+
require "vagrant/util/subprocess"
|
8
|
+
|
9
|
+
require "acceptance/support/virtualbox"
|
10
|
+
require "support/isolated_environment"
|
11
|
+
|
12
|
+
module Acceptance
|
13
|
+
# This class manages an isolated environment for Vagrant to
|
14
|
+
# run in. It creates a temporary directory to act as the
|
15
|
+
# working directory as well as sets a custom home directory.
|
16
|
+
class IsolatedEnvironment < ::IsolatedEnvironment
|
17
|
+
SKELETON_DIR = Pathname.new(File.expand_path("../../skeletons", __FILE__))
|
18
|
+
|
19
|
+
def initialize(apps=nil, env=nil)
|
20
|
+
super()
|
21
|
+
|
22
|
+
@logger = Log4r::Logger.new("test::acceptance::isolated_environment")
|
23
|
+
|
24
|
+
@apps = apps.clone || {}
|
25
|
+
@env = env.clone || {}
|
26
|
+
|
27
|
+
# Set the home directory and virtualbox home directory environmental
|
28
|
+
# variables so that Vagrant and VirtualBox see the proper paths here.
|
29
|
+
@env["HOME"] ||= @homedir.to_s
|
30
|
+
@env["VBOX_USER_HOME"] ||= @homedir.to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
# Copies a skeleton into this isolated environment. This is useful
|
34
|
+
# for testing environments that require a complex setup.
|
35
|
+
#
|
36
|
+
# @param [String] name Name of the skeleton in the skeletons/ directory.
|
37
|
+
def skeleton!(name)
|
38
|
+
# Copy all the files into the home directory
|
39
|
+
source = Dir.glob(SKELETON_DIR.join(name).join("*").to_s)
|
40
|
+
FileUtils.cp_r(source, @workdir.to_s)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Executes a command in the context of this isolated environment.
|
44
|
+
# Any command executed will therefore see our temporary directory
|
45
|
+
# as the home directory.
|
46
|
+
def execute(command, *argN)
|
47
|
+
# Create the command
|
48
|
+
command = replace_command(command)
|
49
|
+
|
50
|
+
# Determine the options
|
51
|
+
options = argN.last.is_a?(Hash) ? argN.pop : {}
|
52
|
+
options = {
|
53
|
+
:workdir => @workdir,
|
54
|
+
:env => @env
|
55
|
+
}.merge(options)
|
56
|
+
|
57
|
+
# Add the options to be passed on
|
58
|
+
argN << options
|
59
|
+
|
60
|
+
# Execute, logging out the stdout/stderr as we get it
|
61
|
+
@logger.info("Executing: #{[command].concat(argN).inspect}")
|
62
|
+
Vagrant::Util::Subprocess.execute(command, *argN) do |type, data|
|
63
|
+
@logger.debug("#{type}: #{data}") if type == :stdout || type == :stderr
|
64
|
+
yield type, data if block_given?
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# Closes the environment, cleans up the temporary directories, etc.
|
69
|
+
def close
|
70
|
+
# Only delete virtual machines if VBoxSVC is running, meaning
|
71
|
+
# that something related to VirtualBox started running in this
|
72
|
+
# environment.
|
73
|
+
delete_virtual_machines if VirtualBox.find_vboxsvc
|
74
|
+
|
75
|
+
# Let the parent handle cleaning up
|
76
|
+
super
|
77
|
+
end
|
78
|
+
|
79
|
+
def delete_virtual_machines
|
80
|
+
# Delete all virtual machines
|
81
|
+
@logger.debug("Finding all virtual machines")
|
82
|
+
execute("VBoxManage", "list", "vms").stdout.lines.each do |line|
|
83
|
+
data = /^"(?<name>.+?)" {(?<uuid>.+?)}$/.match(line)
|
84
|
+
|
85
|
+
begin
|
86
|
+
@logger.debug("Removing VM: #{data[:name]}")
|
87
|
+
|
88
|
+
# We add a timeout onto this because sometimes for seemingly no
|
89
|
+
# reason it will simply freeze, although the VM is successfully
|
90
|
+
# "aborted." The timeout gets around this strange behavior.
|
91
|
+
execute("VBoxManage", "controlvm", data[:uuid], "poweroff", :timeout => 5)
|
92
|
+
rescue Vagrant::Util::Subprocess::TimeoutExceeded => e
|
93
|
+
@logger.info("Failed to poweroff VM '#{data[:uuid]}'. Killing process.")
|
94
|
+
|
95
|
+
# Kill the process and wait a bit for it to disappear
|
96
|
+
Process.kill('KILL', e.pid)
|
97
|
+
Process.waitpid2(e.pid)
|
98
|
+
end
|
99
|
+
|
100
|
+
sleep 0.5
|
101
|
+
|
102
|
+
result = execute("VBoxManage", "unregistervm", data[:uuid], "--delete")
|
103
|
+
raise Exception, "VM unregistration failed!" if result.exit_code != 0
|
104
|
+
end
|
105
|
+
|
106
|
+
@logger.info("Removed all virtual machines")
|
107
|
+
end
|
108
|
+
|
109
|
+
# This replaces a command with a replacement defined when this
|
110
|
+
# isolated environment was initialized. If nothing was defined,
|
111
|
+
# then the command itself is returned.
|
112
|
+
def replace_command(command)
|
113
|
+
return @apps[command] if @apps.has_key?(command)
|
114
|
+
return command
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|